关于 jackin-release-notes
这项发布说明技能会分类上次发布以来合并的所有 PR,并起草 `CHANGELOG.md` 的 `[Unreleased]` 部分。它也会检查没有对应 PR 的提交,并在发布前提交结果供审核。
主要功能
- 01确定上次发布的边界
- 02收集已合并的 PR
- 03按变更类型分类
- 04记录未归组的提交
- 05起草并展示 `[Unreleased]`
适用场景
- 01准备发布前的变更日志
- 02预览下一版本的发布内容
- 03确认所有已合并 PR 均有记录
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ jackin-project/ jackin-dev --skill jackin-release-notes安装后在 Claude Code 中输入/jackin-release-notes确认已加载。
附带文件agents/openai.yaml
详细介绍
jackin-release-notes
将自上次发布标签以来合并的每个 PR 分类到 Keep a Changelog 的类别中,然后编写 CHANGELOG.md 的 [Unreleased] 部分。要求完整无遗漏——每个已合并的 PR 都必须列出,不能漏掉,也不能重复。
适用场景
- 发布前填充变更日志。
- 操作者要求预览下一个版本将包含哪些内容时。
不适用场景
- 实际执行发布 →
jackin-release(它会在生成发布说明的步骤中运行此技能)。
流程
-
查找边界。
LAST_TAG=$(git describe --tags --abbrev=0);如果没有标签,则从初始提交开始(git rev-list --max-parents=0 HEAD)。TAG_DATE=$(git log -1 --format=%aI "$LAST_TAG")。完成标准:已确定边界提交及其日期。
-
收集合并的 PR。
gh pr list --state merged --base main --search "merged:>$TAG_DATE" --json number,title,labels,mergedAt。完成标准:所有标签之后合并的 PR 均已列出。
-
逐一分类。 按 Conventional Commits 前缀和标签分类:
前缀 / 标签 类别 feat:/feature新增 fix:/bug修复 security:安全 refactor:,chore:,docs:,ci:,build:变更 deprecate:弃用 remove:移除 不匹配 变更(默认) 从标题中去掉前缀;将首词首字母大写(
feat: add TUI launcher→Add TUI launcher)。完成标准:每个 PR 恰好归入一个类别。
-
查找未分组的提交。
git log <last-tag>..HEAD --oneline --no-merges;对每个提交运行gh pr list --state merged --search "<sha>"。没有关联 PR 的提交归入 未分组的提交。完成标准:标签之后的每个非合并提交都已匹配到 PR,或已列出。
-
编写
[Unreleased]。 使用 Keep a Changelog 格式:每个非空类别单独列为一个部分,每条内容都链接到对应 PR([#N](…/pull/N))。替换现有的[Unreleased]区块(从## [Unreleased]到下一个## [之间)——如果操作者已编辑其中的条目,覆盖前先征求同意。保留 `` 标记不变。完成标准:
CHANGELOG.md按正确类别列出了每个已合并的 PR,省略空类别,并保留标记。 -
提交审核。 展示该部分;允许操作者重新分类或修改措辞。获得批准前不要继续发布。
幂等性
可安全重复运行:每次都会重新读取 CHANGELOG.md,覆盖现有条目前会征求同意,并从 GitHub 实时获取 PR 数据。
常见错误
- 漏掉没有 Conventional Commits 前缀的 PR——这类 PR 默认归入 变更,绝不能省略。
- 列出空类别(“没有 移除条目”没有意义——应删掉该部分)。
- 忘记在每条内容中添加 PR 链接。
- 未经询问就覆盖操作者已编辑的
[Unreleased]。