@@ -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
1942566 . ** 空平台** : 如果某个平台没有任何变更,不输出该平台的章节
1952577 . ** 多作者** : 如果 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> \
2373033 . ** Draft 模式** :创建的是草稿 Release,不会自动发布,需要人工审核后在 GitHub 上发布
2383044 . ** PR 搜索范围** :基于日期范围搜索,可能包含少量超出范围的 PR,命令会尽力过滤
2393055 . ** 模块分类准确性** :自动分类基于 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