name: release-notes description: “为 dist/RELEASE_NOTES.md 生成发布说明。在准备发布或当 hack/release.sh 需要发布说明时使用。”
为 Context CLI 的下一个版本生成发布说明。
开始撰写前
- “自上次标签后是否有新的提交?” 如果 HEAD 等于最新的标签,则无需发布。
- “VERSION 文件中的版本号是否与预期发布版本一致?” 如果 VERSION 仍显示旧版本,请要求用户先更新它。
何时使用
- 在运行
hack/release.sh之前(该脚本需要dist/RELEASE_NOTES.md文件) - 当用户要求准备或起草发布说明时
何时不使用
- 用于撰写关于发布的博客文章(请使用
/ctx-blog-changelog) - 当自上次标签后没有新的提交时
流程
- 读取版本号并确定基线:
cat VERSION
git describe --tags --abbrev=0 2>/dev/null
- 收集自上次标签以来的提交(过滤掉无关信息):
# 实质性提交(跳过 "docs." 和 "minor" 单行提交)
git log <tag>..HEAD --oneline --no-merges \
| grep -v "^[a-f0-9]* docs\.$" \
| grep -v "^[a-f0-9]* Doc update\.$" \
| grep -v "^[a-f0-9]* minor"
# 变更文件统计
git diff --stat <tag>..HEAD | tail -5
# Go 代码变更
git log <tag>..HEAD --oneline --no-merges -- '*.go'
# CI 变更
git log <tag>..HEAD --oneline --no-merges -- '.github/**'
# 依赖项变更
git log <tag>..HEAD --oneline --no-merges -- 'go.mod' 'go.sum'
- 读取每个实质性提交的详细提交信息:
git show <hash> --format="%B" --stat | head -30
- 查看之前的发布说明作为格式参考:
gh release view <tag> --json body -q '.body' | head -60
- 综合撰写发布说明:
- 撰写摘要(2-3 句话),说明此版本实现了什么
- 将变更按逻辑分组
- 撰写易于理解的描述,而非直接复制提交信息
- 突出显示破坏性变更
- 跳过琐碎的变更(拼写错误修复、小的重构)
- 写入
dist/RELEASE_NOTES.md并确认。
输出格式
<img src="https://ctx.ist/images/ctx-banner.png" />
# Context CLI v<版本号>
<摘要段落>
## 亮点
- **加粗标签**: 1-2 句描述
## 新功能
- 功能描述
## 错误修复
- 修复描述
## 重构
- 重构描述(仅在改动显著时列出)
## CI
- CI 变更描述(仅在存在时列出)
## 文档
- 文档变更描述
---
完整更新日志:https://github.com/ActiveMemory/ctx/compare/<上一个标签>...v<版本号>
质量检查清单
- [ ] VERSION 文件中的版本号与标题一致
- [ ] 每个实质性提交都有所体现
- [ ] 仅在有内容时显示对应章节
- [ ] 正文中不包含原始提交哈希值
- [ ] 顶部包含横幅图片
- [ ] 更新日志 URL 使用了正确的标签范围
- [ ] 输出已写入
dist/RELEASE_NOTES.md - [ ] 以 “发布说明已写入 dist/RELEASE_NOTES.md” 结尾
风格
- 主动语态:使用 “添加 X” 而非 “X 被添加”
- 不使用破折号;使用
:、;或重新组织句子 - 仅使用直引号 (
",') - 尽可能每条要点占一行