はじめに
プロダクトのgitサービスにGitHubを、gitブランチモデルに git-flow を採用しています。
git-flowでは release/*
ブランチを master(main)
ブランチと develop
ブランチにマージするという工程があるのですが、GitHubのプルリクエストでは2つのブランチに同時にマージするということができません。よって、今までは master(main)
へのマージはプルリクエストのクローズ処理で行い、develop
へのマージはローカル環境で人力で行いpushする……というダサダサな運用を続けていました。
もうちょっとなんとかならんかということでGitHub Actionsを使って自動化することにしました。
最初は run
でスクリプトを書き下ろさなきゃいけないよなぁ……と考えていたのですが、探してみるとそのものズバリ yanamura/git-flow-merge-action というアクションがあったのでこれを使うことにしました。
完成物
ということで以下のとおりワークフローファイルを作成しました。というかほぼgit-flow-merge-actionのサンプルのままです。
on:
pull_request:
types: [labeled]
jobs:
auto-merge:
if: github.event.label.name == 'release'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
name: Checkout repository
- name: Extract branch name
uses: mdecoleman/pr-branch-name@1.0.0
id: extract_branch
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- uses: yanamura/git-flow-merge-action@v1
name: git-flow merge
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ steps.extract_branch.outputs.branch }}
# git-flowにおけるdevelopブランチの、あなたのリポジトリーにおける名称
develop_branch: "develop"
# git-flowにおけるmasterブランチの、あなたのリポジトリーにおける名称
main_branch: "main"
設定する箇所は main_branch
のところぐらいですかね。
デフォルトだと master
が設定されてしまいますが、今回のリポジトリーは main
という名称にしていたので "main"
を設定しています。
運用方法
GitHub Actionsによる自動化を導入することで、プルリクエストのクローズの手順が変わります。
今まではプルリクエストページの Merge pull request
ボタンを押下することでプルリクエストのクローズを行っていましたが、今度からは Merge pull request
ボタンの押下の代わりにプルリクエストに対して release
ラベルを付与することを行います。
release
ラベルが付与されたことをトリガーにして上述のGitHubアクションが起動し、 main
ブランチへのマージ、プルリクエストのクローズ、 develop
ブランチへのマージが全て行われます。
頑張れば Merge pull request
ボタンの押下をトリガーにしたワークフローも書ける気がしたのですが、運用の手間はさほど変わらないことからgit-flow-merge-actionのサンプルをそのまま採用しています。
おわりに
楽に設定できて良かった😊