🔄

GitHub Actionsでリリースブランチとマスター差分を同期する

2024/11/14に公開

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

概要:
開発作業中、リリースブランチからマスターブランチへのマージを自動化する方法を紹介します。このGitHub Actionsのスクリプトは、prod/releaseブランチに変更が加わったとき、自動でmasterブランチにプルリクエスト(PR)を作成し、ブランチの同期をスムーズにします。手動でPRを作る手間を省き、うっかり忘れてしまう心配もありません!


詳細コード

name: Auto Create Pull Request from prod/release to master

on:
  push:
    branches:
      - "prod/release"

jobs:
  create-pull-request:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Check for existing PR
        id: check_pr
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          existing_pr=$(gh pr list --state open --base master --head prod/release --json number -q '.[0].number')

          if [ -n "$existing_pr" ]; then
            echo "A pull request from prod/release to master already exists: https://github.com/${{ github.repository }}/pull/$existing_pr"
            echo "pr_exists=true" >> $GITHUB_ENV
          else
            echo "pr_exists=false" >> $GITHUB_ENV
          fi

      - name: Create Pull Request if there are changes
        if: env.pr_exists == 'false'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          git fetch origin master

          if ! git diff --quiet origin/master..HEAD; then
            gh pr create --title "Auto PR: prod/release to master" \
              --body "This pull request has been automatically created to merge changes from `prod/release` to `master`." \
              --base master \
              --head prod/release
          else
            echo "No changes detected between prod/release and master; skipping PR creation."
          fi

詳細解説:
このスクリプトを使えば、以下の流れでprod/releaseからmasterへのプルリクエストを自動化します。

  1. トリガー設定

    • prod/releaseブランチにプッシュが発生すると、GitHub Actionsが起動。
  2. ジョブ「create-pull-request」

    • チェックアウトコード:まず、リポジトリ全体を取得。
    • 既存PRのチェック
      gh pr listコマンドで、prod/releaseからmasterへのオープン状態のPRがあるかを確認。PRがすでに存在する場合は、作成をスキップ。
    • PR作成
      • 差分がある場合のみPRを作成。masterブランチと比較して、差分が見つかれば自動で「Auto PR: prod/release to master」というタイトルでPRが作られ、内容も説明されます。
      • 差分がなければ「変更がない」と出力され、PRは作られません。

使い方とポイント

  • ユーモアと効率性:「チェックして、もうある?じゃあ今回はおやすみ〜!」といった具合に、無駄なPRを避ける設計。必要なときだけ働く姿勢はまるで気の利いた同僚のようです。
  • メンテナンスしやすいPR管理:どんどん作られるPRを見失わないため、すでに存在するPRは新規作成をスキップ。これでPRの重複やレビューの負担が軽減されます。

コードが実現する便利な機能を楽しもう!
このスクリプトを使えば、リリースから本番への同期がもっとシームレスに。忙しい開発者の皆さんも、一度設定すれば後は自動で同期作業が進むので、より価値あるタスクに集中できます。

Discussion