PR に紐付けたいワークフローは push ではなく pull_request イベントを使おう [GitHub Actions]
概要
ジョブ実行画面に PR へのリンクがないから不便という記事に賛同している人が思いのほか多かったのでこの記事を書いておきます。
pull_request イベントは PR へリンクされる
pull_request
イベントには最初から PR へのリンクが用意されています。
なぜ push イベント?
push
イベントを使いたくなる理由は主に以下の 2 つかなと思っていますがいずれも pull_request
イベントで実現可能です。
- PR が更新されたときに実行したい
- PR のブランチで実行したい
PR が更新されたときに実行する
pull_request
イベントはデフォルトで types: [ opened, synchronize, reopened ]
のときに実行されます。
このうち synchronize
が PR が更新されたときに該当します。
PR のブランチで実行する
pull_request
イベントはデフォルトでは GITHUB_REF
が refs/pull/:prNumber/merge
になっておりマージブランチで実行されます。
これはチェックアウト時に ref
を指定することで変更することができます。
- uses: actions/checkout@v3
with:
ref: ${{ github.head_ref }}
push イベントでは paths が利用できない
push
イベントだと当然ながら PR の差分を見てくれないので paths
が意図した挙動をしないことが多いです。
詳細は以下の記事を確認してください。
workflow_dispatch イベントは?
では workflow_dispatch
イベントのときはどうかというと手動実行用のイベントですから当然 PR には紐付きませんしステータスも PR に表示されません。
ですが手動で実行している場合はどこで実行したか把握しているので PR へのリンクがなくてもそんなに困らないように思います。
もしリンクが必要な場合は引用したサイトの記事を参考にするといいでしょう。
このイベントは API からも実行できます。
ワークフロー内でも gh workflow run
コマンドでトリガーすることが可能です。
ただこれをやってしまうと実行ログがワークフロー間で紐付かずログを追うのが困難になります。(現在進行形で自分も困っていますし、だからこそリンクが欲しくなるのかもしれませんが)
可能であれば workflow_call
イベントを使うか、ワークフローを統合してカスタムアクションで置き換えるのがよさそうです。
workflow_run
イベントもありますがこれもデフォルトブランチでしか動かなかったりして癖があります。
まとめ
PR に紐付けたい場合は素直に pull_request
イベントを使いましょう。
Discussion