بنقرة واحدة
release-new-version
手动触发的发版技能。仅在用户主动输入 `/release-new-version` 命令时调用,模型不得自动调用此技能。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
手动触发的发版技能。仅在用户主动输入 `/release-new-version` 命令时调用,模型不得自动调用此技能。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
| name | release-new-version |
| description | 手动触发的发版技能。仅在用户主动输入 `/release-new-version` 命令时调用,模型不得自动调用此技能。 |
| disable-model-invocation | true |
给定版本号,自动完成完整发布流程:更新版本文件 → 提交 → 生成 release notes → 打 annotated git tag(附带完整变更日志)→ push。
接收版本号(如 0.17.0 或 v0.17.0),可选接收对比基准版本(如 from v0.15.0、base=v0.15.0、对比 v0.15.0)。若未提供基准,自动取前一个 SemVer tag。按顺序执行以下步骤:
发布必须在 main 分支上执行(版本 bump 提交与 tag 都落在 main),不要在 dev 或功能分支上发版。
git fetch origin --tags
git rev-parse --abbrev-ref HEAD # 当前分支
git status --short # 工作区是否干净
git rev-list --count main..origin/main # 本地 main 是否落后远端
处理规则:
git status --short 为空);有无关改动先提示用户处理,不要裹挟进发布提交。git checkout main && git merge --ff-only origin/main。dev/功能分支未合入(git rev-list --count main..<分支> > 0),先提示用户走 PR 或 fast-forward 合并,不要在 main 上直接拉取未评审代码。dev/功能分支误建了 bump 提交、且其父提交正是 main 当前位置,可 git checkout main && git merge --ff-only <分支> 把 bump 并入 main,保持两分支一致(避免分叉)。⏸️ 用户确认点(当前不在 main、main 落后远端、或发布内容尚未合入 main 时):展示上述分支状态,说明将如何对齐,用户确认后再切换/合并。
1a. 解析用户输入
0.17.0 或 v0.17.0)→ 去掉前缀 v,使用纯 semver 格式。1b. 自动推断版本号(当用户未提供时)
# 同步远程 tags,确保基于最新数据推断
git fetch --tags
# 取最新 tag
LATEST=$(git tag --sort=-v:refname | head -1)
# 若无历史 tag,提示用户手动输入版本号
推断规则:minor + 1,patch 重置为 0。例如:
v0.16.0 → 0.17.0v1.0.0 → 1.1.0v1.2.3 → 1.3.0若无历史 tag,提示用户手动输入版本号。
⏸️ 用户确认点:展示推断或用户指定的版本号,提示用户确认。用户确认后再执行。
用 Edit 工具依次更新以下三个文件:
src-tauri/tauri.conf.json — 顶层 version 字段package.json — 顶层 version 字段src-tauri/Cargo.toml — [package] 段的第一个 version = "..." 行执行以下命令更新锁文件:
cargo update --manifest-path src-tauri/Cargo.toml --package code-manager
如命令失败(包名不匹配等),跳过并记录。
⏸️ 用户确认点:展示将要提交的文件列表和 commit message,提示用户确认。用户确认后再执行。
仅暂存版本相关文件,提交:
git add src-tauri/tauri.conf.json package.json src-tauri/Cargo.toml src-tauri/Cargo.lock
git commit -m "chore(release): bump version to {VERSION}"
确定用于生成 release notes 的基准版本,规则如下:
from v0.15.0、base=v0.15.0、对比 v0.15.0),将其规范化为 vX.Y.Z 格式后直接使用。git tag --sort=-v:refname | grep -v "^v{VERSION}$" | head -1
INITIAL,release notes 标题写 "Initial release"。校验基准 tag 是否真实存在(git rev-parse {BASE_TAG} 不报错);不存在则中止并询问用户。
⏸️ 用户确认点:展示确定的版本号和对比基准 tag,提示用户确认。用户确认后再继续。
执行以下流程生成结构化变更日志:
git log --pretty=format:'%h %s' {BASE_TAG}..HEAD
若基准为 INITIAL,改用 git log --pretty=format:'%h %s'(取全部历史)。
移除匹配 chore(release): bump version to 的行(版本升级 commit 本身)。
将剩余 commit 按以下前缀分组,无对应类型则省略该段:
| 类型前缀 | 中文标题 |
|---|---|
feat | 新功能 |
fix | 缺陷修复 |
perf | 性能优化 |
refactor | 重构 |
docs | 文档 |
test | 测试 |
build / ci | 构建与 CI |
chore / style / 其他 | 其他 |
同类型内按原始 commit 顺序排列(即时间从早到晚)。
git remote get-url origin
同时兼容两种格式:
git@github.com:owner/repo.git → https://github.com/owner/repo/compare/{BASE_TAG}...v{VERSION}https://github.com/owner/repo.git → 同上无法解析则省略 compare 链接行。
在 commit 分类列表之前,生成一段版本总结。规则:
将生成的 release notes 写入临时文件,模板如下(当基准为 INITIAL 时省略「对比基准」和「完整变更」行):
Release v{VERSION} ({YYYY-MM-DD})
对比基准:{BASE_TAG}
**版本总结**:{本版本重要变更的总结,3-5 句话}
## 新功能
- feat(xxx): ... ({short_sha})
## 缺陷修复
- fix(xxx): ... ({short_sha})
(其他类型按需出现,无该类型则省略整段)
完整变更:https://github.com/{owner}/{repo}/compare/{BASE_TAG}...v{VERSION}
⏸️ 用户确认点:展示生成的完整 release notes 内容(含版本总结),提示用户审核。用户确认后才写入临时文件。
使用 mktemp 创建临时文件,将上述内容写入其中,记录文件路径为 $NOTES_FILE。
⏸️ 用户确认点:提示用户即将执行不可逆操作(打 tag + push),展示即将执行的命令摘要,请求最终确认。用户确认后才执行 push。
在 main 上(见步骤 0)执行:
git tag -a v{VERSION} -F "$NOTES_FILE"
git push origin main
git push origin v{VERSION}
# 如需保持 dev 与 main 一致(bump 已并入 main),一并推送:git push origin dev
rm -f "$NOTES_FILE"
release.yml 中的占位文案「查看 Assets 下载并安装此版本」。若希望 Release 页直接展示此 notes,可后续修改 release.yml 的 releaseBody 改为从 tag message 读取。releaseDraft: true 创建的是草稿,不会发出 published 事件。构建完成后需用户在 GitHub Releases 页面 review 产物,点击 Publish release 发布为正式版。只有发布后才会触发:① 应用自更新(latest.json 对用户可见);② update-homebrew-cask.yml(监听 release: published)自动 bump cask。停在草稿态则二者都不触发(cask 仅能靠 workflow_dispatch 手动补跑)。main:版本 bump 提交与 tag 都落在 main(见步骤 0);发布内容先经 PR 合入 main,不在 dev/功能分支上直接发版。0.17.0),只有 git tag 才加 v 前缀(v0.17.0)。-a),lightweight tag 不会保存 message,git show v{VERSION} 将看不到变更内容。git rev-parse 校验),不存在则中止并询问用户确认。{BASE_TAG}..HEAD 区间无 commit 时(少见,如重打 tag),release notes 为空,需提示用户确认是否继续。pnpm-lock.yaml,不手动编辑 Cargo.lock。TAURI_SIGNING_PRIVATE_KEY 与 TAURI_SIGNING_PRIVATE_KEY_PASSWORD 两个 GitHub secret,否则不会生成 .sig 与 latest.json,自更新不可用;src-tauri/tauri.conf.json 的 plugins.updater.pubkey 必须是对应公钥,不能留占位符。releaseDraft: true 创建草稿,updater 的 endpoint(releases/latest/download/latest.json)只解析到已发布的正式 Release;发布草稿后自更新与 Homebrew Cask 更新才会触发。Code Manager 仓库的 Claude Code settings schema 同步技能。涉及 src/schemas/claude-settings.schema.json 升级、SchemaStore 最新定义同步、Claude Code 新增 settings 字段(hooks/env/worktree/permissionRule 等)、或后端 Rust 配置校验兼容性检查时使用:以官方 SchemaStore 为唯一事实源,按"下载 → 整体替换 → 语义比对 → Rust 校验"四步走。
Code Manager 仓库 pnpm/Cargo 依赖升级技能。无论是依赖巡检、单包升级、Tauri 栈对齐、安全补丁修复,还是评估 Vite/TypeScript/Rust 主版本 breaking change,只要涉及 package.json、Cargo.toml、lock 文件或要跑 pnpm audit/cargo update,都使用本技能:按"安全→Tauri→前端→breaking"分批推进,每批跑对应验证。