前提
事象
Dependabotが作成したPRに対して @dependabot merge
のようにコメントをつけるとPRのジョブが全て正常終了した時にDependabotが自動でマージしてくれるんですが、マージコミットに対するデプロイ用のジョブが実行される時にデプロイ時に必要なリポジトリのsecretsが取得できずにデプロイできなくて困りました。
GitHub Actionsの設定
- name: Create Sentry release uses: getsentry/action-release@v1 env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} SENTRY_ORG: ${{ secrets.SENTRY_ORG }} SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT_FRONTEND }} with: environment: production
ジョブの実行結果
確かにsecretsが渡されていない模様。(なにか値が渡されていれば ***
のようにマスクされた状態でログに出るはず)
原因
GitHubのRepository secrets(リポジトリ全体で使えるsecrets)やEnvironment secrets(productionやdevelopmentなどの環境毎に使えるsecrets)*1はリポジトリに対してWrite権限を持ってるユーザが実行したジョブにしか渡されないのですが、 @dependabot merge
でマージを行った場合はリポジトリにWrite権限を持っていないDependabotがジョブを実行したことになってるためsecretsが渡されていませんでした。
解決策
Dependabot secrets に設定すればDependabotが実行したジョブに対してsecretsが渡されるようになります。
ただ、このDependabot secretsは本来Dependabotがプライベートなパッケージマネージャにアクセスするために利用してるものだと思うので、今回のようなケースはGitHubがあまり想定してない解決方法のような気がしています。(なので今後GitHubの仕様変更で使えなくなる可能性も十分ありうる)
2022/10/5 19:50追記
別の場所で
このユースケースならAuto mergeが良いかなと思いましたが、botにマージさせたい理由が何かあった感じでしょうか?
って質問があったので追記。
メンテしてるリポジトリが70〜80個あるんですが*2、起きている時間帯にdepandabotのPRがくるとqueueが詰まって業務や趣味開発に支障が出るので、自分が寝ている時間帯になるべくPRをマージまでさせたいというのが一番の理由です。
(このエントリだと説明端折っていたけど実際には https://github.com/marketplace/actions/dependabot-auto-merge で @dependabot merge
のコメントをつけています)