Open9
リリースフローを考える
やりたいこと
- master (main) ブランチへのPRで開発する
- モノレポ環境で、それぞれにリリースが分割できる
- リリース前にステージング環境でチェック作業をする
- リリースごとの差分 (変更履歴) がわかる
release-drafter
通常リリース
- 参考にした記事と同様に、include-pathsとtag-prefixで対応できる。
- prerelease扱いにしてステージング向けとするのがよさそう。
- 本番へのリリースは「prereleaseを外す」の更新
- ちゃんとやるならprereleaseと本リリースをわけてタグを打つ。(vX.Y-rc)
- auto labelerとの連動は現状不要。categoriesによるリリースノートグルーピングはあってもよい。
デプロイ
- 本番:releaseのreleasedイベントを使ったGitHub workflowでデプロイ
- ステージング:releaseのprereleasedイベントを使ったGitHub workflowでデプロイ
- どちらも releaseオブジェクト のprereleaseをみるのが安全。
バージョン指定はversion-templateを使う。
version-template: '$MAJOR.$MINOR'
タグとリリースタイトルはあわせておくほうがよさそう
name-template: package-a-v$RESOLVED_VERSION
tag-template: package-a-v$RESOLVED_VERSION
ステージングでのcherry-pick
- チェック中に見つかった問題への対応
手順
- master向けに修正PRをマージ ---- ①
- prereleaseタグに対してcherry-pick
- タグを新規に追加(${tagName}-2とか)
- prereleaseに指定されているタグを↑に置き換え
- このときrelease-drafterを挟めない(pushがない)ので、手動で①をリリースノートに入れる
hotfixリリース
- 本番で見つかった緊急不具合への対応
手順
- master向けに修正PRをマージ ---- ①
- 最新のリリースタグに対してcherry-pick
- タグを新規に追加(${tagName}-hotfixとか)
- ↑のタグを使ってドラフトリリースを作成
- このときrelease-drafterを挟めない(pushがない)ので、手動で①をリリースノートに入れる
- あとは通常リリースフロー
gh release create --prerelease --notes-from-tag -t package-a-v2.104-hotfix-1 package-a-v2.104-hotfix-1
最後のリリースからの作成PRをみてるのでPR一覧がおかしくなる。
tag-prefix外にしてみるとか。
gh release create --prerelease --notes-from-tag -t hotfix-package-a-v2.104.1 hotfix-package-a-v2.104.1
手順まとめ
- masterマージ後
git checkout ${tag}
git cherry-pick ...
git tag hotfix-${tag}-1
git push origin hotfix-${tag}.1
gh release create --prerelease --notes-from-tag -t hotfix-${tag}.1 hotfix-${tag}.1
リリース(prereleasからreleaseに変更)時にDraftが更新されないので、releaseイベントでもrelease-drafterを動かしたほうがよさそう。