tl;dr;
いくつかやり方はあるんだけどどれも一長一短で決定打はなかった
前置き
Dependabot Previewの終了がアナウンスされました。
Auto-merge: We always recommend verifying your dependencies before merging them; therefore, auto-merge will not be supported for the foreseeable future. For those of you who have vetted your dependencies, or are only using internal dependencies, we recommend adding third-party auto-merge apps, or setting up GitHub Actions to merge.
と書いてるようにGitHub-native Dependabot(新しい方)ではAuto mergeがサポートされないようです。
Dependabot Preview(古い方)では automerged_updates
を使ってたので本腰入れて調べてみました。
ちなみに自動マージをやりたいモチベーションは個人的な理由なので大抵の人には当てはまらないと思います。(20個以上の個人アプリでdependabotを入れてると大量にPRきた時にマージするだけでも大変だし一気にマージするとデプロイのqueueが詰まる(CircleCIのjobの同時実行数はアカウント単位)ので、開発系のライブラリや本番系のライブラリでもパッチバージョンのバージョンアップ時は自動マージを許したい)
GitHub Actionsでやる方法
https://github.com/marketplace?type=actions&query=dependabot+merge で調べてStar数の多いものや定期的に更新されてるものをピックアップしました
Dependabot Auto Merge
pull_requestイベントかpull_request_targetイベントで実行される。執筆時点での最新版は2.4.0
メリット
- Dependabot Previewの
automerged_updates
相当の設定がある- https://github.com/sue445/emoy_webhook/pull/164/files を見てもらえれば分かる通り
.dependabot/config.yml
のautomerged_updates
をそのままコピペするだけでOK
- https://github.com/sue445/emoy_webhook/pull/164/files を見てもらえれば分かる通り
- APIから
@dependabot merge
みたいなコメントをして実現してるのでGitHub-native Dependabotと100%の互換性がある
デメリット
- 前述の仕様のためPersonal Access Token(PAT)が必要
備考
GitHub-native Dependabotの仕様としてpublicリポジトリのpull_requestイベントだとsecretsが取れないのでPATの受け渡しができずにエラーになるのでpull_request_targetイベントを使う必要があるのですが、pull_request_targetイベントだと今度はセキュリティリスクがあるので注意する必要があります。
https://github.com/ahmadnassri/action-dependabot-auto-merge/issues/60#issuecomment-806170152 みたいに github.actor
でチェックするしかなさそう。
Merge me!
workflow_runイベントによって別のジョブの終了時に実行される。執筆時点での最新版は1.2.62
メリット
secrets.GITHUB_TOKEN
が使える
デメリット
- presetで
DEPENDABOT_MINOR
とDEPENDABOT_PATCH
はあるものの現時点ではDependabot Previewほどの柔軟さはない - workflow_runの仕様上リポジトリ上はGitHub Actionsで統一していないと使えない
- CircleCIのジョブ終了時にGitHub Actionsを発火させるのはできなくはないが大変そう
Dependabot Pull Request Action
scheduleイベントで定期実行する。執筆時点での最新版は1.0.0
メリット
secrets.GITHUB_TOKEN
が使える
デメリット
- 設定は豊富だが現時点ではDependabot Previewの
automerged_updates
を完全に置き換えるのは難しそう - dependabotを実行する時間にあわせてscheduleの時間も調整する必要がある
- 寝てる間にいい感じにマージされていればいいのであれば雑に30分後とか1時間後にセットすればいいけど、そのラグが許容できないとストレスかも
番外編
Renovateを使う
Renovateであればauto merge対応してるのでDependabotから移行するのも1つの手なのだが、DependabotはGitHub公式という強みがあるので移行するかどうかはかなり悩ましい
近況
手持ちのリポジトリ全部移行する前にDependabot Auto MergeとMerge me!を1リポジトリずつ入れて試験運用してみた結果、下記の理由でDependabot Auto Mergeを採用しました