くりにっき

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

DependabotがマージしたPRのジョブに対してsecretsを渡したい

前提

事象

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 のコメントをつけています)

*1:https://docs.github.com/ja/actions/security-guides/encrypted-secrets

*2: Depebdabotを入れてるリポジトリだけでも20個以上はあると思う