Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

fastlaneで最新のコミットがマージコミットであるかを判定する

リリース作業の自動化でちょこっと書いたもののメモ
(実際の自動化における利用方法はページの末尾に記載)

最新のコミットがマージコミットであるか判定

# 最新のコミットと最新のマージコミットのハッシュの比較により判定
last_commit_hash = Action.sh("git log -1 --pretty=format:\"%H\"")
last_merge_commit_hash = Action.sh("git log -1 --merges --pretty=format:\"%H\"")

return false if last_commit_hash != last_merge_commit_hash

(Optional)予期せぬブランチからのマージでないかを判定

必須ではないが、予期せぬブランチからのマージでないかも判定したい場合は以下のコードも追加


# 所定のheadブランチ名(正規表現)
branch_regex = ... # "develop" や "release\/\\d+(\\.\\d+){2}" など

if branch_regex.nil? then
  return true
else
  # 最新のコミットメッセージ。マージコミットであるので以下のような形式(GitHubの場合)
  # "Merge pull request #{number} from {repository-name}/{branch-name}"
  last_commit_msg = Actions.last_git_commit_message()

  # 所定のheadブランチからのマージであるかを判定
  return /^Merge.*#{branch_regex}/ === last_commit_msg
end

コミットメッセージからheadブランチ名を判定する…とのざっくりしたやり方だが、さしあたり運用においては支障はないのでこのようにしている

リリース作業自動化における利用

自分のチームでは、以下のような設定でリリース作業を自動化している

  1. masterへのPush時にリリース用処理を行うように設定
  2. リリース用処理の一番最初に、所定のブランチからのマージコミットであるかを判定
    • 自分のチームではGitFlowを採用しているので、release/x.x.xまたはhotfix/x.x.x
  3. 2の判定で問題なければ実際のリリース作業を開始する

GitFlowがきちんと回せていればmasterブランチにPushされるのは所定のブランチからのマージのみになっているはずだが、
リリース作業が予期せぬ経路から実行されないよう安全のためこのようにしている

補足

headブランチの判定まで含めるとそれなりに長くなるので、以下のようなCustom actionを定義し、リリース作業用のlaneから呼び出すようにしている

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?