AgentSkillsCN

release-procedure

当用户提到“release”、“リリース”、“deploy”、“publish”、“vtag”、“version up”、“バージョンアップ”,或讨论合并至 main/develop 时使用此技能。它将为您清晰指引版本号升级与发布流程。

SKILL.md
--- frontmatter
name: release-procedure
description: Use when user says 'release', 'リリース', 'deploy', 'publish', 'vtag', 'version up', 'バージョンアップ', or discusses merging to main/develop. Guides through version bump and release flow.
allowed-tools: [Bash, Read, Edit, Grep, Glob]

リリース手順ガイド

version bump → CI → PR → merge → vtag の一連のリリースフローを管理する。ブランチ戦略は /branch-management、CI詳細は /local-ci を参照。

連続マージ禁止

誤マージ防止のため、各PR作成後にユーザーの明示的指示を待ってから次のマージに進む。

  • 禁止: 指示なし連続マージ、曖昧な指示での main 直行、独自判断の develop→main マージ
  • 正: 各PR後に報告→「develop まで」「main まで」等の明示指示を確認→vtag も指示待ち

バージョン管理

CIで一致を自動チェックするため、deno.json(JSRバージョン)と src/version.ts(定数)の2ファイルを deno task bump-version で同時更新する。

bash
deno task bump-version          # release/* ブランチ名から自動検出
deno task bump-version 1.2.3    # 明示指定も可

バージョン番号: パッチ(x.y.Z)=バグ修正、マイナー(x.Y.0)=後方互換の新機能、メジャー(X.0.0)=破壊的変更。

リリースフロー

mermaid
sequenceDiagram
    participant R as release/x.y.z
    participant D as develop
    participant M as main
    participant T as vtag
    R->>R: 1. bump-version → 2. ci → 3. commit & push
    R->>D: 4. PR(release→develop) → 5. CI pass → merge
    D->>M: 6. PR(develop→main) → 7. CI pass → merge (JSR auto-publish)
    M->>T: 8. git tag vx.y.z origin/main
    R->>R: 9. branch delete (local + remote)

ステップ 1: バージョンアップ

bash
# 新規作成: git checkout develop && git checkout -b release/x.y.z
# 既存: git checkout release/x.y.z
deno task bump-version
grep '"version"' deno.json
grep 'export const BREAKDOWN_LOGGER_VERSION' src/version.ts

ステップ 2: ローカルCI + GitHub CI 事前再現

deno task ci に加え、GitHub CI固有の差分を事前に潰す。詳細は /local-ci 参照。

bash
deno task ci                                       # 基本CI
deno fmt --check                                   # md含む全ファイルfmt
deno test --allow-env --allow-read --allow-write   # CI同等の権限フラグ
# version-check: deno.json >= 最新タグ
git fetch --tags
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
CURRENT="v$(grep '"version"' deno.json | head -1 | sed 's/.*"\([0-9.]*\)".*/\1/')"
echo "deno.json=$CURRENT, latest_tag=$LATEST_TAG"

v1.1.0での教訓:

見落とし事前チェック
md の fmt 差分deno fmt --check
テスト権限不足(CI は制限付き)CI と同じフラグでテスト
version-check fail(deno.json < 最新タグ)タグと deno.json の比較
publish.yml と test.yml のフラグ乖離両 yml の test フラグを目視

ステップ 3: コミット & プッシュ

bash
git add deno.json src/version.ts
git commit -m "chore: bump version to x.y.z"
git push -u origin release/x.y.z

ステップ 4-5: release/* → develop

bash
gh pr create --base develop --head release/x.y.z \
  --title "Release x.y.z: <変更概要>" \
  --body "## Summary\n- <変更点>\n\n## Version\n- x.y.z"
gh pr checks <PR番号> --watch    # CI全pass待ち
gh pr merge <PR番号> --merge

ステップ 6-7: develop → main

bash
gh pr create --base main --head develop \
  --title "Release x.y.z" \
  --body "Release version x.y.z to production"
gh pr checks <PR番号> --watch    # CI全pass待ち
gh pr merge <PR番号> --merge     # JSR publish 自動実行

ステップ 8: vtag 作成

vtag は main コミットに付与するため、fetch 後に origin/main を指定する。

bash
git fetch origin main
git tag vx.y.z origin/main
git push origin vx.y.z

ステップ 9: マージ済みブランチ削除

main マージ完了 + vtag 作成済みの release/* を削除する。削除基準の詳細は /branch-management 参照。

bash
# 削除対象の確認
git branch --merged main | grep 'release/'
git branch -r --merged origin/main | grep 'release/'

# 削除実行
git branch -D release/x.y.z
git push origin --delete release/x.y.z

ドキュメント更新

リリース前に /update-docs で必要なドキュメントを更新する: CLI変更→--help必須、新機能→README、設定変更→スキーマ説明。

CI バージョンチェック

ワークフローチェック内容失敗時メッセージ
test.ymldeno.json と version.ts の一致(全ブランチ)Version mismatch: deno.json=X, version.ts=Y
test.ymlブランチ名とバージョンの一致(release/*のみ)Branch version mismatch: branch=X, deno.json=Y
version-check.ymldeno.json >= 最新 git タグdeno.json version ($CURRENT) is older than latest tag

失敗時は deno task bump-version で一括修正してコミット・プッシュする。

トラブルシューティング

症状原因と対処
GitHub CI failgh pr checksgh run view <run-id> --log-failed → release/* で修正 & push
publish.yml だけ failtest.yml と publish.yml の test フラグ不一致 → grep -n 'deno test' .github/workflows/{test,publish}.yml で比較して同期
JSR publish スキップdeno.json バージョンが既存と同じ → バージョンを上げて再リリース
vtag が古いコミットgit tag -d vx.y.z && git push origin :refs/tags/vx.y.zgit tag vx.y.z origin/main && git push origin vx.y.z

クイックリファレンス

code
1. deno task bump-version                          # deno.json + version.ts 更新
2. deno task ci && deno fmt --check                # ローカルCI + fmt
3. deno test --allow-env --allow-read --allow-write # CI同等テスト
4. git commit & push
5. gh pr create (release→develop) → checks → merge
6. gh pr create (develop→main) → checks → merge   # JSR auto-publish
7. git tag vx.y.z origin/main && git push origin vx.y.z
8. git branch -D release/x.y.z && git push origin --delete release/x.y.z

関連: /local-ci /ci-troubleshooting /branch-management /git-gh-sandbox /update-docs