トップ «前の日記(2023/02/13 (月) ) 最新 次の日記(2023/02/15 (水) )» 編集 RSS feed

HsbtDiary


2023/02/14 (火) [長年日記]

dependabot が作った PR をテストが通ったら勝手にマージさせる workflow

結論からですが以下の 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 がパスしたらマージするという挙動を使っているということだった。

これ、似たようなことを、それぞれが求めるちょっとだけ違う要件の下で人々が無限に作ってるの面白すぎる。

Asakusa.rb 第701回

今週もいつも通り discord に集まっておしゃべりをしていた。

https://asakusarb.esa.io/posts/1132

前半は yhonda さんと最近 logger にはいった Fiber を使う変更の影響で resque のテストが落ちるようになった、という話を聞いていて「とりあえず関係者を呼ぶ感じですかね〜」とアドバイスしたりしていた。Fiber よくわからん。

https://github.com/resque/resque/issues/1856

あとは tagomoris さんと、「いやー、実は車を手に入れましてね」と首都圏でのドライブの話題とか、入手の経緯などをあれこれ話していた。それほど車そのものには拘ってないけど、いい車、を手に入れたらこだわり出すんだろうなあ。危ない危ない。