Changesetsで頑張らないリリース(モノレポ対応)
バージョン管理、リリースの管理にChangesetsがいいらしいと聞いたけどなんか取っつきにくい感じだったので簡単に使う方法のメモ。
モノレポ対応しています。
このあたりでおすすめされている
以下の説明をこのまま使うための前提条件
- GitHub を使う
- npm にリリースする
- monorepo でも可
各説明に関連のドキュメントを貼っておくので違う場合はドキュメントを見て参考にしてください。
知っておくといいこと
Changesets は変更に対してフラグをつけてそのフラグをまとめてリリースしたり、チェンジログを作ったりします。
このフラグの概念がちょっと分かりにくいので頭の片隅においておいてください。
1. インストール
yarn add -D @changesets/cli
yarn changeset init
2. GitHub App をインストール
リンクから GitHub に追加してください。
この Bot は PR に以下のようなメッセージをつけて Changesets で変更がされているかされていないかを返信するので必要なリポジトリのみにすることをおすすめします。
Changesets 側の更新フラグが無いよっていう画像
2. GitHub Actions をセットアップ
こちらのWith Publishing
をコピーすれば問題ないです、自分の場合下の方の Slack 通知は消してます。
3. GitHub に npm の TOKEN を設定
npm の TOKEN を取得 (https://www.npmjs.com/settings/<name>/tokens
)
GitHub のリポジトリ設定から actions のところにNPM_TOKEN
という名前で TOKEN を設定します。
(設定: https://github.com/<org>/<repo>/settings/secrets/actions
)
4. (optional) チェンジログに GitHub の PR リンクやユーザー名を表示
追加でインストールしてから設定のchangelog
を書き換える。
yarn add -D @changesets/changelog-github
.changeset/config.json
{
"changelog": ["@changesets/changelog-github", { "repo": "<org>/<repo>" }]
}
実際に使う
ここまでで設定は終わりです。
実際のリリースの手順です。
-
- コードを書く
-
-
yarn changeset
を実行する
-
-
- monorepo なら更新してるものを選択
-
- semver の
major
,minor
,patch
を選択
- semver の
-
- コードと
.changeset/*
に生成されるマークダウンをまとめてコミット
- コードと
-
- PR をマージ。このとき Bot のメッセージで
🦋 Changeset detected
となってることを確認してください。
- PR をマージ。このとき Bot のメッセージで
-
- まだリリースはされていません、リリースするためにはリリース用の PR(Version Packages)をマージします。
これでリリースまで完成です、npm と GitHub の release に追加されているはずです。
他人のコードまたは先にコミットしてしまった場合
- まだ PR まではしてない場合
- そのまま
.changeset/*
にマークダウンを作成してコミットすればいいです。(自分の環境ならyarn changeset
でいい)
- そのまま
- PR までできている場合
- changeset-bot のメッセージの一番下にあるリンクから GitHub 上で作成できる。
- (
Click here if you're a maintainer who wants to add a changeset to this PR
)
最後に
semantic-release のモノレポ対応が悪くて探しているなかで turborepo がおすすめしていたので使ってみたら案外便利でした。
見やすいドキュメントが無いので手間取りましたが一度設定してしまえば楽に使えます。
(semantic-release みたいにコミットするだけじゃないのは手間だけど自由度は高い)
モノレポじゃなくても便利ですが、特にモノレポでいいリリースツール探してたら使ってみてください。
Discussion