diff --git a/.agents/skills/release/SKILL.md b/.agents/skills/release/SKILL.md new file mode 100644 index 0000000..d4e8ef8 --- /dev/null +++ b/.agents/skills/release/SKILL.md @@ -0,0 +1,124 @@ +--- +name: release +description: | + 发布新版本时使用。自动从 git 历史生成 CHANGELOG,更新版本号, + 创建 annotated tag 并推送到远程。触发关键词:"发布"、"release"、"新版本"、"打 tag"。 +allowed-tools: + - Bash + - Read + - Write + - Edit + - Glob + - Grep + - AskUserQuestion +metadata: + trigger: 发布新版本、创建 release、打 tag、更新 changelog +--- + +# Release: 版本发布流程 + +将当前代码状态发布为新版本,遵循 [Keep a Changelog](https://keepachangelog.com) 格式和 [Semantic Versioning](https://semver.org)。 + +## 前置检查 + +1. 确认工作区干净(`git status` 无未提交更改) +2. 确认在主分支上 +3. 检查是否已有 CHANGELOG.md + +## 确认版本号 + +向用户确认版本号(遵循 semver): +- **PATCH** (x.y.z → x.y.z+1):bug 修复、小调整 +- **MINOR** (x.y.z → x.y+1.0):新功能,向后兼容 +- **MAJOR** (x.y.z → x+1.0.0):破坏性变更 + +## 生成 CHANGELOG + +### 确定变更范围 + +- 找到最新 tag:`git tag --sort=-version:refname | head -1` +- 如果没有 tag,从第一个 commit 开始 +- 提取范围内的所有 commit:`git log ..HEAD --oneline` + +### 按类型归类 + +根据 conventional commit 前缀分类: + +| 前缀 | 分类 | 说明 | +|------|------|------| +| `feat:` | **Added** | 新功能 | +| `fix:` | **Fixed** | bug 修复 | +| `perf:` | **Changed** (性能) | 性能优化 | +| `refactor:` | **Changed** | 重构 | +| `test:` | 内部 | 测试(合并到 Changed 或省略) | +| `chore:` / `build:` / `deps:` | 内部 | 构建/依赖(合并到 Changed 或省略) | +| `docs:` | 内部 | 文档(通常省略) | +| 无前缀或中文前缀 | 按内容判断 | 根据描述语义归类 | + +### 写入格式 + +```markdown +## [x.y.z] - YYYY-MM-DD + +### Added +- 功能描述(从 commit message 提炼,去重合并) + +### Changed +- 变更描述 + +### Deprecated +- 即将移除的功能(如有) + +### Removed +- 已移除的功能(如有) + +### Fixed +- 修复描述 + +### Security +- 安全相关修复(如有) +``` + +**关键原则:** +- 合并语义相同的 commit(如多次修复同一功能只写一条) +- 用简洁自然的语言描述,不照搬 commit message +- 省略纯内部变更(如 `chore: format`),除非用户有要求 +- 新版本条目插在文件最前面(`## [Unreleased]` 之后,如果有的话) + +## 更新版本号 + +在 `Cargo.toml` 中更新 `version` 字段为新版本号。 + +## 提交与打 Tag + +```bash +git add CHANGELOG.md Cargo.toml Cargo.lock +git commit -m "chore: release v" +git tag -a v -m "v: <简短版本描述>" +``` + +## 推送 + +向用户确认后执行: + +```bash +git push origin --tags +``` + +## GitHub Release(可选) + +如果用户需要 GitHub Release,使用 `gh release create`: + +```bash +gh release create v --title "v" --notes "$(sed -n '/## \[\]/,/## \[/p' CHANGELOG.md | head -n -1)" +``` + +## 检查清单 + +完成前确认: +- [ ] CHANGELOG.md 已更新且格式正确 +- [ ] Cargo.toml 版本号已更新 +- [ ] Cargo.lock 已同步(如有) +- [ ] commit message 符合项目风格 +- [ ] annotated tag 已创建 +- [ ] 已推送到远程