Core Kit リリース準備
bottlerocket-core-kit リポジトリの新しいリリースの準備として、Twoliter.toml のバージョン更新と CHANGELOG.md の更新を行います。
目的
bottlerocket-core-kit のリリース準備ワークフローを自動化します:
- Twoliter.toml のリリースバージョンを更新
- Git 履歴から CHANGELOG エントリを生成
- リリース用に適切にフォーマットされたコミットを作成
使用すべきケース
- bottlerocket-core-kit の新しいリリースを準備する場合
- 最近の変更で CHANGELOG を更新する必要がある場合
- 適切なフォーマットでリリースコミットを作成する場合
前提条件
- bottlerocket-core-kit がチェックアウトされた grove で作業していること
- マージコミットと PR 参照を含む Git 履歴が利用可能であること
- ターゲットリリースバージョンがわかっていること
手順
リリースワークフロー
重要: リリースプロセスでは、厳密な順序で2つのコミットが必要です:
コミット 1: バージョン更新 (必ず最初)
Twoliter.toml を更新して新しいリリースバージョンを設定します:
# Twoliter.toml 内で以下を更新:
release-version = "X.Y.Z"
コミットコマンド:
git add Twoliter.toml && git commit -s -S -m "twoliter: bump kit version to vX.Y.Z"
コミット 2: CHANGELOG 更新 (必ず2番目)
新しいバージョンの変更を反映して CHANGELOG.md を更新します。
コミットコマンド:
git add CHANGELOG.md && git commit -s -S -m "changelog: update for vX.Y.Z"
1. 新しいコミットを特定する
- 最後の CHANGELOG エントリ以降のコミットを検索:
git log --oneline <last_version_tag>..HEAD - タグが存在しない場合は以下を使用:
git log --oneline --since="<last_release_date>"
2. PR 参照を見つける
- マージコミットを解析して PR 番号を検出:
git log --merges --oneline <last_version_tag>..HEAD - コミットメッセージ内の "Merge pull request #XXX" パターンを探す
- コミットハッシュを PR マージコミットと相互参照する
3. 重要: PR の内容を確認する
各 PR に含まれるパッケージ/変更を確認するために、実際に変更されたファイルを常にチェックしてください:
git show <merge_commit_hash> --stat
以下に依存しないでください:
- コミットメッセージの要約のみ
- PR ブランチ名
- PR の内容に関する仮定
混合 PR に注意: 単一の PR にファーストパーティの変更とサードパーティのパッケージ更新の両方が含まれる場合があります。同じ PR からの変更タイプごとに個別の CHANGELOG エントリを作成する必要があります。
混合 PR の例 (PR #760):
git show 70609d6a --stat
# 以下の変更が表示されます:
# sources/host-ctr/... <- ファーストパーティの変更 (host-ctr リゾルバ)
# packages/amazon-vpc-cni-plugins/... <- サードパーティの更新
# packages/ecs-agent/... <- サードパーティの更新
この PR には2つの CHANGELOG エントリが必要です:
- OS 変更: "Replace
amazon-ecr-containerd-resolverwith Docker resolver inhost-ctr([#760])" - サードパーティパッケージ更新: "Update
amazon-vpc-cni-plugins,ecs-agent([#760])"
正しい確認の例:
# マージコミット 9656d841 (PR #795) の場合:
git show 9656d841 --stat
# 以下の変更が表示されます: libcap, liburcu, libxcrypt, readline の変更
# ブランチ名や要約が示唆する内容ではありません
4. CHANGELOG スタイルガイドライン
バージョンヘッダ形式
# v<バージョン> (<YYYY-MM-DD>)
セクション階層
- OS 変更 - コアシステムとファーストパーティパッケージの更新
- ファーストパーティパッケージの更新 (必要に応じて詳細なサブ箇条書き)
- サードパーティパッケージ更新 サブセクション (外部パッケージ用)
- ビルド変更 - ビルドシステム、ツール、インフラストラクチャの変更
- オーケストレーター変更 - コンテナオーケストレーション固有の変更
- 該当する場合は Kubernetes サブセクション
エントリ形式
- PR 参照付きの箇条書きを使用:
- 説明 ([#XXX]) - ファーストパーティパッケージの場合は、適宜詳細なサブ箇条書きを含める
- サードパーティパッケージ更新の場合: バージョン番号を含めない
- 正しい:
- Update \docker-cli-29`, `docker-engine-29` ([#785])` - 間違い:
- Update \docker-cli-29` to v29.0.4, `docker-engine-29` to v29.0.4 ([#785])`
- 正しい:
- パッチ/修正の場合は、"Update" ではなく "Patch" を使用:
- 正しい:
- Patch \containerd-2.1` to update GRPC ([#801])`
- 正しい:
分類ルール
- ファーストパーティパッケージ: Bottlerocket 固有のコードおよび内部依存関係
- サードパーティパッケージ: 外部ライブラリおよびツール (glibc, docker-engine など)
- ビルド変更: ビルドシステム、CI/CD、開発ツールに影響を与えるものすべて
- オーケストレーター変更: Kubernetes、ECS、その他のコンテナオーケストレーション機能
5. 品質チェック
- すべてのエントリに
([#XXX])形式の PR 参照があることを確認 - 一貫したフォーマットとインデントを確認
- 関連する変更をグループ化してエントリの重複を避ける
- セクション内で時系列順を維持
- サブセクションヘッダーが既存のパターンと一致することを確認
- エントリを作成する前に、各 PR の実際の内容を確認すること
検証
検証コマンド
- Git ログ範囲の確認:
git log --oneline <range> - マージコミットの確認:
git log --merges --grep="pull request" <range> - PR 内容の確認:
git show <merge_hash> --stat - PR 番号がリポジトリに存在することを確認
リリース準備の成功条件:
- 正しい順序の2つのコミット (最初にバージョン更新、次に CHANGELOG 更新)
- Twoliter.toml に更新された release-version が設定されている
- CHANGELOG.md に正しい日付の新しいバージョンセクションがある
- すべてのエントリに
([#XXX])形式の PR 参照がある - サードパーティパッケージの更新にはバージョン番号が含まれていない
- コミットが署名されている (
-s -Sフラグ)
よくある問題
PR 参照の欠落
マージコミットに PR 番号が表示されない場合、以下を確認:
git log --merges --oneline | head -20
"Merge pull request #XXX" パターンを探します。
誤ったパッケージ分類
ファーストパーティかサードパーティかを分類する前に、必ず git show <hash> --stat で実際に変更されたファイルを確認してください。
サードパーティ更新でのバージョン番号
注意: サードパーティのパッケージ更新エントリには、バージョン番号ではなくパッケージ名のみを含めてください。
出力構造の例
# v12.3.0 (2026-01-20)
## OS Changes
- Replace `amazon-ecr-containerd-resolver` with Docker resolver in `host-ctr` ([#760])
- Add MPS control daemon support to `nvidia-k8s-device-plugin` ([#789])
### Third Party Package Updates
- Update `docker-cli-29`, `docker-engine-29` ([#785])
- Patch `containerd-2.1` to update GRPC ([#801])
- Update `libnvme`, `xfsprogs`, `nvme-cli`, `makedumpfile`, `keyutils`, `e2fsprogs` ([#794])
- Update `readline`, `libxcrypt`, `liburcu`, `libcap` ([#795])
[#760]: https://github.com/bottlerocket-os/bottlerocket-core-kit/pull/760
[#785]: https://github.com/bottlerocket-os/bottlerocket-core-kit/pull/785
[#789]: https://github.com/bottlerocket-os/bottlerocket-core-kit/pull/789
[#794]: https://github.com/bottlerocket-os/bottlerocket-core-kit/pull/794
[#795]: https://github.com/bottlerocket-os/bottlerocket-core-kit/pull/795
[#801]: https://github.com/bottlerocket-os/bottlerocket-core-kit/pull/801