セマンティックリリースによるディストリビューションチャンネルを利用した公開 について動作確認してみました。元ネタはUsing distribution channelsです。

次にリリースする予定の機能を先行公開し、フィードバックを収集し、最終的に最新バージョンに取り込み、正式にリリースします。

前提/制約条件

  • 最新バージョンのチャンネルは@latest(branch: main or master)、先行公開チャンネルは@next(branch: next)とします
  • 次の環境で動作確認します
    • GitHub Repository(ソースコードのリポジトリ)
    • GitHub Actions(CI環境、この環境でsemantic-releaseを実行する)
    • GitHub Releases(変更履歴)
    • GitHub Packages(NPMレジストリ)

動作確認手順

元ネタの使用例の手順にそって動作確認します。

  1. 初回リリース
    feat: initial commit => v1.0.0 on @latest
    プロジェクトの初回コミットを行うところから始めます。
  2. バグ修正のリリース
    fix: a fix => v1.0.1 on @latest
    バグ修正し、ユーザーにリリースします。
  3. @nextに次の機能のリリース
    feat: a big feature \n\n BREAKING CHANGE: it breaks somthing => v2.0.0[pre-release] on @next
    破壊的な変更が伴う重要な機能を開発したいと考えます。この機能は、最初はよく利用してくれる一部のユーザーのみに公開させたいと考えます。そして、この機能のフィードバックを受け取ったら、改善し、最終的にすべてのユーザーがこの機能を利用できるようにします。
  4. @nextのバグ修正のリリース
    fix: fix something on a big feature => v2.0.1[pre-release] on @next
    一部ユーザーに公開した機能に対して、バグ報告を受け、修正をリリースします。
  5. @latestで小さい機能のリリース
    feat: a small feature => v1.1.0 on @latest
    @latestに下位互換のある機能の追加を行い、リリースします。
  6. @latestで追加した小さい機能を@nextにマージし、リリース
    Merge branch master to next => v2.1.0[pre-release] on @next
    @latestに追加した機能を@nextにマージし、一部ユーザーにも利用できるようにリリースします。
  7. @latestへ追加する
    Merge branch next to master => v2.1.0 on @latest
    @nextでリリースした機能は、一部ユーザーから一定期間フィードバックを受け、すべてのユーザーに対してリリースしても問題ないとレベルに到達したと確信しました。そのために、@nextの変更内容を@latestにマージして、リリースします。

動作確認結果

手順@latest@next
(1)v1.0.0
TAG: 作成
RELEASES: 作成
PACKAGES: 作成
通知: メール
(2)v1.0.1
TAG: 作成
RELEASES: 作成
PACKAGES: 作成
通知: メール
(3)v2.0.0[pre-release]
TAG: 作成
RELEASES: 作成
PACKAGES: 作成
通知: メール
(4)v2.0.1[pre-release]
TAG: 作成
RELEASES: 作成
PACKAGES: 作成
通知: メール
(5)v1.1.0
TAG: 作成
RELEASES: 作成
PACKAGES: 作成
通知: メール
(6)v2.1.0[pre-release]
TAG: 作成
RELEASES: 作成
PACKAGES: 作成
通知: メール
(7)v2.1.0
TAG: 未作成
RELEASES: 更新
PACKAGES: 更新
通知: メール

まとめ

@nextの最終バージョンが正式リリース後のバージョンになるのが特徴です。

  • @nextは、@letestと同様にConventional-Commitsによるバージョンの決定になるが、GitHub上はプレリリース扱いになる
  • 最終的に@nextを@masterにマージすると、@nextのバージョンが最新のリリースバージョンとなる(コミットハッシュが @next = @latestになることが条件になると思われる)

次の記事も合わせご覧ください。

CAPTCHA