关于 generate-release-notes
generate-release-notes 是面向 Claude Code 的技能,可将 Git 历史整理为发布说明或变更日志。它解析 Conventional Commits,按类型和作用域归类,并依据 SemVer 规则建议版本号。
主要功能
- 01解析提交并识别重大变更
- 02按类型和作用域归类变更
- 03依据 SemVer 建议版本号
- 04生成发布说明和变更日志
适用场景
- 01整理最新标签以来的发布说明
- 02向变更日志添加版本条目
- 03查看自定义提交范围内的变更
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ donnfelker/ donnfelker-plugin-marketplace --skill generate-release-notes安装后在 Claude Code 中输入/generate-release-notes确认已加载。
附带文件references/formats.mdscripts/parse-commits.sh
详细介绍
发布说明生成器
通过解析 git log 历史记录中的 Conventional Commit 消息,生成发布说明和变更日志。遵循 Conventional Commits 规范(feat:、fix:、docs: 等)的提交会经过分类、分组,并整理为专业的 Markdown 输出。
工作流
步骤 1:确定输出类型
询问用户需要什么:
- 发布说明 — 将单个版本摘要写入
RELEASE_NOTES.md - 变更日志 — 追加到现有的
CHANGELOG.md(或创建该文件) - 两者 — 生成两个文件
步骤 2:确定提交范围
确定要包含哪些提交。有两种方式:
从上一个标签开始(默认):
如果未提供范围,解析脚本会自动检测最新标签,并使用 <tag>..HEAD。若要在生成前与用户确认范围,请运行 git describe --tags --abbrev=0,显示最新标签。
自定义范围:
接受用户指定的范围,例如 v1.0.0..v2.0.0 或 v1.0.0..HEAD,并将其作为第一个参数传递给解析脚本。
如果不存在标签,请询问用户要使用的范围,或默认使用所有提交(脚本会自动处理)。
步骤 3:解析提交
运行解析脚本,提取结构化的提交数据。安装插件时,Claude Code 会自动设置 ${CLAUDE_PLUGIN_ROOT} 变量:
bash ${CLAUDE_PLUGIN_ROOT}/skills/generate-release-notes/scripts/parse-commits.sh [<range>]
脚本会为每个提交输出一个代码块,包含以下字段:COMMIT、TYPE、SCOPE、BREAKING、DESCRIPTION、BODY、FOOTERS。
步骤 4:分类和格式化
根据以下映射,按类型将解析后的提交分组到各个章节中:
| 类型 | 章节标题 |
|---|---|
| feat | 功能 |
| fix | 错误修复 |
| perf | 性能改进 |
| refactor | 代码重构 |
| docs | 文档 |
| style | 样式 |
| test | 测试 |
| build | 构建系统 |
| ci | 持续集成 |
| chore | 维护 |
| revert | 回退 |
排序: 按上表所示的顺序列出章节。在每个章节中,按 scope 的字母顺序列出条目(未分组的条目放在最后)。
破坏性变更: 将所有 BREAKING:yes 的提交收集到顶部的专属“BREAKING CHANGES”章节中,无论其类型如何。这些提交也会出现在对应的常规类型章节中。
按 scope 分组: 多个提交具有相同 scope 时,将它们归到一个加粗的 scope 标签下。
类型为 "other" 的提交: 将其收集到最底部的“其他变更”章节中。这些提交不遵循 Conventional Commits 格式。
步骤 5:确定版本
如果用户提供了版本号,请使用该版本号。否则,根据 SemVer 规则建议一个版本:
- 存在任何
BREAKING:yes提交 → 建议 MAJOR 版本升级 - 存在任何
feat提交 → 建议 MINOR 版本升级 - 只有
fix、docs、style等提交 → 建议 PATCH 版本升级
读取最新标签以确定当前版本,并计算下一个版本。向用户展示建议,并让用户确认或修改。
步骤 6:写入输出
发布说明 → 写入 RELEASE_NOTES.md(覆盖之前的内容)。
变更日志 → 将新版本条目添加到 CHANGELOG.md 顶部。如果该文件不存在,则创建文件并添加标题。保留新条目下方的所有现有条目。
请参阅 references/formats.md,了解准确的输出模板。
步骤 7:摘要
写入后,显示:
- 使用的版本号
- 处理的提交数量
- 按类别划分的统计(例如,“3 个功能、2 个错误修复、1 个破坏性变更”)
- 写入的文件
边缘情况处理
未找到 Conventional Commit: 警告用户未找到可解析的提交。可以选择改为列出原始提交消息。
混合了 Conventional Commit 和非 Conventional Commit: 正常处理 Conventional Commit,并将非 Conventional Commit 列在“其他变更”下。
范围为空: 如果范围内没有提交,请告知用户,并建议检查范围是否正确。
具有 scope 的 Monorepo: 当 scope 对应软件包或模块时,可提出按 scope 而非按类型分组,将 scope 作为顶级章节。
其他资源
参考文件
如需了解详细的输出格式模板和示例,请参阅:
references/formats.md— 发布说明和变更日志的完整输出模板,包含各类章节的示例
脚本
scripts/parse-commits.sh— 将 git log 解析为结构化的提交数据。接受可选的范围参数。处理常规提交解析、范围提取、破坏性变更检测和页脚解析。