概要
- PRオープン時にマイルストーンがついているか検知する
- ついていなかったらCIを落とす
を実現したかったが方法に難があるのでメモを残す。
マイルストーンとは
https://docs.github.com/ja/issues/using-labels-and-milestones-to-track-work/about-milestones
前提
- あるプロジェクトでPRにはすべてマイルストーンをつける
結論
下記のようにgithub-scriptを使ってAPIをたたき、マイルストーンをチェックする。
name: Check Milestone on: pull_request: jobs: check-milestone: runs-on: ubuntu-latest steps: - name: check milestone uses: actions/github-script@v5 with: script: | const { data } = await github.request("GET /repos/{owner}/{repo}/pulls/{pr}", { owner: context.repo.owner, repo: context.repo.repo, pr: context.payload.pull_request.number }); if (data.milestone) { core.info(`This pull request has a milestone set: ${data.milestone.title}`); } else { core.setFailed(`A maintainer needs to set the milestone for this pull request.`); }
課題
milestoneをつけ直したときのイベントを検知できないので、GUIからCIを再実行する必要がある。
https://docs.github.com/ja/actions/managing-workflow-runs/re-running-workflows-and-jobs
手動で再実行は面倒なので、CIを落とさずに、コメントを残したりすることで一次対応できそう。
labelは下記のように検知できるが、milestoneは2021年12月現在は対応していない。
on: pull_request: types: [labeled, unlabeled]
2021/12/21追記
下記のようにコメントを書いて促すようにした。
name: Check Milestone on: pull_request: jobs: check-milestone: runs-on: ubuntu-latest steps: - name: check milestone uses: actions/github-script@v5 with: script: | const { data } = await github.request("GET /repos/{owner}/{repo}/pulls/{pr}", { owner: context.repo.owner, repo: context.repo.repo, pr: context.payload.pull_request.number }); if (data.milestone) { core.info(`This pull request has a milestone set: ${data.milestone.title}`); } else { github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: 'milestoneがついていません:warning:' }) }