chore(deps): changesets ツールチェインを action v2 + CLI v3 へ移行する - #156
Conversation
dependabot の #148 (changesets/action v1.9.0 → v2.1.1) と #150 (@changesets/cli 2.31.1 → 3.0.0) は片方だけでは成立しない。action v2 は プロジェクトが CLI v3 であることを検証して落ち (v2 なら action v1 を使えと言う)、 CLI v3 だけ上げても action v1 は v2 系パッケージ前提のままになる。 さらに action v2 は入力名を全面改名し (version → version-script、 publish → publish-script、commit → commit-message、title → pr-title)、 GITHUB_TOKEN 環境変数のサポートを削除した (github-token 入力が唯一の経路)。 GitHub Actions は未知入力を警告のみで無視するので、SHA だけの bump は リリースを黙って無効化する。 - release.yml: pin を v2.1.1 の SHA にし、入力を v2 名へ移行して github-token を明示。commit-message / pr-title は v2 の既定値 ("Version Packages") ではなく Conventional Commits を保つため明示継続 - package.json: @changesets/cli を ^3.0.0、engines.node を >=22.11 (CLI v3 の engines は ^22.11 || ^24 || >=26) - .changeset/config.json: $schema を @changesets/config@4.0.0 へ pin した SHA が v2.1.1 タグの実体と一致することと、入力名がその SHA の action.yml と一致することは確認済み。 Assisted-by: Claude <noreply@anthropic.com>
ci.yml は release.yml を実行しないので、リリース経路だけが壊れる変更は CI が緑のまま通る。#136 で整理した「dependabot はマニフェストしか 書き換えず、手で追随すべき箇所は黙ってドリフトする」パターンなので、 既存の dependency-consistency ガードに 2 本足す。 - changesets/action の pin (# vX.Y.Z コメント) の major と @changesets/cli の major が対応表 (1↔2, 2↔3) どおりであること。 表に無い major が pin されたらテストを落とす - pin した major の入力名だけが使われていること (v1 名の残留と GITHUB_TOKEN env 依存を落とす) - .changeset/config.json の $schema の major が package-lock.json の 解決済み @changesets/config と一致すること。biome ガードが major.minor なのに対し major だけにしたのは、こちらが transitive で minor が npm install のたびに動きうるため (#145 の「無関係な PR が赤くなる」の回避) いずれも該当箇所を壊すと赤くなることを確認した (入力名を v1 に戻す / CLI を ^2 に戻す / $schema を 3.0.0 に戻す / pin のコメントを外す)。 ADR 0004 にも action と CLI の major を同時に動かす制約を追記。 Assisted-by: Claude <noreply@anthropic.com>
着手時のプランchangesets ツールチェインを v3 系(action v2 + CLI v3)へ移行するContextopen PR の棚卸しで、dependabot の 2 件が単独でマージすると必ずリリースが壊れる組み合わせだと分かった。 理由:
したがって 1 PR で action と CLI を同時に上げ、入力名を移行し、同じ罠を次から CI で落とす。 なお #146(version packages)は移行前に現行 v1 系ツールチェインでリリース済みなので、 変更点1.
|
マージ後の確認(action v2 の初回実行)main(22aeaf1)の
残るリスクは なお、この移行の直前に #146 を現行 v1 系ツールチェインでリリース済み(core 0.4.3 / astro 0.2.1 / cli 0.1.12 / theme-default 0.8.1 / theme-utils 0.5.1、タグ作成・npm 反映まで確認)。 🤖 Assisted by Claude Code |
目的
dependabot が出していた 2 件は片方だけマージするとリリースが壊れる組み合わせだったので、1 PR にまとめて移行する。
changesets/actionv1.9.0 → v2.1.1@changesets/cli2.31.1 → 3.0.0理由:
changesets/action@v1を使えと言って落ちる(action v2.0.0 / Validate that projects use Changesets CLI v3 and direct Changesets CLI v2 users tochangesets/action@v1changesets/action#699)。逆に CLI v3 だけ上げても action v1 は v2 系パッケージ前提。GITHUB_TOKENenv 廃止(Rename root action inputs and outputs changesets/action#681・#674)。version→version-script、publish→publish-script、commit→commit-message、title→pr-title。GitHub Actions は未知入力を警告のみで無視するので、SHA だけの bump はリリースを黙って無効化する。ci.ymlはrelease.ymlを実行しないため、chore(deps): bump changesets/action from 1.9.0 to 2.1.1 in the actions group across 1 directory #148 単独でもcheckは green。dependabot PR が構造的に落ちる 3 パターンの再発防止 #136 で整理した「dependabot はマニフェストしか書き換えず、手で追随すべき箇所は黙ってドリフトする」パターンそのもの。変更点
.github/workflows/release.yml: pin を v2.1.1 の SHA へ、入力を v2 名へ移行し、github-tokenを明示(v2 は env を見ない)。commit-message/pr-titleは v2 の既定値Version Packagesではなく Conventional Commits を保つため明示継続(squash merge のコミット要約になる)。npm 認証は従来どおり OIDC trusted publishing でトークンは持たない。package.json:@changesets/cliを^3.0.0、engines.nodeを>=22.11(CLI v3 の engines は^22.11 || ^24 || >=26)。.changeset/config.json:$schemaを@changesets/config@4.0.0へ(CLI v3 が引くのは config v4)。削除されたprettierは未使用、privatePackagesの既定変更で影響を受ける private パッケージ(site/)に changeset は無いので他の移行は不要。test/dependency-consistency.test.ts: 再発防止のガードを 2 本追加。# vX.Y.Zコメント)の major と@changesets/cliの major が対応表(1↔2, 2↔3)どおりであること。表に無い major が pin されたら落として手で判断させる。GITHUB_TOKEN:env 依存を落とす)。.changeset/config.jsonの$schemaの major がpackage-lock.jsonの解決済み@changesets/configと一致すること。major のみの比較にしたのは、こちらが transitive で minor がnpm installのたびに動きうるため(chore(deps): bump the minor-and-patch group across 1 directory with 2 updates #145 の「無関係な PR が赤くなる」の回避)。changeset は無し(
packages/*を触らないので公開物に変化なし)。確認方法
npm run build/npm test(36 files・367 tests green)/npm run typecheck(0 errors)^2に戻す・$schemaを3.0.0に戻す・pin のバージョンコメントを外す、の 4 ケースで期待どおり該当テストだけが落ちるnpx changeset status(@cosense-site-kit/core -> 0.4.4を提示)→npx changeset version(bump + CHANGELOG + changeset 消費)まで確認し、変更は戻した。依存パッケージまで連鎖しない挙動は v2 のときと同じ(cf. b80edbc)8488615a…が v2.1.1 タグの実体と一致することと、入力名がその SHA のaction.ymlと一致することを確認Release実行ログで action v2 が CLI v3 検証を通り、未知入力の警告が出ていないことを確認する(changeset ゼロなので publish モードで no-op が正しい)。壊れていてもrelease.ymlの 1 ステップの revert で v1 系に戻せる補足
npm run lintはこの worktree(.claude/worktrees/*配下)からは 0 files で落ちる。biome.jsonの!**/.claudeが biome へ渡す.(= 絶対パス)にマッチするためで、この PR とは無関係な既存の papercut(別途 Issue にする)。CI は.claudeを含まないパスで走るので影響なし。変更ファイルは明示パスで biome を通して green を確認済み。🤖 Assisted by Claude Code