🔄
GitHub Actionsでリリースブランチとマスター差分を同期する
※この文章はテンション高めな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
へのプルリクエストを自動化します。
-
トリガー設定:
-
prod/release
ブランチにプッシュが発生すると、GitHub Actionsが起動。
-
-
ジョブ「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は新規作成をスキップ。これでPRの重複やレビューの負担が軽減されます。
コードが実現する便利な機能を楽しもう!
このスクリプトを使えば、リリースから本番への同期がもっとシームレスに。忙しい開発者の皆さんも、一度設定すれば後は自動で同期作業が進むので、より価値あるタスクに集中できます。
Discussion