🛣️

Pull Requestに自動でmilestone設定するやつをつくった

に公開

現在時刻が due_on より古く一番若いnumberのマイルストーンを ref のブランチ名が hoge/ で始まるならばつけるという機構

マイルストーンがなかったり、現在時刻が due_on より古いマイルストーンがなければ何もしない。また、既にPRにマイルストーンが付いていたら上書きして付けない。

name: auto-attach-milestone

on:
  pull_request:
    types: [opened]

jobs:
  auto-attach-milestone:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    if: startsWith(github.head_ref, 'hoge/')
    env:
      GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    steps:
      - name: get target milestone
        id: get_target_milestone
        run: |
          MILESTONE=$(gh api -X GET repos/${{ github.repository }}/milestones -f state=open -f sort=due_on | jq '.[] | select(.due_on > "'$(date -u +"%Y-%m-%dT%H:%M:%SZ")'")')
          MS_NUM=$(echo $MILESTONE | jq '.number')
          echo "ms_number=$MS_NUM" >> $GITHUB_OUTPUT
          if [ -z $MS_NUM ]; then
            echo "due on is past"
            echo "suspend=true" >> $GITHUB_OUTPUT
          fi
      - name: Get associated pull request
        if: steps.get_target_milestone.outputs.suspend != 'true'
        id: get_pull_request
        run: |
          PR=$(gh api repos/${{ github.repository }}/commits/${{ github.event.pull_request.head.sha }}/pulls | jq '.[0]')
          PR_NUM=$(echo $PR | jq '.number')
          MILESTONE_NUMBER=$(echo $PR | jq '.milestone.number')
          echo "pr_number=$PR_NUM" >> $GITHUB_OUTPUT
          echo "ms_number=$MILESTONE_NUMBER" >> $GITHUB_OUTPUT
      - name: attatch milestone
        if: steps.get_pull_request.outputs.ms_number == 'null'
        run: |
          gh api /repos/${{ github.repository }}/issues/${{ steps.get_pull_request.outputs.pr_number }} -F milestone=${{ steps.get_target_milestone.outputs.ms_number }}

Discussion