$npx -y skills add echoVic/boss-skill --skill changelog-generation自动生成 CHANGELOG,基于 git 提交历史和 pipeline 产物信息,遵循 Conventional Commits 和 Keep a Changelog 规范
| 1 | # CHANGELOG 自动生成 |
| 2 | |
| 3 | ## 适用场景 |
| 4 | |
| 5 | 在部署成功完成后自动生成或追加 CHANGELOG,记录本次发布的所有变更。适用于: |
| 6 | - 部署完成后的发布记录 |
| 7 | - 版本发布前的变更汇总 |
| 8 | - 对外发布说明的自动生成 |
| 9 | |
| 10 | ## 核心方法 |
| 11 | |
| 12 | ### 步骤 1:信息收集 |
| 13 | |
| 14 | 1. **Git 历史解析**: |
| 15 | ```bash |
| 16 | # 获取从上次 tag 到 HEAD 的所有提交 |
| 17 | git log $(git describe --tags --abbrev=0 2>/dev/null || git rev-list --max-parents=0 HEAD)..HEAD --pretty=format:"%H|%s|%an|%ai" |
| 18 | ``` |
| 19 | - 如果没有 tag,取最近 50 条提交 |
| 20 | - 解析 Conventional Commits 格式:`type(scope): description` |
| 21 | |
| 22 | 2. **Pipeline 产物读取**: |
| 23 | - `.boss/<feature>/prd.md` → 功能描述和用户价值 |
| 24 | - `.boss/<feature>/deploy-report.md` → 部署环境和版本信息 |
| 25 | - `.boss/<feature>/tasks.md` → 完成的任务列表 |
| 26 | |
| 27 | 3. **版本号确定**: |
| 28 | - 优先使用 `package.json` 中的 version |
| 29 | - 其次使用最新 git tag |
| 30 | - 如无法确定,使用日期格式 `YYYY.MM.DD` |
| 31 | |
| 32 | ### 步骤 2:变更分类 |
| 33 | |
| 34 | 按 Conventional Commits 规范分类: |
| 35 | |
| 36 | | 类型 | CHANGELOG 分类 | 说明 | |
| 37 | |------|---------------|------| |
| 38 | | `feat` | **Added** | 新增功能 | |
| 39 | | `fix` | **Fixed** | 修复问题 | |
| 40 | | `perf` | **Performance** | 性能优化 | |
| 41 | | `refactor` | **Changed** | 重构(非功能变更) | |
| 42 | | `docs` | **Documentation** | 文档更新 | |
| 43 | | `style` | _(不记录)_ | 代码格式 | |
| 44 | | `test` | _(不记录)_ | 测试相关 | |
| 45 | | `chore` | _(不记录)_ | 构建/工具变更 | |
| 46 | | `BREAKING CHANGE` | **⚠️ Breaking Changes** | 破坏性变更(始终置顶) | |
| 47 | |
| 48 | 对于非 Conventional Commits 格式的提交: |
| 49 | - 根据关键词推断分类(add/new → Added, fix/bug → Fixed, update/change → Changed) |
| 50 | - 无法分类的归入 **Changed** |
| 51 | |
| 52 | ### 步骤 3:内容生成 |
| 53 | |
| 54 | #### 格式规范(Keep a Changelog) |
| 55 | |
| 56 | ```markdown |
| 57 | ## [版本号] - YYYY-MM-DD |
| 58 | |
| 59 | ### ⚠️ Breaking Changes |
| 60 | - 破坏性变更描述 ([commit-hash]) |
| 61 | |
| 62 | ### Added |
| 63 | - 新功能描述(来自 PRD 的用户价值说明) ([commit-hash]) |
| 64 | |
| 65 | ### Changed |
| 66 | - 变更描述 ([commit-hash]) |
| 67 | |
| 68 | ### Fixed |
| 69 | - 修复描述 ([commit-hash]) |
| 70 | |
| 71 | ### Performance |
| 72 | - 优化描述 ([commit-hash]) |
| 73 | ``` |
| 74 | |
| 75 | #### 生成规则 |
| 76 | |
| 77 | 1. 每条记录包含:清晰描述 + commit short hash 引用 |
| 78 | 2. 如有 PRD,用 PRD 中的功能描述替代 commit message(更面向用户) |
| 79 | 3. Breaking Changes 始终置顶并用 ⚠️ 标记 |
| 80 | 4. 同一 scope 的多条提交合并为一条记录 |
| 81 | 5. 最多展示 20 条变更,超出部分汇总为 "及其他 N 项更新" |
| 82 | |
| 83 | ### 步骤 4:输出写入 |
| 84 | |
| 85 | **两种输出模式:** |
| 86 | |
| 87 | 1. **产物模式**(默认):写入 `.boss/<feature>/changelog.md` |
| 88 | 2. **追加模式**:如项目根目录已有 `CHANGELOG.md`,将新版本内容追加到文件顶部(在 `# Changelog` 标题之后) |
| 89 | |
| 90 | **追加逻辑:** |
| 91 | ``` |
| 92 | 读取现有 CHANGELOG.md |
| 93 | → 找到第一个 ## [version] 行 |
| 94 | → 在其前面插入新版本内容 |
| 95 | → 写回文件 |
| 96 | ``` |
| 97 | |
| 98 | 如果项目无 `CHANGELOG.md`,则创建包含标准头部的新文件: |
| 99 | ```markdown |
| 100 | # Changelog |
| 101 | |
| 102 | All notable changes to this project will be documented in this file. |
| 103 | |
| 104 | The format is based on [Keep a Changelog](https://keepachangelog.com/). |
| 105 | |
| 106 | ## [版本号] - 日期 |
| 107 | ... |
| 108 | ``` |
| 109 | |
| 110 | ## 输出要求 |
| 111 | |
| 112 | 1. 产物文件 `.boss/<feature>/changelog.md` 必须生成 |
| 113 | 2. 如项目根存在 `CHANGELOG.md`,同步更新 |
| 114 | 3. 变更内容必须准确反映实际代码变更 |
| 115 | 4. 面向用户的描述优先于面向开发者的 commit message |