Skip to content

Commit 1b33a5f

Browse files
CodeCasterXclaude
andcommitted
feat(commands): 优化 create-release-note 支持 x.y.0 合并路径并同步多 AI 工具
为 create-release-note 命令增加 x.y.0 版本的合并路径,可自动 合并前一 minor 系列已发布的 release notes 而无需重复计算。 将步骤结构拉平为同一层级(15 步),通过路径标记区分合并路径 (步骤 4-7)与常规路径(步骤 8-13)。 同时将命令同步到 Codex、Gemini、OpenCode 三个 AI 工具, 并在各工具的 release 命令中添加相关引用。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent a58ca80 commit 1b33a5f

File tree

7 files changed

+748
-9
lines changed

7 files changed

+748
-9
lines changed

.claude/commands/create-release-note.md

Lines changed: 77 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ usage: "/create-release-note <version> [prev-version]"
1010

1111
自动从 PR、commit 和 Issue 中收集变更信息,按模块和类型分类,生成符合项目格式的 Release Notes。支持创建 GitHub Draft Release。
1212

13+
对于 x.y.0 版本,支持合并前一 minor 系列的已发布 release notes,无需重复计算。
14+
1315
## 用法
1416

1517
```bash
@@ -21,6 +23,7 @@ usage: "/create-release-note <version> [prev-version]"
2123
```bash
2224
/create-release-note 3.6.3 # 自动推断上一版本为 3.6.2
2325
/create-release-note 3.6.3 3.6.2 # 手动指定范围
26+
/create-release-note 3.7.0 # x.y.0 版本:合并 3.6.x 系列的所有 release notes
2427
```
2528

2629
## 参数说明
@@ -32,6 +35,12 @@ usage: "/create-release-note <version> [prev-version]"
3235

3336
## 执行步骤
3437

38+
步骤 1-3 为公共步骤,步骤 3 根据版本类型分流:
39+
- **合并路径**(PATCH == 0,如 `3.7.0`):步骤 4-7 → 跳到步骤 14
40+
- **常规路径**(PATCH > 0,如 `3.6.3`):步骤 8-13 → 继续步骤 14
41+
42+
步骤 14-15 为公共步骤。
43+
3544
### 步骤 1:解析参数
3645

3746
`$ARGUMENTS` 中提取参数。支持两种形式:
@@ -65,7 +74,60 @@ git rev-parse v<prev-version>
6574

6675
如果任一 tag 不存在,报错退出:`错误:Tag v<version> 不存在,请确认 tag 已创建`
6776

68-
### 步骤 3:收集合并的 PR
77+
### 步骤 3:判断版本类型并选择路径
78+
79+
根据版本号的 PATCH 部分选择不同的生成路径:
80+
81+
- **如果 PATCH == 0**(如 `3.7.0`)→ 走**合并路径**,从步骤 4 开始
82+
- **如果 PATCH > 0**(如 `3.6.3`)→ 走**常规路径**,从步骤 8 开始
83+
84+
---
85+
86+
### 合并路径(PATCH == 0,x.y.0 版本)
87+
88+
### 步骤 4:查找前一 minor 系列的所有已发布 release
89+
90+
```bash
91+
gh release list --limit 50 --json tagName,isDraft,isPrerelease
92+
```
93+
94+
从结果中筛选满足以下条件的条目:
95+
- `tagName``vX.(Y-1).` 开头(例如版本 `3.7.0` 则筛选 `v3.6.` 开头)
96+
- `isDraft == false`
97+
- `isPrerelease == false`
98+
99+
如果未找到任何已发布的 release,提示用户并回退到常规路径(步骤 8)。
100+
101+
### 步骤 5:按版本号升序获取各 release body
102+
103+
对步骤 4 筛选出的每个 release tag,按版本号升序获取其内容:
104+
105+
```bash
106+
gh release view v<tag> --json body --jq .body
107+
```
108+
109+
### 步骤 6:合并所有 release body
110+
111+
将各版本的 release notes 合并为一份完整文档:
112+
113+
1. **按版本顺序拼接**:按 `v3.6.1``v3.6.2``v3.6.3` ... 的顺序处理
114+
2. **同平台同类型条目合并**:将各版本中相同平台(如 FIT Function Platform)相同类型(如 Enhancement)的条目合并到一起
115+
3. **去重 Contributors**:合并所有 `❤️ Contributors` 段落中的贡献者,去重后按贡献量(出现次数)降序排列
116+
117+
### 步骤 7:生成 Overview
118+
119+
x.y.0 版本始终视为 Major release:
120+
121+
1. **在顶部添加 `🌟 Overview` 总结段落**:AI 根据合并内容生成 2-3 句话概括整个 minor 系列的核心主题和亮点
122+
2. **每个平台添加 `🚀 Features Overview` 要点列表**:从该平台的 Enhancement 条目中提炼 3-5 个关键特性要点
123+
124+
**完成后跳到步骤 14。**
125+
126+
---
127+
128+
### 常规路径(PATCH > 0)
129+
130+
### 步骤 8:收集合并的 PR
69131

70132
**主要数据源** — 获取两个 tag 之间的日期范围,然后用 `gh` CLI 查询合并的 PR:
71133

@@ -91,7 +153,7 @@ git log v<prev-version>..v<version> --format="%H %s" --no-merges
91153

92154
对比 PR 列表和 commit 列表,找出没有关联 PR 的 commit(这些 commit 也应纳入 release notes)。
93155

94-
### 步骤 4:收集关联的 Issue
156+
### 步骤 9:收集关联的 Issue
95157

96158
从每个 PR 的 body 中提取关联的 Issue:
97159
- 匹配模式:`Closes #N``Fixes #N``Resolves #N`(不区分大小写)
@@ -105,7 +167,7 @@ gh issue view <N> --json number,title,labels,url
105167

106168
收集 Issue 详情用于丰富 release notes 的描述。
107169

108-
### 步骤 5:分类 — 按模块分组
170+
### 步骤 10:分类 — 按模块分组
109171

110172
根据以下**优先级**判断每个 PR/commit 所属模块:
111173

@@ -125,7 +187,7 @@ gh issue view <N> --json number,title,labels,url
125187
| `waterflow`, `framework/waterflow/**` | **Waterflow Flow Scheduling Platform** |
126188
| `claude`, `.claude/`, `.ai-agents/`, AI 相关配置 | **🤖 AI Development Configuration** |
127189

128-
### 步骤 6:分类 — 按类型分组
190+
### 步骤 11:分类 — 按类型分组
129191

130192
根据 PR title 的 conventional commit type 分类:
131193

@@ -135,17 +197,17 @@ gh issue view <N> --json number,title,labels,url
135197
| `fix` | ✅ Bugfix |
136198
| `docs` | 📚 Documentation(如果条目少于 3 个,并入 Enhancement) |
137199

138-
### 步骤 7:判断发布级别
200+
### 步骤 12:判断发布级别
139201

140202
根据变更数量和性质判断输出详细程度:
141203

142-
- **Major release**PATCH == 0 或合并 PR > 15 个):
204+
- **Major release**合并 PR > 15 个):
143205
- 生成 `🌟 Overview` 总结段落(2-3 句话概括本次发布的核心主题)
144206
- 每个平台生成 `🚀 Features Overview` 要点列表
145207
- **Regular release**
146208
- 直接列出 Enhancement / Bugfix 条目,不加 Overview
147209

148-
### 步骤 8:生成 Release Notes
210+
### 步骤 13:生成 Release Notes
149211

150212
按照项目已有格式输出 markdown。完整模板:
151213

@@ -194,7 +256,11 @@ gh issue view <N> --json number,title,labels,url
194256
6. **空平台**: 如果某个平台没有任何变更,不输出该平台的章节
195257
7. **多作者**: 如果 PR 有多个 co-author,用 `and` 连接:`by @a and @b`
196258

197-
### 步骤 9:展示并确认
259+
---
260+
261+
### 公共步骤
262+
263+
### 步骤 14:展示并确认
198264

199265
将生成的 release notes **完整输出**给用户查看。
200266

@@ -204,7 +270,7 @@ gh issue view <N> --json number,title,labels,url
204270

205271
如果用户要求调整,根据反馈修改后重新输出。
206272

207-
### 步骤 10:创建 Draft Release
273+
### 步骤 15:创建 Draft Release
208274

209275
用户确认后,将 release notes 写入临时文件,然后创建 Draft Release:
210276

@@ -237,6 +303,7 @@ gh release create v<version> \
237303
3. **Draft 模式**:创建的是草稿 Release,不会自动发布,需要人工审核后在 GitHub 上发布
238304
4. **PR 搜索范围**:基于日期范围搜索,可能包含少量超出范围的 PR,命令会尽力过滤
239305
5. **模块分类准确性**:自动分类基于 title/scope/文件路径推断,复杂 PR 可能需要人工调整
306+
6. **x.y.0 合并路径**:依赖前一 minor 系列的 release 已在 GitHub 上发布(非 Draft),如果没有已发布的 release 则回退到常规路径
240307

241308
## 错误处理
242309

@@ -245,6 +312,7 @@ gh release create v<version> \
245312
- **`gh` CLI 未安装或未认证**:提示安装/认证方法
246313
- **无合并 PR**:提示版本范围内没有找到合并的 PR,建议检查 tag 和分支
247314
- **GitHub API 限流**:提示稍后重试
315+
- **x.y.0 无已发布 release**:提示前一 minor 系列没有已发布的 release,回退到常规路径
248316

249317
## 相关命令
250318

0 commit comments

Comments
 (0)