mcpField
C
changelog-generator

changelog-generator

github.com/decebals开发767245 次安装6 天前更新
代码仓库

关于 changelog-generator

为 Java 项目根据 Conventional Commits 生成变更日志的 Skill。它会识别版本规则和现有日志格式,并归类变更、建议版本升级。

主要功能

  1. 01从项目文件和标签识别版本规则
  2. 02读取现有变更日志格式
  3. 03按类别整理提交
  4. 04添加问题和版本比较链接
  5. 05建议版本升级

适用场景

  1. 01发布前准备变更日志
  2. 02查看指定标签后的变更
  3. 03为特定问题添加日志条目

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/decebals/claude-code-java --skill changelog-generator

安装后在 Claude Code 中输入/changelog-generator确认已加载。

附带文件README.md

详细介绍

变更日志生成器技能

根据 Java 项目的约定式提交生成变更日志。

使用时机

  • 发布前
  • 用户说“生成变更日志”/“更新变更日志”/“上次发布后有哪些变化”
  • 完成一个里程碑后

版本规范检测

按以下优先顺序检测版本规范:

1. 检查 CLAUDE.md(如果存在)
grep -A5 "## Versioning" CLAUDE.md 2>/dev/null

查找明确的规范:

## Versioning
This project uses Semantic Versioning (x.y.z).
Tag format: `release-x.y.z`
2. 回退:从 git 标签检测
git tag --sort=-version:refname | head -10
检测到的模式版本规范
v3.15.0、3.15.0SemVer(x.y.z)
release-3.15.0带前缀的 SemVer
v2.1、2.1两段式(x.y)
2026.01、26.1CalVer
无匹配模式询问用户
3. 回退:从 CHANGELOG.md 检测
grep -E "^\#+ \[.*\]" CHANGELOG.md | head -5

从现有条目中提取版本格式。

4. 最后手段:询问用户
No versioning convention detected. Which format does this project use?
- Semantic Versioning (x.y.z) - e.g., 3.15.0
- Two-component (x.y) - e.g., 2.1
- Calendar Versioning - e.g., 2026.01
支持的版本规范
规范格式标签示例版本递增
SemVerx.y.zv3.15.0、release-3.15.0major.minor.patch
两段式x.yv2.1、2.1major.minor
CalVerYYYY.MM[.patch]2026.01、2026.01.1year.month[.patch]
旧版项目(CLAUDE.md 中没有版本规范部分)

如果 CLAUDE.md 存在,但没有版本信息:

  1. 不要自行假设——从标签/变更日志中检测
  2. 如果检测到版本规范,可以建议将其添加到 CLAUDE.md:
    Detected versioning: SemVer (x.y.z) with tag prefix 'release-'
    Want me to add this to CLAUDE.md for future reference?
    

输出格式

支持两种格式——根据现有 CHANGELOG.md 检测,或询问用户偏好。

格式 A:Keep a Changelog(版本使用 h2 标题)
# Changelog

## [Unreleased]

## [1.2.0] - 2026-01-29

