ship
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseYour Task
你的任务
Automate the complete release pipeline for this plugin using the conventional commit message provided.
Input:
$ARGUMENTSThis is a conventional commit message (e.g., ).
feat: streaming URL management tools使用提供的约定式提交消息,自动化完成此插件的完整发布流水线。
输入:
$ARGUMENTS这是一条约定式提交消息(例如:)。
feat: streaming URL management toolsShip — Automated Code Release Pipeline
Ship — 自动化代码发布流水线
You automate the entire release workflow from uncommitted changes on to a published GitHub Release with version bump.
mainPipeline:
[uncommitted changes on main]
→ create feature branch
→ commit with conventional commit message
→ push + create PR
→ poll CI checks until all pass (or fail)
→ merge PR
→ pull main
→ determine version bump from commit prefix
→ update plugin.json + marketplace.json + CHANGELOG + README badges
→ commit "chore: release 0.x.0"
→ push to main (triggers auto-release.yml → GitHub Release)
→ delete local feature branch你要将main分支上未提交的变更,自动化完成从代码到发布GitHub Release并升级版本的整个工作流。
流水线:
[main分支上的未提交变更]
→ 创建功能分支
→ 使用约定式提交消息提交
→ 推送并创建PR
→ 轮询CI检查直至全部通过(或失败)
→ 合并PR
→ 拉取main分支
→ 根据提交前缀确定版本升级类型
→ 更新plugin.json + marketplace.json + CHANGELOG + README徽章
→ 提交 "chore: release 0.x.0"
→ 推送到main分支(触发auto-release.yml → GitHub Release)
→ 删除本地功能分支Step 0: Parse Input
步骤0:解析输入
Extract from :
$ARGUMENTS- Full commit message — the entire string (e.g., )
feat: streaming URL management tools - Prefix — the conventional commit type before the colon: ,
feat:,fix:,feat!:,docs:chore: - Description — everything after the prefix (e.g., )
streaming URL management tools - Branch name — derived from the message: lowercase, spaces to hyphens, prefix becomes the branch prefix
- →
feat: streaming URL management toolsfeat/streaming-url-management-tools - →
fix: correct audio pathfix/correct-audio-path - →
feat!: breaking changefeat/breaking-change - →
docs: update READMEdocs/update-readme - →
chore: cleanupchore/cleanup
- Version bump type:
- → MINOR (0.57.0 → 0.58.0)
feat: - → PATCH (0.57.0 → 0.57.1)
fix: - → MAJOR (0.57.0 → 1.0.0)
feat!: - or
docs:→ none (skip version bump and release steps)chore:
If is empty or doesn't match a conventional commit pattern, stop and ask the user for a commit message.
$ARGUMENTS从中提取以下信息:
$ARGUMENTS- 完整提交消息 — 整个字符串(例如:)
feat: streaming URL management tools - 前缀 — 冒号前的约定式提交类型:,
feat:,fix:,feat!:,docs:chore: - 描述 — 前缀后的所有内容(例如:)
streaming URL management tools - 分支名称 — 由消息派生而来:小写,空格替换为连字符,前缀作为分支前缀
- →
feat: streaming URL management toolsfeat/streaming-url-management-tools - →
fix: correct audio pathfix/correct-audio-path - →
feat!: breaking changefeat/breaking-change - →
docs: update READMEdocs/update-readme - →
chore: cleanupchore/cleanup
- 版本升级类型:
- → MINOR(0.57.0 → 0.58.0)
feat: - → PATCH(0.57.0 → 0.57.1)
fix: - → MAJOR(0.57.0 → 1.0.0)
feat!: - 或
docs:→ 无(跳过版本升级和发布步骤)chore:
如果为空或不符合约定式提交格式,终止流程并要求用户提供正确的提交消息。
$ARGUMENTSStep 1: Pre-flight Checks
步骤1:预检检查
Run these checks. If ANY fail, stop immediately with a clear error message.
-
On main branch?bash
git branch --show-currentMust be. If not: "Switch to main first:main"git checkout main && git pull -
Uncommitted changes exist?bash
git status --porcelainMust have output. If empty: "No changes to ship. Make some changes first." -
GitHub CLI authenticated?bash
gh auth statusMust succeed. If not: "Runfirst."gh auth login -
Read current version from:
.claude-plugin/plugin.jsonbashjq -r '.version' .claude-plugin/plugin.jsonStore as.CURRENT_VERSION
Report: "Pre-flight passed. Current version: {CURRENT_VERSION}. Shipping: {commit message}"
执行以下检查。如果任意一项失败,立即终止流程并给出清晰的错误提示。
-
当前是否在main分支?bash
git branch --show-current必须返回。若不是:"请先切换到main分支:main"git checkout main && git pull -
是否存在未提交的变更?bash
git status --porcelain必须有输出。若为空:"没有可发布的变更,请先进行修改。" -
GitHub CLI是否已认证?bash
gh auth status必须认证成功。若未认证:"请先执行。"gh auth login -
从读取当前版本:
.claude-plugin/plugin.jsonbashjq -r '.version' .claude-plugin/plugin.json将结果保存为。CURRENT_VERSION
完成后报告:"预检通过。当前版本:{CURRENT_VERSION}。待发布内容:{commit message}"
Step 2: Branch + Commit + Push
步骤2:分支创建 + 提交 + 推送
-
Create feature branch:bash
git checkout -b {branch-name} -
Stage files — useto identify changed files. Stage them by name. Never stage
git status,.env, or secret files. Prefer specific filenames overcredentials.git add -A -
Commit with the conventional commit message + co-author:bash
git commit -m "$(cat <<'EOF' {full commit message} Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> EOF )" -
Push:bash
git push -u origin {branch-name}
-
创建功能分支:bash
git checkout -b {branch-name} -
暂存文件 — 使用识别变更文件,按文件名暂存。绝对不要暂存
git status、.env或其他包含敏感信息的文件。优先使用具体文件名而非credentials。git add -A -
提交时使用约定式提交消息 + 共同作者:bash
git commit -m "$(cat <<'EOF' {full commit message} Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> EOF )" -
推送:bash
git push -u origin {branch-name}
Step 3: Create PR
步骤3:创建PR
Create a pull request using the commit message as the title:
bash
gh pr create --title "{full commit message}" --body "$(cat <<'EOF'使用提交消息作为标题创建拉取请求:
bash
gh pr create --title "{full commit message}" --body "$(cat <<'EOF'Summary
摘要
{1-3 bullet points summarizing what changed}
{1-3个要点总结变更内容}
Test plan
测试计划
- CI checks pass (automated)
- Version sync validates (automated)
🤖 Generated with Claude Code
EOF
)"
Capture the PR number from the output for subsequent steps.
---Step 4: Wait for CI Checks
步骤4:等待CI检查
Poll CI using with the flag:
gh pr checks--watchbash
gh pr checks {pr-number} --watch --fail-level allThis blocks until all checks complete. Use a 10-minute timeout.
If any check fails:
- Report which check(s) failed
- Print the failing check URL(s) if available
- Stop the pipeline — leave the PR open for the user to investigate
- Say: "CI failed. Fix the issues, push to the branch, and re-run or merge manually."
/bitwize-music:ship - Do NOT proceed to merge.
If all checks pass: Report "All CI checks passed." and continue.
使用命令的标志轮询CI状态:
gh pr checks--watchbash
gh pr checks {pr-number} --watch --fail-level all此命令会阻塞直至所有检查完成,超时时间为10分钟。
若任意检查失败:
- 报告失败的检查项
- 若有可用链接,打印失败检查的URL
- 终止流水线 — 保留PR让用户排查问题
- 提示:"CI检查失败。请修复问题后推送到分支,重新运行或手动合并。"
/bitwize-music:ship - 不要继续执行合并操作。
若所有检查通过:报告"所有CI检查通过。"并继续流程。
Step 5: Merge PR
步骤5:合并PR
-
Merge the PR (merge commit, delete remote branch):bash
gh pr merge {pr-number} --merge --delete-branch -
Switch back to main and pull:bash
git checkout main && git pull origin main
-
合并PR(创建合并提交,删除远程分支):bash
gh pr merge {pr-number} --merge --delete-branch -
切换回main分支并拉取最新代码:bash
git checkout main && git pull origin main
Step 6: Version Bump
步骤6:版本升级
Skip this entire step if the prefix is or .
docs:chore:如果前缀是或,请跳过整个步骤。
docs:chore:6a: Calculate new version
6a:计算新版本号
From and the bump type:
CURRENT_VERSION- MINOR: increment middle number, reset patch to 0 (e.g., 0.57.0 → 0.58.0)
- PATCH: increment last number (e.g., 0.57.0 → 0.57.1)
- MAJOR: increment first number, reset others to 0 (e.g., 0.57.0 → 1.0.0)
Store as .
NEW_VERSION根据和升级类型计算:
CURRENT_VERSION- MINOR:升级中间版本号,补丁版本号重置为0(例如:0.57.0 → 0.58.0)
- PATCH:升级最后一位版本号(例如:0.57.0 → 0.57.1)
- MAJOR:升级第一位版本号,其余版本号重置为0(例如:0.57.0 → 1.0.0)
将结果保存为。
NEW_VERSION6b: Update .claude-plugin/plugin.json
.claude-plugin/plugin.json6b:更新.claude-plugin/plugin.json
.claude-plugin/plugin.jsonChange →
"version": "{CURRENT_VERSION}""version": "{NEW_VERSION}"将 修改为
"version": "{CURRENT_VERSION}""version": "{NEW_VERSION}"6c: Update .claude-plugin/marketplace.json
.claude-plugin/marketplace.json6c:更新.claude-plugin/marketplace.json
.claude-plugin/marketplace.jsonChange →
"version": "{CURRENT_VERSION}""version": "{NEW_VERSION}"将 修改为
"version": "{CURRENT_VERSION}""version": "{NEW_VERSION}"6d: Update CHANGELOG.md
CHANGELOG.md6d:更新CHANGELOG.md
CHANGELOG.md- Find the current section content
## [Unreleased] - Insert a new versioned section between and the previous version:
[Unreleased]- Empty section at top
## [Unreleased] - Then with the content that was under Unreleased
## [{NEW_VERSION}] - {YYYY-MM-DD}
- Empty
- The date is today's date
- 找到当前的部分内容
## [Unreleased] - 在和上一个版本之间插入新的版本章节:
[Unreleased]- 顶部保留空的章节
## [Unreleased] - 新增章节,并将原Unreleased下的内容移入
## [{NEW_VERSION}] - {YYYY-MM-DD}
- 顶部保留空的
- 日期为当前日期
6e: Update README.md badges
6e:更新README.md中的徽章
Update these badge lines:
- Version badge:
 - Skills count badge: count directories in and update
