Releases: masasuzu/clrnd
Releases · masasuzu/clrnd
Release list
v0.5.0
Changelog
- fbacba8: CI に依存・workflow・E2E スクリプトの静的検査と実行制御を足す (#89) (#92) (@masasuzu)
- 1c68025: E2E に traffic / --no-traffic / --prune / --image / json_escape を足す (#105) (@masasuzu)
- 4ae03d5: init の復元テストが復元処理を通るようにする (#86) (#90) (@masasuzu)
- dc776be: verify に VPC コネクタ・Cloud SQL・シークレットのバージョンの確認を足す (#95) (#101) (@masasuzu)
- 9244290: コマンド間のフラグの非対称を埋め、イメージ上書きを足す (#99) (#102) (@masasuzu)
- 91ab312: テンプレート関数 json_escape を足す (#98) (#104) (@masasuzu)
- 250c9d1: トラフィックを段階的に移す手段を足す (#94) (#100) (@masasuzu)
- 5e00a44: リリースを直列化し、タグが main 上にあることを検査する (#88) (#93) (@masasuzu)
- 88eb9fb: リリース対象のクロスビルドを PR の CI で検証する (#87) (#91) (@masasuzu)
- 0d9283c: 古いリビジョンを掃除する手段を足す (#97) (#103) (@masasuzu)
v0.4.0
Changelog
- 45f33b0: Bump github.com/spf13/pflag in the go-dependencies group (#72) (@dependabot[bot])
- 8153467: CI が実行する golangci-lint のバージョンを固定する (#73) (#81) (@masasuzu)
- 6e0f10d: revisions が全コンテナのイメージを出す (#74) (#83) (@masasuzu)
- 9c100c8: 実装と食い違っていたドキュメントを直す (#75, #76, #77, #78, #80) (#84) (@masasuzu)
- 93e9b73: 未作成サービスへの diff が要求する権限を正しく案内する (#79) (#82) (@masasuzu)
v0.3.1
Changelog
- 5d3b30f: CI の checkout に認証情報を残さない (#65) (#71) (@masasuzu)
- e9bba90: CLAUDE.md を Codex と共用する (#61) (@masasuzu)
- 6b56d35: ページング異常時に不完全なリビジョン一覧を返さない (#66) (#67) (@masasuzu)
- c79fc5c: リリースを CI と同じ検査に通してから公開する (#64) (#70) (@masasuzu)
- 1965c3a: 出力ファイルを一時ファイル経由で 0600 に置き換える (#62) (#68) (@masasuzu)
- 23c0156: 待っても回復しないエラーで待機を打ち切る (#63) (#69) (@masasuzu)
v0.3.0
v0.2.0 では 5 コマンドだった clrnd が、ecspresso 互換の 11 コマンドで一通り揃いました。
デプロイの安全性まわりに挙動の変更がいくつかあります。CI で使っている場合は先に目を通してください。
挙動の変更
deployはロールアウトの完了を待ち、失敗すれば非ゼロで終わります。 Cloud Run は
リビジョンが起動する前にリクエストを受理するため、これまでは壊れたリビジョンでも exit 0 で、
CI が成功として扱っていました。差分がゼロのときも「今それが健全か」は確認するので、
失敗したデプロイの後に同じマニフェストで再実行しても成功にはなりません。--no-waitで従来の挙動。diffは既定で Cloud Run に既定値を解決させます。 これにより手書きの最小マニフェストでも
差分が収束します。dry-run の書き込みを伴うのでrun.services.updateが要ります。
読み取り専用の権限で回している場合は--no-server-defaultsを付けてください。- すべての書き込みが compare-and-swap になりました。 差分を計算した時点の
metadata.resourceVersionを送るので、その後に他の変更が入っていれば上書きせずに失敗します。
これまでは並走したdeployが互いの変更を黙って消していました。 - 実行時エラーで usage 全文が出なくなりました。 エラー本文が読めるようになります。
initは--configで指定した場所に書きます。 これまでは常に./clrnd.ymlでした。
initとrender -oの生成物は0600になります。- ソースからビルドする場合の必要バージョンが Go 1.26.7 以上になりました。
新しいコマンド
| コマンド | 説明 |
|---|---|
status |
サービスの現在の状態(Ready 条件、トラフィック配分、URL、全条件)。--format json あり |
wait |
Ready になるまで待つ。Ready=False になった時点で待たずに失敗する |
revisions |
リビジョン一覧を新しい順に、トラフィック配分・タグ付きで。--format json あり |
rollback |
1 つ前のリビジョンへトラフィックを戻す。新しいリビジョンは作らず、タグは 0% で残す |
delete |
サービスを削除する。何を消すかをプロジェクト・リージョン込みで確認し、消えるまで待つ |
refresh |
定義を変えずに新しいリビジョンを作る(再起動、イメージタグの追従) |
そのほかの追加
diff --exit-code— 差分があれば 2 で終わる(terraform plan -detailed-exitcodeと同じ形)。
ドリフト検知に使えますverifyがリモートの実在チェックをするようになりました。実行サービスアカウント、
Secret Manager のシークレット、Artifact Registry のコンテナイメージ。
確認できないものは警告止まりで、verifyを失敗させません- clrnd はリビジョン名を管理しなくなりました。
initはspec.template.metadata.nameを
書かず、diff/deployは live 側の名前を無視します。自分で固定した場合は警告が出ます - リリース成果物に cosign の keyless 署名(
checksums.txt)、SBOM、ビルド provenance が付きました。
-trimpathとコミット時刻の埋め込みで再現性も上げています - README に「信用境界」と「clrnd が管理しないもの」の節を追加。コマンド別の必要 IAM 権限も表にしました
修正
rollbackがカナリア中に安定版を飛び越していた(10%/90% のとき 90% 側を現行と誤認)--no-server-defaultsで消えない差分(cloud.googleapis.com/locationラベルなど)diffが未存在のサービスで失敗していた(README の推奨手順の初回で落ちる)verifyが別プロジェクトのサービスアカウントを「存在しない」と誤判定していたrefreshが何も再起動しない状況(トラフィック固定時、同名リビジョン)を断るようになったinit --forceで config の書き込みに失敗すると、上書きしたマニフェストが失われていたrender -oにレンダリング元と同じファイルを渡すと、テンプレートが結果で潰れていた- Ctrl-C が確認プロンプトで効かなかった
導入
# 例: macOS arm64
tar xzf clrnd_0.3.0_darwin_arm64.tar.gz
install clrnd /usr/local/bin/成果物は checksums.txt と、それに対する cosign の keyless 署名 (checksums.txt.bundle)、
アーカイブごとの SBOM、ビルド provenance が付いています。
cosign verify-blob checksums.txt \
--bundle checksums.txt.bundle \
--certificate-identity-regexp '^https://github.com/masasuzu/clrnd/\.github/workflows/release\.yml@refs/tags/' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
shasum -a 256 -c checksums.txt --ignore-missingFull Changelog: v0.2.0...v0.3.0
コミット一覧
- 3b76416: --exit-code を diff のフラグ表へ移す (#57) (@masasuzu)
- 941159b: API クライアントを Client 型へ集約しテスト基盤を整える (#9) (@masasuzu)
- c02b295: Bump actions/checkout from 4.3.1 to 7.0.1 (#47) (@dependabot[bot])
- 449a809: Bump actions/setup-go from 5.6.0 to 7.0.0 (#45) (@dependabot[bot])
- 83ddf29: Bump goreleaser/goreleaser-action from 6.4.0 to 7.2.3 (#46) (@dependabot[bot])
- 8f57058: Bump the go-dependencies group with 3 updates (#48) (@dependabot[bot])
- de86652: E2E に #20 / #22 の経路を追加する (#40) (@masasuzu)
- 8bea946: Go ツールチェーンを 1.26.7 に上げ、CI が実際のビルド用ツールチェーンを検査するようにする (#59) (@masasuzu)
- 7c2df16: cosign の bundle 形式に合わせ、cosign 自体のバージョンも固定する (#60) (@masasuzu)
- 1a5496d: delete サブコマンドを追加する (#17) (@masasuzu)
- 7496d44: diff が未存在のサービスで失敗しないようにし、検証を deploy とそろえる (#24) (#50) (@masasuzu)
- 3b5ab51: diff/deploy に --server-defaults を追加する (#19) (@masasuzu)
- ac375b6: init が生成するファイルを .gitignore に加える (#30) (#41) (@masasuzu)
- a8dc153: init/render の書き込みまわりを直す (#27, #28) (#51) (@masasuzu)
- 1585d08: refresh が目的を果たせない 2 つの状況を断るようにする (#22) (#39) (@masasuzu)
- c92679b: refresh サブコマンドを追加する (#7) (#18) (@masasuzu)
- 4c50c4d: revisions サブコマンドを追加する (#4) (#15) (@masasuzu)
- 8ffa891: rollback の戻し先を「最も新しい配信版の 1 つ前」にする (#21) (#38) (@masasuzu)
- a13139a: rollback サブコマンドを追加する (#5) (#16) (@masasuzu)
- b488b2f: sanitizeMap のサーバ管理フィールドの取りこぼしを埋める (#25) (#52) (@masasuzu)
- 96b69cb: status サブコマンドを追加する (#13) (@masasuzu)
- e297282: verify に Artifact Registry のイメージ実在チェックを足す (#54) (#58) (@masasuzu)
- 3a38a28: verify のサービスアカウント照会をプロジェクト非依存にする (#23, #35) (#44) (@masasuzu)
- 095adc4: wait サブコマンドを追加し、deploy がロールアウトを待つようにする (#14) (@masasuzu)
- 2749ee9: リビジョン名を clrnd の管理対象から外す (#10) (@masasuzu)
- d3be975: リリースの再現性と来歴を強化する (#33) (#43) (@masasuzu)
- 88c4859: 依存の更新機構と CI の検査を入れる (#42) (@masasuzu)
- 8015fbd: 実 Cloud Run に対する E2E テストを test/e2e に追加する (#12) (@masasuzu)
- 8291210: 実行時エラーで usage を出さないようにし、diff に --exit-code を足す (#29) (#49) (@masasuzu)
- 0b0f0f5: 差分がゼロでもロールアウトの健全性を確認する (#20) (#37) (@masasuzu)
v0.2.0
v0.1.1
v0.1.0
Full Changelog: https://github.com/masasuzu/clrnd/commits/v0.1.0