用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/maguowei/code-manager --skill release-new-version命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | release-new-version |
| description | 手动触发的发版流程:更新版本文件 → 提交 → 生成 release notes → 打 annotated tag → push。 |
| 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'(取全部历史)。
若 {BASE_TAG}..HEAD 区间无 commit(少见,如重打 tag),release notes 为空,需提示用户确认是否继续。
移除匹配 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"
tag 必须用 annotated(-a):lightweight tag 不保存 message,git show v{VERSION} 将看不到变更内容。
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 手动补跑)。跨步骤的约定与环境依赖(单步内的规则已就近写在对应步骤里):
0.17.0),只有 git tag 才加 v 前缀(v0.17.0)。pnpm-lock.yaml,不手动编辑 Cargo.lock(步骤 3 用 cargo update 同步)。TAURI_SIGNING_PRIVATE_KEY 与 TAURI_SIGNING_PRIVATE_KEY_PASSWORD 两个 GitHub secret,否则不会生成 .sig 与 latest.json,自更新不可用;src-tauri/tauri.conf.json 的 plugins.updater.pubkey 必须是对应公钥,不能留占位符。