版本发布自动化Skill release

这个技能用于自动化基于git历史、语义版本和常规提交来更新CHANGELOG.md和版本文件,实现高效的发布流程管理。关键词:自动化发布、版本控制、git、语义版本、常规提交、变更日志、DevOps、软件发布、CI/CD集成。

DevOps 0 次安装 0 次浏览 更新于 3/11/2026

名称: 发布 描述: 使用语义版本和常规提交基于git历史更新变更日志和版本 允许工具: Bash, Read, Edit, Grep, Glob

准备发布

基于git历史、语义版本和常规提交自动更新CHANGELOG.md和版本文件。

指令

1. 阅读发布指南

阅读 RELEASING.md 以获取完整的发布过程和约定。

2. 确定上次发布

# 获取最新的版本标签
git describe --tags --abbrev=0

3. 收集自上次发布以来的提交

# 列出自上次标签以来的所有提交,排除之前版本更新提交
git log $(git describe --tags --abbrev=0)..HEAD --oneline --no-merges --grep="^chore: Bump version" --invert-grep

忽略任何 chore: Bump version to X.Y.Z 提交——这些是之前 /release 运行但尚未标记的产物。

4. 确定版本更新

分析提交类型(排除版本更新提交)以确定正确的版本更新:

  • 任何页脚中的 BREAKING CHANGE 或类型后的 !主版本 更新
  • 任何 feat: 提交 → 次版本 更新
  • 只有 fix:perf: 或其他补丁级别提交 → 补丁 更新

如果没有面向用户的更改(只有 docs:refactor:test:chore:ci:style:),通知用户没有可发布更改,并询问是否继续。

5. 为变更日志分类更改

根据RELEASING.md将提交映射到变更日志部分:

提交类型 变更日志部分 是否包含?
feat: 新增
fix: 修复
BREAKING CHANGE 更改
perf: 更改
build: 更改 仅当面向用户时
docs:
refactor:
test:
chore:
ci:
style:

编写人类可读的变更日志条目:

  • 使用提交主题,但如有需要可重写以提高清晰度
  • 移除提交类型前缀和作用域
  • 以破折号开始每个条目,描述面向用户的更改
  • 在适当时将相关提交分组到单个条目中

6. 更新 CHANGELOG.md

  1. 读取当前 CHANGELOG.md
  2. 检查是否存在已存在的未标记版本部分(一个版本条目在 [Unreleased] 上方,没有对应的git标签)。这发生在之前运行 /release 但尚未创建标签时。
    • 如果存在未标记版本部分:用新确定的版本和条目替换该整个部分(标题、日期和所有条目)。不要创建重复部分。
    • 如果不存在未标记版本部分:在 [Unreleased] 下方添加一个新版本部分,带有今天的日期。
  3. 填充分类的更改(新增、更改、修复、移除、安全——仅包括有条目的部分)
  4. 更新文件底部的比较链接:
    • 更新 [Unreleased] 链接以比较新版本到 HEAD
    • 添加/更新版本比较链接

7. 更新版本文件

更新两个文件中的版本字符串(它们必须匹配):

  • version/version.goVersion 常量
  • cmd/version.goVersion 变量

8. 验证构建

go build -o /tmp/git-flow main.go && /tmp/git-flow version

9. 提交

暂存并提交所有更改:

git add CHANGELOG.md version/version.go cmd/version.go

检查前一个提交是否已经是 chore: Bump version to ... 提交(来自先前的 /release 运行)。如果是,修改该提交而不是创建新提交:

# 如果前一个提交是版本更新:
git commit --amend -m "chore: Bump version to X.Y.Z"

# 否则创建新提交:
git commit -m "chore: Bump version to X.Y.Z"

10. 报告

向用户显示:

  • 前一个版本 → 新版本
  • 变更日志条目的摘要
  • 提醒他们在准备就绪时推送和标记:
    git push origin main
    git tag vX.Y.Z
    git push origin vX.Y.Z