くりにっき

フルスタックキュアエンジニアです

GitHub Actions上でPRを作る時はsecrets.GITHUB_TOKENは使わない方がよさそう

事象

GitHub Actions上で使える secrets.GITHUB_TOKEN だと別のジョブを起動できないというのが一番の理由。

https://docs.github.com/en/actions/reference/events-that-trigger-workflows#triggering-new-workflows-using-a-personal-access-token

具体的にどういうケースで困るのかというと、GitHub Actions上でPRを作った場合にそのPRに対するビルドが行われません。

普通だったらコミットIDの左側に✔が出るはずなんだけど出ない図

pushやPRなどのビルドをGitHub Actions以外(例:CircleCIなど)で行っている場合には問題ないです。

解決策

いくつか案はあるのですが現状だと GitHub App Token を使うのがいいと思ってます。

2023/01/08 追記:このエントリ執筆時点では3rd party製の https://github.com/tibdex/github-app-token しかなかったけど、現在は公式で https://github.com/actions/create-github-app-token があるので後者を使うのがよさそう。(引数名がちょっと違う以外は使い勝手は一緒)

App作成の手間はあるもののインストールするリポジトリを指定できるので権限の分離ができるのが一番の理由です。 (パーソナルアクセストークンだと業務で所属してるorg含めて自分が見れる全リポジトリが対象になるので漏洩時のリスクが怖い)

実際に動かした図

sue445-botGitHub App)でPRを作ったのでGitHub Actionsでビルドが実行されるようになってます

上記AppだとパーミッションはActionsとPull requestsにRead & writeをつけたけどActionsの方は不要だったかもしれないです。

2020/09/12追記:Pull requestsのRead & writeだけで良かった

go-mod-tidy-prでも同様の問題を抱えていたのでGitHub App Token推奨にしました。

https://github.com/sue445/go-mod-tidy-pr#note-warning

謝辞

という情報を プリッカソン のSlackで知って便利

2020/9/1 22:50 追記

GutHub Appを作った場合は今度はAppの秘密鍵の管理を考える必要がありますが、Organizationであれば Organization secrets が使えるのでこの手の秘密鍵の管理に便利そうです。(ってことを ruby-jp Slack で話していて思い出した)

github.blog