From 6cd77f7530550b022cb9f75212de465c0283ab91 Mon Sep 17 00:00:00 2001 From: touyou <465697+touyou@users.noreply.github.com> Date: Wed, 20 May 2026 10:51:08 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20chore:=20release=20skill=20?= =?UTF-8?q?=E3=81=A8=E3=83=AA=E3=83=AA=E3=83=BC=E3=82=B9=E8=A8=98=E9=8C=B2?= =?UTF-8?q?=E3=81=AE=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E6=8C=87=E6=91=98?= =?UTF-8?q?=E3=82=92=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## SKILL.md - **タグ作成手順を SHA 明示型に修正** (Codex P1) - 旧: `git tag vX.Y.Z`(HEAD に打つ。main が進むと誤タグ) - 新: `git log --oneline | grep release` でリリースコミット SHA を特定し `git tag vX.Y.Z $RELEASE_SHA` で明示。tag ref で publish workflow を回す - **npm publish のトラブルシューティングを実体験で拡充** - `npm error code E404` は認証失敗を 404 で隠す npm 仕様(NPM_TOKEN 期限切れ等) - `npm error code EOTP` はトークン種別が 2FA バイパス非対応 - Classic → Automation 型 or Granular → 「Bypass 2FA when publishing」 - **pnpm.overrides の記述を本リポジトリの実態に合わせる** (Copilot) - 旧: pnpm 10+ では pnpm-workspace.yaml に書く必要があると断定 - 新: 本リポジトリは package.json の pnpm.overrides 運用。ローカル/CI の pnpm バージョン差で lockfile が書き換わる場合があると注意喚起 - **worktree 規約を緩和** (CodeRabbit) - `.claude/worktrees/` は CLAUDE.md に記載されない既存運用の慣例。 skill 側で「worktree なしでも可」と明示 ## CHANGELOG.md - v1.0.3 の参照を `(#263)` `(#268)` → `(#272, closes #263, #268)` に修正 (Copilot) - #263 / #268 は issue 番号、実 PR は #272 だった Co-Authored-By: Claude Opus 4.7 (1M context) --- .../skills/release-sparkle-design/SKILL.md | 24 ++++++++++++------- CHANGELOG.md | 4 ++-- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/.claude/skills/release-sparkle-design/SKILL.md b/.claude/skills/release-sparkle-design/SKILL.md index 184a454..93d4fac 100644 --- a/.claude/skills/release-sparkle-design/SKILL.md +++ b/.claude/skills/release-sparkle-design/SKILL.md @@ -39,7 +39,7 @@ user-invocable: true 2. **`sparkle-design` リポジトリのルートで作業する** - 編集・テスト・git 操作はすべて `sparkle-design` のチェックアウトディレクトリで実行 - - worktree を使う場合は `.claude/worktrees/` 配下で作業 + - 並列作業を分離したい場合は git worktree を使ってもよい(既存運用では `.claude/worktrees/` 配下に置く慣例)。worktree を使わずに `chore/release-X.Y.Z` ブランチを直接切る運用でも可 3. **以下のチェックリストを順に実行する** @@ -96,22 +96,27 @@ user-invocable: true ### マージ後: タグ・Release・publish - [ ] `git fetch origin main && git checkout main && git pull` で最新化 -- [ ] リリースコミットの SHA を確認: `git log --oneline -3` -- [ ] **タグ作成 + push**: +- [ ] **リリースコミットの SHA を `git log --oneline | grep release | head -1` で必ず特定** +- [ ] **タグはリリースコミットの SHA を明示して打つ**(HEAD に打つと main が進んだ場合に誤タグ → publish 漏れ・誤 publish の温床): ```bash - git tag vX.Y.Z + RELEASE_SHA=$(git log --oneline | grep "release vX.Y.Z" | head -1 | awk '{print $1}') + git tag vX.Y.Z "$RELEASE_SHA" git push origin vX.Y.Z ``` - [ ] **GitHub Release 作成**: CHANGELOG.md のセクションを `--notes` で直接渡すのが確実: ```bash - gh release create vX.Y.Z --title "vX.Y.Z" --notes "$(awk '/^## \[X\.Y\.Z\]/,/^## \[/' CHANGELOG.md | sed '$d')" + awk '/^## \[X\.Y\.Z\]/{flag=1;next} /^## \[/{flag=0} flag' CHANGELOG.md > /tmp/notes.md + gh release create vX.Y.Z --title "vX.Y.Z" --notes-file /tmp/notes.md ``` - もしくは手動で `gh release create vX.Y.Z` を実行し、ブラウザで notes を貼る。 -- [ ] **npm publish** — GitHub Actions ワークフローを実行: +- [ ] **npm publish** — GitHub Actions ワークフローを実行。**tag ref で実行する**ことで、main が進んでも正しいリリースコミットの内容が publish される: ```bash gh workflow run "Publish to npm" --ref vX.Y.Z ``` + - workflow が `npm error code E404 'pkg@X.Y.Z' is not in this registry` で失敗する場合は **NPM_TOKEN の期限切れ**(auth 失敗が 404 として返る npm registry 仕様) + - workflow が `npm error code EOTP` で失敗する場合は、**トークン種別が 2FA バイパス対応していない**。次のいずれかで作り直し: + - Classic Token: タイプを **Automation** で発行 + - Granular Access Token: 作成時に **「Bypass 2FA when publishing」を有効** にする - [ ] 公開確認: - の versions に X.Y.Z が出ているか - `npm view sparkle-design version` で確認 @@ -148,8 +153,9 @@ GitHub Release の本文がある場合はそれを CHANGELOG にコピーすれ ### npm publish ワークフローが失敗する場合 - `pnpm-lock.yaml` の整合性が崩れていないか確認(`pnpm install --frozen-lockfile` を試す) -- `pnpm.overrides` を package.json に書いていると pnpm 10+ では読まれない場合がある。`pnpm-workspace.yaml` 側の `overrides:` フィールドへの移行を検討 -- `NPM_TOKEN` の有効期限切れも疑う(リポジトリ Secrets を確認) +- `pnpm.overrides` は本リポジトリでは `package.json` の `pnpm.overrides` に置く運用(CI が使う pnpm のバージョンで読まれることを確認済み)。ローカルの pnpm バージョンが大幅に違うと挙動差で lockfile が書き換わることがあるので、ローカルで pnpm install するときは lockfile の差分(特に `overrides:` セクション)を確認すること +- 認証エラーは npm 仕様で 404 として返ることが多い。`NPM_TOKEN` の有効期限切れや権限不足を最初に疑う +- 2FA OTP を要求された場合(`npm error code EOTP`)はトークン種別が automation 対応していない。Classic Token なら Automation 型、Granular Access Token なら「Bypass 2FA when publishing」を有効にしたものを発行 ### マージ後のローカル checkout が worktree と衝突する diff --git a/CHANGELOG.md b/CHANGELOG.md index bce475f..540fb4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,9 +29,9 @@ ### Added -- **Input まわりの再利用フックを named export** (#263) +- **Input まわりの再利用フックを named export** (#272, closes #263) - `useInputContainerFocus` / `useMergeRefs` を public API として公開 -- **`Input.triggerProps` による ARIA / HTML 属性フォワード** (#268) +- **`Input.triggerProps` による ARIA / HTML 属性フォワード** (#272, closes #268) - 内部のトリガーボタンに ARIA / HTML 属性を渡せるように ### Notes