レビューの準備ができたときにのみGithubActionsを実行する
普段のGtihubActionsの設定と問題
設定
GtihubActionsのワークフローのイベントを「特定のブランチにPull Requestされたら実行する」という設定にしていました。
on:
pull_request:
branches:
- main
- 'feature/**'
jobs:
︙
実行したい処理
︙
問題
ただ、この状態ではPull Requestをオープンすると、以下のときにワークフローが実行されます。
type | 説明 |
---|---|
opened |
Pull Requestが作成されたとき |
synchronize |
Pull Requestにコミットがpushされたとき |
reopened |
クローズしたPull Requestを再オープンしたとき |
この状態ではPull Requestを作ったときとコミットがpushされるたびにGtihubActionsが実行されてしまいます。
レビューの準備ができたときにのみ実行する
そこでPull Requestの状態に応じて、実行タイミングを以下のように指定したワークフローを設けたいと思いました。
- Pull RequestをDraftからレビュー準備完了の状態に変えたときは実行する
- Pull RequestをDraftで作成したときは実行しない
改善案
Pull RequestをDraftからレビュー準備完了の状態に変えたときは実行する
pull_request
イベントに対してアクティビティを ready_for_review
に指定することで、「Draftからレビュー準備完了の状態に変えた」ときに実行するように設定ができます。
on:
pull_request:
types:
- ready_for_review # draftからPRレビューに変わったとき
branches:
- main
- 'feature/**'
jobs:
︙
実行したい処理
︙
Pull RequestをDraftで作成したときは実行しない
上記だけでは、Pull Requestを作成したときにワークフローが実行されてしまうので、 jobs
のほうに「Draftで作成したときは実行しない」条件をつけます。
例えば、 build
というジョブに対して条件をつけるときは以下のようになります。
on:
pull_request:
types:
- ready_for_review # draftからPRレビューに変わったとき
branches:
- main
- 'feature/**'
jobs:
build:
if: github.event.pull_request.draft == false
︙
実行したい処理
︙
githubコンテキストからは実行したワークフローに関する情報が使えます。
今回は github.event.pull_request.draft
から「ワークフローを実行しているPull Requestの状態がDraftなのかどうか」の情報を取得して判定します。
ワークフローを実行している段階でPull RequestがDraftの場合は実行させたくない(Draftではないときは実行したい)ので、 github.event.pull_request.draft
が false
のときという条件をつけます。
これでPull RequestをDraftからレビューの準備ができたときにのみGtihubActionsのワークフローを実行することができます。
締め
これでGtihubActionsのワークフローをレビューの準備ができたときにのみ実行する設定ができました。
設定自体はこれでOKですが、運用時は以下のケースを考えてそれぞれの対応方法を決めるといいと思いました。
- チームメンバーへレビュー依頼するとき
- レビューで指摘を受け、修正をするとき
参考
Discussion