やりたいこと
GithubのPull-Reqに特定のラベルをつけたとき、別のリポジトリにあるIssueにその旨コメントしたい。
前提知識
我らがチームでは、Pull-Request機能を使って、staging
ブランチからmaster
またはmain
ブランチにマージすることでリリースフローが回る。これまでは、リリースが完了したとき、その旨をダッシュボード的なIssue(別のリポジトリにある)に書き込んでいた。これをより自動化して、人間がリリース済み
タグを貼り付けるだけで済ませたい。
やったこと
転記元のリポジトリにGithub Actions Workflowを追加した。コメント追加には、peter-evans/create-or-update-commentを使った。
↓このコードは動作しません。動作するコードはあとで貼ります。
name: Add comment when release completes to <repo url> on: pull_request: types: - labeled jobs: add-comment: if: github.event.label.name == 'リリース済み' runs-on: ubuntu-latest permissions: issues: write steps: - name: Add comment uses: peter-evans/create-or-update-comment@v1 with: repository: <org>/<thatrepo> issue-number: <issuenumber> body: | ## リリース ${{ github.repository }} :sparkles: ${{ github.server_url }}/${{ github.repository }}/pull/${{github.event.pull_request.number}} :sparkles:
動かない
Not Found
とだけ表示され動作しない。
仮説: Actionの指定に失敗している
Actionsの指定がNot Foundなのかな?と思ってuses:
の部分をいじったりしたけど変化はなかった。ログを見るとActionをダウンロードしている様子が含まれていたので棄却された。
仮説: permissions
の指定が過剰になっている
ActionのREADMEにはこんな項目ない。本当は指定しなくても良いのではないか。
https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions#env によれば
You can use permissions to modify the default permissions granted to the GITHUB_TOKEN, adding or removing access as required, so that you only allow the minimum required access
とのことであった。つまり、GithubのSettingsで許可していたら全スコープにWrite permissionがつくので問題ないはず。
permissions
はそこからさらにfine-grainedな調整を行ってセキュリティを確保するための機能であることがわかったから、いったんpermissons
を解除した。
ログを見ても全ての項目にwriteがついていることが確認できた。
仮説: Workflowを走らせているリポジトリから、書き込み先のリポジトリが見えていない
☆これだった
同じorganizationに入っているから見えるはずなんだけど・・・と思っていたら違った様子。
Workflowを起動したときに自動的にもらえるトークンは、実行リポジトリにかんする権限しか得られないので、他のリポジトリに対して書き込みたいときはOrganizationレベルで
name: Add comment when release completes to <repo url> on: pull_request: types: - labeled jobs: add-comment: if: github.event.label.name == 'リリース済み' runs-on: ubuntu-latest steps: - name: Add comment uses: peter-evans/create-or-update-comment@v1 with: repository: <org>/<thatrepo> token: ${{ secrets.SUPER_ORGANIZATION_WIDE_GITHUB_PAT }} issue-number: <issuenumber> body: | ## リリース ${{ github.repository }} :sparkles: ${{ github.server_url }}/${{ github.repository }}/pull/${{github.event.pull_request.number}} :sparkles: