Skip to content

Commit b63bab7

Browse files
committed
build(claude): 新增 release-version 技能,以使当前项目的版本发布工作流可通过ai进行协助。
1 parent 638d883 commit b63bab7

1 file changed

Lines changed: 198 additions & 0 deletions

File tree

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
---
2+
name: release-version
3+
description: 执行 KeyTone 版本发布工作流:生成 CHANGELOG、确定版本号、更新前端版本、更新多语言文档站点、暂存变更。
4+
applyTo: "**"
5+
---
6+
7+
# 版本发布 Skill
8+
9+
## 适用场景
10+
11+
当用户要求执行以下操作时调用本 Skill:
12+
13+
- "发布新版本" / "release" / "打版"
14+
- "更新版本号"
15+
- "生成 changelog"
16+
- "准备发版"
17+
- "bump version"
18+
19+
## 工作流
20+
21+
### 第 1 步:生成增量 CHANGELOG
22+
23+
在项目根目录执行:
24+
25+
```bash
26+
npx conventional-changelog -p angular -i CHANGELOG.md -s
27+
```
28+
29+
该命令会根据**约定式提交(Conventional Commits)**规范,从上次版本标签至今的提交中提取增量日志,追加到 `CHANGELOG.md`
30+
31+
> **注意**`CHANGELOG.md` 顶部标题中的版本号可能为空(`# `),这是 `conventional-changelog` 的默认行为,后续步骤会处理。
32+
33+
生成后,从 `CHANGELOG.md` 顶部读取**增量部分**——即从文件顶部到上一次已知版本标题之间的所有内容。
34+
35+
---
36+
37+
### 第 2 步:确定版本号
38+
39+
#### 2.1 用户显式提供了版本号
40+
41+
直接使用用户提供的版本号(如 `1.2.3`),跳过自动决策。
42+
43+
#### 2.2 用户未提供版本号 → 自动决策
44+
45+
分析第 1 步生成的增量 changelog 内容,按语义化版本(SemVer)规则判定:
46+
47+
| 增量中有无 Breaking Changes / `Reverts` | 增量中有无 `Features` 类型 | 推荐版本 bump | 示例 |
48+
|----------------------------------------|---------------------------|---------------|-----------|
49+
||| major | 1.0.0 → 2.0.0 |
50+
||| minor | 1.0.0 → 1.1.0 |
51+
|| 无(仅 Bug Fixes / 其他) | patch | 1.0.0 → 1.0.1 |
52+
53+
**判定来源**:读取 `CHANGELOG.md` 顶部的增量内容,查找以下关键词:
54+
55+
- **Breaking Changes**:提交信息或 changelog 中带有 `BREAKING CHANGE``!:`(如 `feat!: ...`)、`Reverts` 标题
56+
- **Features**:changelog 中存在 `### Features``### 新功能` 标题
57+
- **Bug Fixes**:changelog 中存在 `### Bug Fixes``### 问题修复` 标题
58+
59+
`frontend/package.json` 中读取**当前版本号**作为基准,计算新版本号。
60+
61+
**自动决策示例**
62+
63+
- 当前版本 `1.0.1`,增量包含 Features → 新版本为 `1.1.0`
64+
- 当前版本 `1.0.1`,增量仅 Bug Fixes → 新版本为 `1.0.2`
65+
- 当前版本 `1.0.1`,增量包含 BREAKING CHANGE → 新版本为 `2.0.0`
66+
67+
> ⚠️ 如果增量内容为空或无法判断,询问用户是否仍要发版,以及期望的版本号。
68+
69+
---
70+
71+
### 第 3 步:更新前端版本(UI 侧)
72+
73+
进入 `frontend/` 目录执行 npm version:
74+
75+
```bash
76+
cd frontend && npm version <version>
77+
```
78+
79+
此命令会:
80+
- 更新 `frontend/package.json``version` 字段
81+
- 自动创建一条 git commit(如果不需要自动 commit,可在后续 `git add` 中统一管理——但 npm version 默认会 commit,可以追加 `--no-git-tag-version` 参数来阻止)
82+
83+
**建议使用 `--no-git-tag-version`**,让所有变更统一暂存:
84+
85+
```bash
86+
cd /Users/srackhalllu/Desktop/资源管理器/safe/KeyTone/frontend && npm version <version> --no-git-tag-version
87+
```
88+
89+
> **注意**`npm version` 会校验版本号格式(必须是有效的 SemVer,如 `1.2.3`),且不能与已有 git tag 重复(若未使用 `--no-git-tag-version`)。
90+
91+
---
92+
93+
### 第 4 步:更新官网文档站点
94+
95+
文档站点位于 `docs/docs/` 目录,使用 VitePress 构建,支持多语言。
96+
97+
#### 4.1 更新 VitePress 配置文件
98+
99+
对每个语言的配置文件(`docs/docs/.vitepress/config/*.mts`)执行以下更新:
100+
101+
1. **导航栏版本链接**:找到 `text: "v" + version``text: "v<旧版本>"` 的导航项,将其中的 `version` 引用或硬编码版本号更新为新版本。
102+
- 在中文配置中,对应的 items 链接为 `"zh/changelog/v" + version`
103+
- 在英文配置中,对应的 items 链接为 `"/changelog/v" + version`
104+
- ......其他语言同理,路径根据 base 配置调整。
105+
106+
2. **侧边栏(Sidebar)更新日志列表**:在每个配置文件的 `sidebarChangelog()` 函数中,在数组**最前面**插入新的版本条目:
107+
```typescript
108+
{ text: "v<新版本>", link: "/v<新版本>" }, // 英文
109+
{ text: "v<新版本>", link: "/v<新版本>" }, // 中文(link 路径相同,因为 base 配置不同)
110+
{ text: "v<新版本>", link: "/v<新版本>" }, // 其他语言同理
111+
```
112+
113+
#### 4.2 创建各语言的 Changelog 版本文件
114+
115+
对于每种语言,在对应目录下创建 `<version>.md` 文件:
116+
117+
- 英文:`docs/docs/changelog/v<version>.md`
118+
- 中文:`docs/docs/zh/changelog/v<version>.md`
119+
- 其他语言(同理):`docs/docs/<lang>/changelog/v<version>.md`
120+
121+
**文件内容格式模板**(基于项目中已有版本文件提炼):
122+
123+
````markdown
124+
# `<version>` *(<yyyy>-<mm>-<dd>)*
125+
126+
<英文/中文概述段落 — 从 CHANGELOG.md 增量中提取核心内容概括>
127+
128+
### Bug Fixes
129+
130+
* <从 CHANGELOG.md 中提取对应语言的 Bug Fixes 条目,保留原始格式>
131+
* <每个条目包含 commit hash 链接和 issue 引用>
132+
133+
### Features
134+
135+
* <从 CHANGELOG.md 中提取对应语言的 Features 条目>
136+
* <同上>
137+
````
138+
139+
**转换规则**(以中英为例, 其它语言同理):
140+
141+
- 从根目录 `CHANGELOG.md` 顶部的增量内容中提取信息
142+
- 英文版(`docs/docs/changelog/`):保留原始英文条目;若条目为中文,需翻译为英文
143+
- 中文版(`docs/docs/zh/changelog/`):保留原始中文条目;若条目为英文,需翻译为中文
144+
- 版本标题格式:`` # `<version>` *(<date>)* ``
145+
- 日期格式:`YYYY-MM-DD`(使用当前日期)
146+
- 分类标题映射:
147+
- `### Features` / `### 新功能` → 英文版用 `### Features`,中文版用 `### 新功能`
148+
- `### Bug Fixes` / `### 问题修复` → 英文版用 `### Bug Fixes`,中文版用 `### 问题修复`
149+
- `### Reverts` / `### 回退` → 保留原标题
150+
- `### Performance Improvements` / `### 性能优化` → 保留原标题
151+
- 每个条目保留原始格式(星号列表、commit 链接、issue 引用)
152+
153+
**如果某个分类在增量中不存在,则省略对应的标题**
154+
155+
---
156+
157+
### 第 5 步:暂存所有变更
158+
159+
```bash
160+
git add .
161+
```
162+
163+
> 只执行 `git add`,不自动 commit,以便用户审查变更。
164+
165+
---
166+
167+
## 输出总结
168+
169+
完成上述步骤后,向用户展示以下格式的总结:
170+
171+
```
172+
## ✅ 版本发布准备完成
173+
174+
### 版本信息
175+
- **新版本号**:<version>
176+
- **版本类型**:<major|minor|patch>
177+
- **发布日期**:<YYYY-MM-DD>
178+
179+
### 已更新文件
180+
1. 📝 `CHANGELOG.md` — 增量 changelog
181+
2. 📦 `frontend/package.json` — UI 版本号
182+
3. 🌐 `docs/docs/.vitepress/config/<lang>.mts` — 文档站配置(导航 + 侧边栏)
183+
4. 📖 `docs/docs/changelog/v<version>.md` — 英文更新日志
184+
5. 📖 `docs/docs/zh/changelog/v<version>.md` — 中文更新日志
185+
6. 📖 `docs/docs/<lang>/changelog/v<version>.md` — 其他语言更新日志(如适用)
186+
187+
### 增量内容概要
188+
<简要列出本次发版包含的主要变更类别和数量,例如:2 个新功能、5 个问题修复>
189+
190+
### ⏩ 后续建议
191+
请审查以上变更,确认无误后可执行:
192+
193+
```bash
194+
git commit -m "chore(release): <version>"
195+
git tag <version>
196+
git push origin <当前分支名>
197+
git push origin <version>
198+
```

0 commit comments

Comments
 (0)