結論からですが以下の yaml をコピペして MATZBOT_GITHUB_TOKEN
を merge するユーザーの token へ、check-regexp: test*
をテストなどの job 名に書き換えてください。
name: Dependabot auto-merge
on:
pull_request_target:
jobs:
automerge:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
uses: dependabot/fetch-metadata@v1
id: metadata
- name: Wait for status checks
uses: lewagon/wait-on-check-action@v1.2.0
with:
repo-token: ${{ secrets.MATZBOT_GITHUB_TOKEN }}
ref: ${{ github.event.pull_request.head.sha || github.sha }}
check-regexp: test*
wait-interval: 30
- name: Auto-merge for Dependabot PRs
if: ${{ steps.metadata.outputs.update-type == 'version-update:semver-minor' || steps.metadata.outputs.update-type == 'version-update:semver-patch'}}
run: gh pr merge --auto --merge "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{ secrets.MATZBOT_GITHUB_TOKEN }}
ソースはこれ https://github.com/ruby/rake/blob/master/.github/workflows/dependabot_automerge.yml
発端は https://github.com/ruby/vscode-typeprof/pull/22 で ono-max さんが dependabot のはマージさせるというのをやろうとしていて、「これ、テストの実行を待ってパスしたらマージさせる、の方がいいんでは」と思い色々調べていて上記のような内容になった。
めちゃくちゃハマったのが、dependabot が作った PR の Actions は read-only で実行されるようで、repo-token
として write なものを渡してもブラックホールに消えてしまって、どうやっても lewagon/wait-on-check-action
が動かなくて頭を抱えていた。
結局、この dependabot PR の動きは pull_request_target
を使うことで回避できるということを GitHub のブログで知ったので、そのあとは適当に書き換えたらすんなり動いてしまった。
自分の用途としては GitHub Actions 自体の更新とか、別に壊れても直せばいいや、みたいなやつでだけ有効にするつもりだけど、dependabot マージ業がだるくなってきた人はこういうのを使うと便利そうです。
追記: @sue445 さんに自分は GitHub-native DependabotでもAuto mergeをやりたかった - くりにっき でやっているという話を共有してもらった。
仕組みを眺めてみると dependabot に全て任せて、status check も @dependabot merge
とコメントしたらその先は dependabot の status check 次第というものだった。これはこれでシンプルなのでいいかもしれない。対象とするステータスを絞り込みたい、とか機械的にコメントするのは...というあたりが気になるなら上の方法がいいかな、となった。
追記2: @ohbarye さんも似たようなことをやっているという話をしていて https://docs.github.com/en/code-security/dependabot/working-with-dependabot/automating-dependabot-with-github-actions#enable-auto-merge-on-a-pull-request にある手順を使いつつ、gh pr merge --auto --merge
の組み合わせで branch rule がパスしたらマージするという挙動を使っているということだった。
これ、似たようなことを、それぞれが求めるちょっとだけ違う要件の下で人々が無限に作ってるの面白すぎる。
今週もいつも通り discord に集まっておしゃべりをしていた。
https://asakusarb.esa.io/posts/1132
前半は yhonda さんと最近 logger にはいった Fiber を使う変更の影響で resque のテストが落ちるようになった、という話を聞いていて「とりあえず関係者を呼ぶ感じですかね〜」とアドバイスしたりしていた。Fiber よくわからん。
https://github.com/resque/resque/issues/1856
あとは tagomoris さんと、「いやー、実は車を手に入れましてね」と首都圏でのドライブの話題とか、入手の経緯などをあれこれ話していた。それほど車そのものには拘ってないけど、いい車、を手に入れたらこだわり出すんだろうなあ。危ない危ない。