mcpField
C
changelog-generator

changelog-generator

github.com/alirezarezvani开发29.1k625 次安装1 天前更新
代码仓库

关于 changelog-generator

面向发布管理的 Skill,可将 Conventional Commits 转为可审阅的更新日志。它分别处理提交解析、版本升级建议和内容渲染,并提供提交检查与适用于 CI 的 JSON 输出。

主要功能

  1. 01解析 Conventional Commits
  2. 02推荐 SemVer 升级类型
  3. 03生成 Keep a Changelog 条目
  4. 04从 Git 范围或输入生成
  5. 05检查提交消息格式
  6. 06为 CI 工作流输出 JSON

适用场景

  1. 01发布打标签前起草说明
  2. 02在 CI 中生成更新日志草稿
  3. 03在 PR 检查中拦截无效提交
  4. 04在 Monorepo 中筛选包变更

安装

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

$npx skills add https://github.com/alirezarezvani/claude-skills --skill changelog-generator

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

README.md
assets/
sample_git_log.txt
references/
changelog-formatting-guide.md
ci-integration.md
hotfix-procedures.md
monorepo-strategy.md
scripts/
commit_linter.py
generate_changelog.py
version_bumper.py

详细介绍

Changelog Generator

Tier: POWERFUL
Category: Engineering
Domain: Release Management / Documentation

Overview

使用此 Skill 可根据 Conventional Commits 生成一致且可审计的发布说明。它将提交解析、语义化版本升级逻辑与变更日志渲染分离,使团队能够自动化发布,同时保留编辑控制权。

Core Capabilities

  • 依据 Conventional Commit 规则解析提交信息
  • 从提交流中检测语义化版本升级类型(major、minor、patch)
  • 渲染 Keep a Changelog 分节(Added、Changed、Fixed 等)
  • 从 git 区间或提供的提交输入生成发布条目
  • 通过专用的 linter 脚本强制提交格式
  • 支持以机器可读的 JSON 输出进行 CI 集成

When to Use

  • 发布版本标签之前
  • 在 CI 中自动生成发布说明时
  • 在 PR 检查中阻止格式无效的提交信息时
  • 在单体仓库中,包的变更日志需要按范围过滤时
  • 将原始 git 历史转换为面向用户的说明时

Key Workflows

1. Generate Changelog Entry From Git
python3 scripts/generate_changelog.py \
  --from-tag v1.3.0 \
  --to-tag v1.4.0 \
  --next-version v1.4.0 \
  --format markdown
2. Generate Entry From stdin/File Input
git log v1.3.0..v1.4.0 --pretty=format:'%s' | \
  python3 scripts/generate_changelog.py --next-version v1.4.0 --format markdown

python3 scripts/generate_changelog.py --input commits.txt --next-version v1.4.0 --format json
3. Update CHANGELOG.md
python3 scripts/generate_changelog.py \
  --from-tag v1.3.0 \
  --to-tag HEAD \
  --next-version v1.4.0 \
  --write CHANGELOG.md
4. Compute the Next Version From Commits

当用户尚未确定下一个版本时,应据提交推导,而不是凭猜测:

git log v1.3.0..HEAD --oneline | \
  python3 scripts/version_bumper.py --current-version 1.3.0 --output-format json

输出的 JSON 包含 recommended_version、bump_type(major/minor/patch/none),以及在使用 --include-commands 时输出的确切 git tag 命令。将 recommended_version 传入 generate_changelog.py --next-version。预发布版本:添加 --prerelease alpha|beta|rc。输入必须是真实的 git log --oneline 输出(十六进制哈希);示例文件位于 assets/sample_git_log.txt。

5. Lint Commits Before Merge
python3 scripts/commit_linter.py --from-ref origin/main --to-ref HEAD --strict --format text

或使用文件/stdin:

python3 scripts/commit_linter.py --input commits.txt --strict
cat commits.txt | python3 scripts/commit_linter.py --format json

Conventional Commit Rules

支持的类型:

  • feat、fix、perf、refactor、docs、test、build、ci、chore
  • security、deprecated、remove

