🚨

BitriseでPRをトリガーにしたワークフローを、任意のBaseブランチの場合はCompareブランチを確認して処理する方法

2023/03/01に公開

背景

git-flowなどを使用している場合、mainブランチやdevelopブランチへのマージは特定のブランチのみに制限したいと考えると思います。基本的には運用でカバーできると思いますが、うっかりmainやdevelop向けにPRを作成してBaseブランチの確認が漏れた場合、特定のブランチ以外がマージされてしまうといったことが起こり得ます。運用で頑張るのには限界がある為、CI側で弾くというアプローチを取ったので紹介します。

前提

PRを作成した際にUnit TestやLintなどを実行するワークフローが走るように、Bitrise側のトリガーを設定しています。

方法

方法は至ってシンプルでワークフローの最初にScriptを追加して、BaseブランチとCompareブランチを確認するだけです。

環境変数

https://devcenter.bitrise.io/ja/references/available-environment-variables.html
Bitriseには環境変数が用意されており

  • BITRISEIO_GIT_BRANCH_DEST(Baseブランチ)
  • BITRISE_GIT_BRANCH(Compareブランチ)

上記を使用することでブランチ名を取得することが出来ます。

スクリプトの内容

mainブランチへのマージをreleaseブランチとhotfixブランチのみに限定する場合

#!/usr/bin/env bash
if [ "$BITRISEIO_GIT_BRANCH_DEST" = "main" ] && [[ "$BITRISE_GIT_BRANCH" != release/* ]] && [[ "$BITRISE_GIT_BRANCH" != hotfix/* ]]; then
  echo "mainへのPRはrelease OR hotfixブランチのみ受け付けます"
  exit 1
fi

処理の内容は書いてある通りなんですが

  1. BITRISEIO_GIT_BRANCH_DESTでBaseブランチを取得して、mainブランチかどうか比較
  2. (mainブランチだった場合)BITRISE_GIT_BRANCHでCompareブランチを取得して、release/xxx or hotfix/xxxかどうか比較
  3. (release/xxx or hotfix/xxxでない場合)exit 1で処理を終了させる

上記のScriptによって、任意のブランチ以外は失敗するように出来ます。

まとめ

Bitriseのワークフローの最初にScriptを追加することで実現ができる。
CIが失敗している場合は、マージできないようにGitHub側で設定をすることによって運用でのカバーじゃない方法でマージされることを防ぐことが可能になります。

Voicyテックブログ

Discussion