gitlab_mr_release
git flowで開発してる時にマージ済のMergeRequestからいい感じにリリース用のMergeRequestを作るためのgemです
GitHubだと [git-pr-release](motemen/git-pr-release: Release pull request generator) があるのですが、GitLabだとそういうのがなかったので作りました
git-pr-release については下記を参照
使い方
設定ファイルを作る
まず gitlab_mr_release init
で設定ファイルを作成します
$ gitlab_mr_release init
create .env.gitlab
create gitlab_mr_release.md.erb
リリースMergeRequestを作成
gitlab_mr_release create
で --source
と --target
の間にあるアクセプトされたMergeRequestを元にリリース用のMergeRequestを作成します
$ gitlab_mr_release create --source=develop --target=master
設定ファイルについて
.env.gitlab
.env.gitlab
では下記のような設定が使えます
GITLAB_API_ENDPOINT=http://example.com/api/v3
GITLAB_API_PRIVATE_TOKEN=XXXXXXXXXXXXXXXXXXX
GITLAB_PROJECT_NAME=group/name
TEMPLATE_FILE=gitlab_mr_release.md.erb
DEFAULT_TITLE=Release <%= Time.now %> <%= source_branch %> -> <%= target_branch %>
DEFAULT_SOURCE_BRANCH=develop
DEFAULT_TARGET_BRANCH=master
DEFAULT_LABELS=release
この設定ファイルはカレントディレクトリ( .env.gitlab
)とhomeディレクトリ(~/.env.gitlab
)の2ヶ所から読みこむことができるので、GITLAB_API_PRIVATE_TOKEN
のようにリポジトリにコミットしたくないものは ~/.env.gitlab
に設定しておくとよいです
~/.bash_profile
あたりで
export GITLAB_API_PRIVATE_TOKEN=XXXXXXXXXXXXXXXXXXX
していてもたぶん大丈夫
gitlab_mr_release.md.erb
# MergeRequests
<% merge_requests.each do |mr| %>
* [ ] !<%= mr.iid %> <%= mr.title %> @<%= mr.author.username %>
<% end %>
MergeRequestを作成する時のdescriptionのテンプレートです。erbなので each
でループを回したりできます。
merge_requests
は gitlab_mr_release create
実行時の --source
と --target
の間にあるアクセプトされたMergeRequestの配列です。
mr
で参照できる要素は下記参照。 https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/merge_requests.md#get-single-mr
引数の説明
gitlab_mr_release create
に引数が渡されなかった場合、.env.gitlab
や ~/.env.gitlab
から読み込まれます。
優先順位は下記です。(上にあるほど優先度が高い)
-
gitlab_mr_release create
の引数 - カレントディレクトリの
.env.gitlab
~/.env.gitlab
-
--source
,DEFAULT_SOURCE_BRANCH
(どちらか片方必須)- リリースMRのマージ元branch (例.
develop
)
- リリースMRのマージ元branch (例.
-
--target
,DEFAULT_TARGET_BRANCH
(どちらか片方必須)- リリースMRのマージ先branch (例.
master
)
- リリースMRのマージ先branch (例.
-
--title
,DEFAULT_TITLE
- MergeRequestのタイトル
-
DEFAULT_TITLE
はerbで書けます。 - 両方ない場合のデフォルトは 「Release :timestamp :source -> :target」
-
--labels
,DEFAULT_LABELS
- リリースMRのラベル
- カンマ区切りで複数設定(例.
label1,label2
)
#Tips
設定の使い分けの指針
自分がメンテしてるアプリだと GITLAB_API_PRIVATE_TOKEN
だけ ~/.gitlab.env
に置き、それ以外は .env.gitlab
に置いてリポジトリにコミットしています。
設定ファイルをなるべくリポジトリにコミットしておくことで、gitlab_mr_release create
を叩くことで誰が実行しても同じリリースMRが作られるようにしています。
gitlab_mr_releaseを導入したメリット
普段の開発でもMRのタイトルを分かりやすくするという動きができました。
普通にPRやMRを作るとデフォルトのタイトルがブランチ名から補完されますが、これだと後から見た時に分かりづらいです。
gitlab_mr_release
を導入することで「MRのタイトルは後からリリースMR作った時のリリースノートになるので後から読んだ時に分かりやすいタイトルにして!」と言う理由もできました