### Added
- [#123]: New feature for plugin dependencies

### Changed
- [#456]: Improved performance of plugin loading

### Fixed
- [#234]: Resolved NPE when directory missing
格式 B:pf4j 风格(版本使用 h3 标题)
## Change Log

### [Unreleased][unreleased]

### [3.15.0] - 2026-01-29

#### Added
- [#123]: New feature for plugin dependencies

#### Changed
- [#456]: Improved performance of plugin loading

#### Fixed
- [#234]: Resolved NPE when directory missing

引用式链接(推荐)

使用引用式链接,让条目更简洁易读:

#### Fixed
- [#648]: Restore missing `module-info.class` in multi-release JAR
- [#625]: Fix exception handling inconsistency in `startPlugin()`

#### Added
- [#629]: Validate dependency state on plugin start
- [#633]: Allow customization of `PluginClassLoader` parent delegation


[#648]: https://github.com/user/repo/issues/648
[#633]: https://github.com/user/repo/pull/633
[#629]: https://github.com/user/repo/pull/629
[#625]: https://github.com/user/repo/pull/625

优点:

  • 更易阅读(行内不包含冗长的 URL)
  • 链接只需定义一次,可重复使用
  • 更易编写和维护

版本比较链接

在底部添加比较链接,方便查看差异:

[unreleased]: https://github.com/user/repo/compare/release-3.15.0...HEAD
[3.15.0]: https://github.com/user/repo/compare/release-3.14.1...release-3.15.0
[3.14.1]: https://github.com/user/repo/compare/release-3.14.0...release-3.14.1

模式: [version]: https://github.com/{owner}/{repo}/compare/{previous-tag}...{current-tag}

章节顺序

根据现有文件调整,或使用以下默认顺序:

章节适用情形
Fixed错误修复
Changed对现有功能的更改
Added新功能
Deprecated即将移除的功能
Removed已移除的功能
Security漏洞修复(CVE)

注意:pf4j 使用 Fixed → Changed → Added → Removed。Keep a Changelog 使用 Added → Changed → Deprecated → Removed → Fixed → Security。

规则:如果现有文件中有顺序,则遵循该顺序。

将约定式提交映射到变更日志

提交类型变更日志章节
featAdded
fixFixed
perfChanged
refactorChanged
build(deps)Changed 或 Security(如果涉及 CVE)
BREAKING CHANGEChanged(附加粗体说明)
deprecateDeprecated

工作流

  1. 检查是否已有 CHANGELOG.md

    cat CHANGELOG.md | head -20
    

    检测格式(版本使用 h2 还是 h3、章节顺序、链接样式)。

  2. 确定版本范围

    # Find last tag
    git describe --tags --abbrev=0
    
    # List recent tags
    git tag --sort=-version:refname | head -5
    
  3. 获取自上次发布以来的提交

    git log v3.14.1..HEAD --oneline
    
  4. 提取问题/PR 引用 查找以下模式:#123、fixes #123、closes #123、(#123)

  5. 生成变更日志条目

    • 按章节分组
    • 使用引用式链接
    • 添加版本比较链接
  6. 建议版本递增(根据检测到的版本规范)

    SemVer(x.y.z):

    • BREAKING CHANGE → Major(3.0.0 → 4.0.0)
    • feat → Minor(3.14.0 → 3.15.0)
    • 只有 fix → Patch(3.14.0 → 3.14.1)

    两段式(x.y):

    • BREAKING CHANGE → Major(2.0 → 3.0)
    • feat/fix → Minor(2.1 → 2.2)

    CalVer(YYYY.MM):

    • 新月份 → 2026.01 → 2026.02
    • 同月新发布 → 2026.01 → 2026.01.1

Token 优化

  • 初步扫描使用 git log --oneline
  • 只有怀疑存在 BREAKING CHANGE 时才获取完整提交内容
  • 复用文件中现有的链接定义
  • 不要重新读取整个变更日志——只需在前面添加新章节

示例:完整工作流

输入: 用户说“为下一个版本生成变更日志”

步骤 1: 检查现有格式

head -30 CHANGELOG.md

→ 检测到 pf4j 风格(h3 版本标题,Fixed 排在首位)

步骤 2: 查找版本范围

git describe --tags --abbrev=0

→ release-3.15.0

步骤 3: 获取提交

git log release-3.15.0..HEAD --oneline

→ 找到 5 个提交

步骤 4: 生成条目

### [Unreleased][unreleased]

#### Fixed
- [#650]: Fix memory leak in extension factory

#### Changed
- [#651]: Rename `LegacyExtension*` to `IndexedExtension*`

#### Added
- [#652]: Add support for plugin priority ordering

步骤 5: 生成链接定义

[#652]: https://github.com/pf4j/pf4j/pull/652
[#651]: https://github.com/pf4j/pf4j/pull/651
[#650]: https://github.com/pf4j/pf4j/issues/650

步骤 6: 更新版本比较链接

[unreleased]: https://github.com/pf4j/pf4j/compare/release-3.15.0...HEAD

步骤 7: 建议版本

Suggested: 3.16.0 (minor - has new feature)

处理边缘情况

没有规范提交

使用原始消息列在“Changed”下:

#### Changed
- Updated plugin loading mechanism
- Refactored test utilities
安全修复
#### Security
- [#618], [#623]: Fix path traversal vulnerabilities in ZIP extraction
破坏性变更
#### Changed
- **BREAKING**: [#645] Renamed `LegacyExtension*` classes to `IndexedExtension*`
同一修复对应多个问题
- [#630], [#631]: Set `failedException` when plugin validation fails

与现有 CHANGELOG.md 集成

  1. 读取现有文件以检测:

    • 标题级别(版本使用 ## 或 ###)
    • 章节顺序
    • 链接样式(引用式或内联式)
    • 现有链接定义
  2. 在 [Unreleased] 章节后插入新版本

  3. 合并链接定义——添加新的,保留现有的

  4. 更新 [unreleased] 比较链接,使其指向新版本

快速参考

用户说操作
“generate changelog”自上一个标签以来的完整变更日志
“changelog since v3.14”从指定版本开始
“what's unreleased”预览未发布的变更
“update changelog for 3.16”为指定版本生成并插入变更日志
“add changelog entry for #123”单个问题条目

评论

支持 Markdown