skills/*/ - Test count badge: run to get the count, update
pytest --co -q 2>/dev/null | tail -1
更新以下徽章行:
- 版本徽章:
 - 技能数量徽章:统计目录的数量,更新
skills/*/ - 测试数量徽章:执行获取数量,更新
pytest --co -q 2>/dev/null | tail -1
6f: Update README "What's New" table (for feat:
and feat!:
only)
feat:feat!:6f:更新README中的“What's New”表格(仅适用于feat:
和feat!:
提交)
feat:feat!:If the commit is a or :
feat:feat!:- Read the CHANGELOG entry for this version
- Add a row to the "What's New" table in README.md at the top (below the header row)
- Format:
| **{MINOR_VERSION}** | {brief highlight} | - Example:
| **0.58** | Ship skill for automated code release pipeline |
如果提交类型是或:
feat:feat!:- 读取此版本的CHANGELOG条目
- 在README.md的“What's New”表格顶部(表头行下方)添加一行
- 格式:
| **{MINOR_VERSION}** | {简要亮点} | - 示例:
| **0.58** | 用于自动化代码发布流水线的Ship技能 |
6g: Update README skill count text
6g:更新README中的技能数量文本
If a new skill was added, update the "collection of N specialized skills" text in README.md to match the badge count.
如果新增了技能,更新README.md中“collection of N specialized skills”文本,使其与徽章中的数量一致。
Step 7: Release Commit + Push
步骤7:发布提交 + 推送
Skip if or prefix (no version bump happened).
docs:chore:-
Stage the version files:bash
git add .claude-plugin/plugin.json .claude-plugin/marketplace.json CHANGELOG.md README.md -
Commit:bash
git commit -m "$(cat <<'EOF' chore: release {NEW_VERSION} Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> EOF )" -
Push to main — this triggerswhich creates the GitHub Release:
auto-release.ymlbashgit push origin main
如果前缀是或(未执行版本升级),请跳过此步骤。
docs:chore:-
暂存版本相关文件:bash
git add .claude-plugin/plugin.json .claude-plugin/marketplace.json CHANGELOG.md README.md -
提交:bash
git commit -m "$(cat <<'EOF' chore: release {NEW_VERSION} Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> EOF )" -
推送到main分支 — 此操作会触发工作流,创建GitHub Release:
auto-release.ymlbashgit push origin main
Step 8: Cleanup
步骤8:清理
-
Delete local feature branch (it was already deleted from remote by):
--delete-branchbashgit branch -d {branch-name} -
Report success:
Ship complete! Commit: {full commit message} Version: {CURRENT_VERSION} → {NEW_VERSION} PR: {PR URL} Release: auto-release.yml will create GitHub Release for v{NEW_VERSION} Branch {branch-name} cleaned up (local + remote).For/docs:(no version bump):chore:Ship complete! Commit: {full commit message} Version: unchanged ({CURRENT_VERSION}) PR: {PR URL} No version bump for {prefix} commits. Branch {branch-name} cleaned up (local + remote).
-
删除本地功能分支(远程分支已在合并时通过删除):
--delete-branchbashgit branch -d {branch-name} -
报告成功:
发布完成! 提交消息:{full commit message} 版本:{CURRENT_VERSION} → {NEW_VERSION} PR:{PR URL} 发布:auto-release.yml将为v{NEW_VERSION}创建GitHub Release 分支{branch-name}已清理(本地+远程)。对于/docs:类型的提交(未升级版本):chore:发布完成! 提交消息:{full commit message} 版本:未变更({CURRENT_VERSION}) PR:{PR URL} {prefix}类型的提交无需升级版本。 分支{branch-name}已清理(本地+远程)。
Error Handling
错误处理
| Scenario | Action |
|---|---|
Not on | Stop. Tell user to |
| No uncommitted changes | Stop. "Nothing to ship." |
| Stop. Suggest |
| CI check fails | Stop. Report failure details. Leave PR open. |
| Merge conflict | Stop. Report conflict. Let user resolve. |
| Push rejected | Stop. Report error. Suggest |
| Invalid commit message | Stop. Show expected format with examples. |
Never force-push. Never skip CI. Never auto-close a failed PR.
| 场景 | 操作 |
|---|---|
不在 | 终止流程。告知用户执行 |
| 无未提交变更 | 终止流程。“没有可发布的内容。” |
| 终止流程。建议执行 |
| CI检查失败 | 终止流程。报告失败详情。保留PR。 |
| 合并冲突 | 终止流程。报告冲突情况。让用户自行解决。 |
| 推送被拒绝 | 终止流程。报告错误。建议执行 |
| 提交消息无效 | 终止流程。展示预期格式及示例。 |
绝对不要强制推送。绝对不要跳过CI检查。绝对不要自动关闭失败的PR。
Remember
注意事项
- Parse the commit message first — everything flows from the prefix
- Pre-flight is non-negotiable — stop if any check fails
- Stage files by name — never or
git add -Agit add . - CI must pass — never merge with failing checks
- Version bump follows conventional commits — = MINOR,
feat:= PATCH,fix:= MAJORfeat!: - Both JSON files must match — plugin.json and marketplace.json versions stay in sync
- CHANGELOG gets the content — move Unreleased to versioned section
- Badges must match — version, skills count, test count in README
- commit triggers auto-release.yml — which creates the GitHub Release
chore: release - Clean up branches — delete local and remote after merge
Your deliverable: Changes shipped from uncommitted code to published GitHub Release in one automated pipeline.
- 先解析提交消息 — 所有流程都基于前缀展开
- 预检检查不可省略 — 任意检查失败则终止流程
- 按文件名暂存文件 — 绝不使用或
git add -Agit add . - CI必须通过 — 绝不合并检查失败的PR
- 版本升级遵循约定式提交 — = MINOR,
feat:= PATCH,fix:= MAJORfeat!: - 两个JSON文件版本必须一致 — plugin.json和marketplace.json的版本要保持同步
- CHANGELOG要同步内容 — 将Unreleased部分的内容移至对应版本章节
- 徽章信息必须准确 — README中的版本、技能数量、测试数量徽章要与实际一致
- 提交触发auto-release.yml — 该工作流会创建GitHub Release
chore: release - 清理分支 — 合并后删除本地和远程分支
你的交付成果:将未提交的代码变更通过一条自动化流水线,发布为GitHub Release。