[GitHub Actions]GITHUB_TOKENの権限とPermissions設定
こんにちは、Nofiです。
GitHub Actionsでworkflowを作成したとき、下記のエラーがでて困ったので解決策まとめです。
remote repository not found
RequestError [HttpError]: Resource not accessible by integration
エラーの正体はGITHUB_TOKENの権限
workflowにどんな権限を与えるのか、必要な権限を確認して設定していきます。
「request method」と「RequestError at 〜」を確認する
エラーが出ているworkflowの「request method」と「RequestError at 〜」を確認します。
ここではrequest methodは「POST」です。
「RequestError at 〜」は「Creat a check run」、URLの「check-runs」にも注目します。
許可する必要のあるAccessを確認する
以下のページでGitHub Appsが各権限でアクセスできるAPIエンドポイントを探し、許可する必要のあるAccessを確認します。
(GitHubのAPIの1つであるREST APIのlatestバージョンのドキュメントです。GitHub Appに必要な権限が確認できます。)
今回は、request method「POST」で、「check-runs」が最後に来ているAPIエンドポイントを探します。こちらです。
GITHUB_TOKENの権限を制御するPermissionsを設定する
Permissionsの種類はこちらに詳しく載っています。
いろいろあります。自分がworkflowで何をしようとしているかでPermissionを探します。
今回はchecks
にwrite権限が必要なため、Permissionsの項目に設定します。
workflowではこのように権限が許可されます。
しかし、これだけだと失敗しました。
contents
を設定する必要がある
PermissionsのこのままのPermissionsではではリポジトリの中身を操作できないようで、contents
を設定する必要がありました。
contents
は、リポジトリのコンテンツを操作する許可を与えます。たとえば、contents: readは、コミットを一覧表示するアクションを許可し、contents: writeはリリースを作成するアクションを許可します。
contents
Work with the contents of the repository. For example, contents: read permits an action to list the commits, and contents: write allows the action to create a release.
今回リリースは作成していないのでcontents:read
を追加します。
workflowではこのように権限が許可されます。
これでworkflowが正常に動きました!
ちなみに、Permissionsを設定していないとこうなります。
まとめ
GitHub Actions導入して、merge時とpull_request作成時のworkflowをなんとか作って動くことを確認していたのですが、PullRequest作成時の動作確認を忘れていました。
案の定、PullRequest作成後からworkflowがずっと落ちていて、よくわかっていなかった私はスルーし続け、なんならmerge以外は落ちるものだと思っていました。(そんなわけない)
権限の許可設定が必要だったんですね。
なんとか今回workflowが使えるようになって助かりました。
GitHub Actionsを使う方の参考になれば幸いです!
Discussion