mcpField
G
generate-release-notes

generate-release-notes

github.com/donnfelker开发4763 次安装20 周前更新
代码仓库

关于 generate-release-notes

generate-release-notes 是面向 Claude Code 的技能,可将 Git 历史整理为发布说明或变更日志。它解析 Conventional Commits,按类型和作用域归类,并依据 SemVer 规则建议版本号。

主要功能

  1. 01解析提交并识别重大变更
  2. 02按类型和作用域归类变更
  3. 03依据 SemVer 建议版本号
  4. 04生成发布说明和变更日志

适用场景

  1. 01整理最新标签以来的发布说明
  2. 02向变更日志添加版本条目
  3. 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 解析为结构化的提交数据。接受可选的范围参数。处理常规提交解析、范围提取、破坏性变更检测和页脚解析。

评论

支持 Markdown