はじめに
プロダクトの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のサンプルをそのまま採用しています。
おわりに
楽に設定できて良かった😊