GitHub Actions で遊んでみようと思って、プルリクエストを自動でマージするものを作ってみた。
動いた
最終的に思ったとおりに動いて喜んだ。
コードはここ
https://github.com/bufferings/hello-pr-auto-merge
仕組み
↓こういう設定をしておいて
- ブランチプロテクションで main ブランチへのプルリクエストには Approval が必要な設定にする
- GitHub の Auto Merge という機能が使えるようにする
- GitHub Actions に対してプルリクエストの操作を許可する
↓こういう流れになる
- プルリクエストがオープンされると GitHub Actions が動いて
- そのプルリクエストを Approve して
- Auto Merge をオンにする
- そうすると Approval の条件を満たすので Auto Merge によってプルリクエストがマージされる
設定ファイル
単にマージするだけじゃなくて、ちょっと何かの条件を入れてみようかなと思って「変更されたのが README.md だけだったら」自動でマージされるようにしといた。
name: auto-merge-readme on: pull_request: branches: [ main ] types: [ opened ] permissions: pull-requests: write contents: write jobs: auto-merge: runs-on: ubuntu-latest if: github.event.pull_request.user.login == 'bufferings' env: PR_URL: ${{github.event.pull_request.html_url}} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - name: Checkout repository with preceding commits uses: actions/checkout@v3 with: fetch-depth: 0 - name: Check if only README.md is updated run: | git diff --name-only "origin/main" HEAD | tee /tmp/diffs if [ "$(wc -l < /tmp/diffs)" -eq "$(grep -c "^README.md$" /tmp/diffs)" ]; then echo 'ONLY_README=yes' | tee -a "$GITHUB_ENV" else echo 'ONLY_README=no' | tee -a "$GITHUB_ENV" fi - name: Approve PR if: env.ONLY_README == 'yes' run: gh pr review "$PR_URL" --approve - name: Enable auto-merge if: env.ONLY_README == 'yes' run: gh pr merge --merge --auto "$PR_URL"
参考にした記事
こちらを参考にして作りました。ありがとうございます!
- Github Actionsを使ってプルリクエストを自動でマージしたい - そうきたか
- GitHub ActionsでのPR操作権限はデフォルトでオフになったよ
- GitHub Actions で差分有無に応じた細かい制御を行う
おもしろかった。