🕊️

PR に紐付けたいワークフローは push ではなく pull_request イベントを使おう [GitHub Actions]

2022/07/13に公開

概要

ジョブ実行画面に PR へのリンクがないから不便という記事に賛同している人が思いのほか多かったのでこの記事を書いておきます。

https://blog.3qe.us/entry/2022/07/12/195023

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_REFrefs/pull/:prNumber/merge になっておりマージブランチで実行されます。
これはチェックアウト時に ref を指定することで変更することができます。

- uses: actions/checkout@v3
  with:
    ref: ${{ github.head_ref }}

push イベントでは paths が利用できない

push イベントだと当然ながら PR の差分を見てくれないので paths が意図した挙動をしないことが多いです。
詳細は以下の記事を確認してください。

https://zenn.dev/takehitohito/articles/75bc95eb7d4610

workflow_dispatch イベントは?

では workflow_dispatch イベントのときはどうかというと手動実行用のイベントですから当然 PR には紐付きませんしステータスも PR に表示されません。
ですが手動で実行している場合はどこで実行したか把握しているので PR へのリンクがなくてもそんなに困らないように思います。
もしリンクが必要な場合は引用したサイトの記事を参考にするといいでしょう。

このイベントは API からも実行できます。
ワークフロー内でも gh workflow run コマンドでトリガーすることが可能です。
ただこれをやってしまうと実行ログがワークフロー間で紐付かずログを追うのが困難になります。(現在進行形で自分も困っていますし、だからこそリンクが欲しくなるのかもしれませんが)
可能であれば workflow_call イベントを使うか、ワークフローを統合してカスタムアクションで置き換えるのがよさそうです。
workflow_run イベントもありますがこれもデフォルトブランチでしか動かなかったりして癖があります。

まとめ

PR に紐付けたい場合は素直に pull_request イベントを使いましょう。

Discussion