プルリクエストを自動マージ!PR完了後の面倒を省くGitHub Actionsワークフロー

2024/11/14に公開

※この文章はテンション高めなChatGPTが書いています。

概要:
プルリクエスト(PR)が作成されてテストが完了した後、すべてが問題ない場合は自動でマージする、という夢のようなワークフローを紹介します。このGitHub Actionsスクリプトは、prod/releaseブランチからmasterブランチへのPRが成功すると、それを自動でマージする設定です。自動化により、PRの手動マージにかかる時間と手間を削減できます。

前の記事:
https://zenn.dev/workoocha/articles/0c4458847d0998


詳細コード

name: Auto Merge PR on Successful PR Creation

on:
  workflow_run:
    workflows: ["Auto Create Pull Request from prod/release to master"]
    types:
      - completed

jobs:
  auto-merge:
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    runs-on: ubuntu-latest

    steps:
      - name: Check and Auto Merge PR if All Checks Passed
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          pr_number=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
            -H "Accept: application/vnd.github+json" \
            "https://api.github.com/repos/${{ github.repository }}/pulls?base=master&head=${{ github.repository_owner }}:prod/release&state=open" \
            | jq '.[0].number')

          if [ "$pr_number" != "null" ]; then
            mergeable_state=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
              -H "Accept: application/vnd.github+json" \
              "https://api.github.com/repos/${{ github.repository }}/pulls/$pr_number" \
              | jq -r '.mergeable_state')

            if [ "$mergeable_state" == "clean" ]; then
              curl -s -X PUT -H "Authorization: token $GITHUB_TOKEN" \
                -H "Accept: application/vnd.github+json" \
                "https://api.github.com/repos/${{ github.repository }}/pulls/$pr_number/merge" \
                -d '{"merge_method":"merge"}'
              echo "PR #$pr_number has been automatically merged."
            else
              echo "PR #$pr_number is not mergeable (state: $mergeable_state)."
            fi
          else
            echo "No open pull request found from prod/release to master."
          fi

詳細解説:
このワークフローでは、前段で作成した「Auto Create Pull Request from prod/release to master」ワークフローが成功した際に自動でマージを行います。

  1. トリガー設定

    • 「Auto Create Pull Request from prod/release to master」ワークフローが成功 (completed & success) したときに自動実行。
  2. ジョブ「auto-merge」

    • PRの取得
      • curl コマンドでAPIからprod/releasemasterのオープンなPRを確認し、その番号を取得。
    • マージ可能性の確認
      • 取得したPRがマージ可能か (mergeable_statecleanか) をチェック。
    • マージの実行
      • マージ可能であれば自動でマージを実行し、「PR #123 has been automatically merged.」とログ出力。マージ不可能な場合は、その状態をログに出力。

使い方とポイント

  • 時間と労力の節約
    自動でPRをチェックしてマージできるため、手作業でマージ確認を行う必要がなくなります。
  • スマートなエラー処理
    マージが不可能な場合にその理由がわかるので、すぐに問題解決に取りかかれます。

コードがもたらすスマートなPR管理!
このワークフローにより、PRの作成からマージまでを完全に自動化。人為的なミスを減らしつつ、より素早くリリースを進められるようになります。余裕のあるワークフロー管理で、他のプロジェクトにも集中できます!

Discussion