破坏性变更:

  • type(scope)!: summary
  • 页脚或正文包含 BREAKING CHANGE:

SemVer 映射:

  • 破坏性变更 -> major
  • 非破坏性的 feat -> minor
  • 其他全部 -> patch

Script Interfaces

  • python3 scripts/generate_changelog.py --help
    • 从 git 或 stdin/--input 读取提交
    • 渲染 Markdown 或 JSON
    • 可选地原地前置写入变更日志
  • python3 scripts/commit_linter.py --help
    • 校验提交格式
    • 在 --strict 模式下出现违规时返回非零退出码

Common Pitfalls

  1. 将合并提交信息与发布提交解析混在一起
  2. 使用无法转化为发布说明的模糊提交摘要
  3. 未为破坏性变更提供迁移指引
  4. 将 docs/chore 变更视为面向用户的功能
  5. 覆盖历史变更日志章节,而不是前置追加

Best Practices

  1. 保持提交小而意图明确。
  2. 在多包仓库中为提交信息添加范围(feat(api): ...)。
  3. 在 PR 流水线中强制执行 linter 检查。
  4. 发布前审阅生成的 Markdown。
  5. 仅在变更日志生成成功后才打发布标签。
  6. 需要时保留一个 [Unreleased] 分节,用于人工整理。

Hotfix Severity & SLAs

发布出现问题时,先进行分级再行动(完整流程见 references/hotfix-procedures.md):

SeverityDefinitionSLAApproval
P0 — CriticalOutage, data loss, exploited vulnerabilityFix deployed ≤ 2h; emergency deploy bypasses normal gatesEngineering Lead + On-call Manager
P1 — HighMajor feature broken, significant user impactFix deployed ≤ 24h; expedited reviewEngineering Lead + Product Manager
P2 — MediumMinor issues, limited impactNext release cycleStandard PR review

Hotfix 分支从最近一次稳定标签切出,仅包含最小修复,并通过上述流程生成其自身的 patch 版本变更日志条目。

回滚触发条件

在打标签之前就预先确定以下阈值;任一条件触发时即回滚:

触发条件阈值
错误率激增30 分钟内超过基线的 2 倍
性能下降延迟增加超过 50%
功能故障核心功能失效
安全事件漏洞正在被利用
数据损坏数据库完整性受损

优先通过功能开关关闭功能,而不是回滚代码;仅对非破坏性迁移执行数据库回滚(优先采用仅向前的迁移)。参见 references/hotfix-procedures.md。

参考资料

发布治理

为保证发布的可预测性,请遵循以下发布流程:

  1. 检查目标发布范围内的提交历史是否合规。
  2. 根据提交记录生成变更日志草稿。
  3. 手动调整措辞,确保对客户清晰易懂。
  4. 验证语义化版本(semver)升级建议。
  5. 仅在变更日志获得批准后才打发布标签。

输出质量检查

  • 每条要点都应对用户有意义,而非实现层面的噪音。
  • 破坏性变更必须附带迁移操作说明。
  • 安全修复应单独放在 Security 节中。
  • 没有条目的节应省略。
  • 删除跨节重复的要点。

CI 策略

  • 对所有 PR 运行 commit_linter.py --strict。
  • 对不符合 Conventional Commits 规范的提交阻止合并。
  • 推送标签时自动生成发布说明草稿。
  • 在主分支上写入 CHANGELOG.md 前,需要人工审批。

Monorepo 指南

  • 优先使提交的 scope 与包名保持一致。
  • 发布特定包时,按 scope 过滤提交记录。
  • 全局基础设施相关的变更保留在根目录的变更日志中。
  • 将各包的变更日志存放在包根目录附近,以明确归属。

失败处理

  • 若未找到有效的 Conventional Commits 提交:尽早失败,不生成误导性的空白说明。
  • 若 git 范围无效:在错误输出中明确显示该范围。
  • 若写入目标缺失:创建安全的变更日志头部脚手架。

评论

支持 Markdown