Skip to content

chore: 添加 CHANGELOG 自动生成、发布工作流及预提交检查优化#208

Open
hqwlkj wants to merge 11 commits into
lessweb:mainfrom
hqwlkj:feature/changelog
Open

chore: 添加 CHANGELOG 自动生成、发布工作流及预提交检查优化#208
hqwlkj wants to merge 11 commits into
lessweb:mainfrom
hqwlkj:feature/changelog

Conversation

@hqwlkj

@hqwlkj hqwlkj commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Description

本 PR 为项目引入了一套自动化的 CHANGELOG 生成与发布流程,并优化了预提交检查机制。

变更内容

1. CHANGELOG 自动生成 (scripts/generate-changelog.js)

  • 新增脚本,从 GitHub Releases API 拉取所有稳定版本(vX.Y.Z),自动生成 CHANGELOG.md
  • Keep a Changelog 规范分组(Added / Changed / Fixed / Performance / Documentation / Other)——根据 PR 标题的 conventional commit 前缀(feat: → Added, fix: → Fixed 等)自动归类
  • 自动过滤 chore(release) 类噪音条目,跳过低版本(pre-release / nightly)
  • 支持 --dry-run 输出到 stdout、--repo 指定仓库、--output 指定输出路径
  • 配套 214 行单元测试(scripts/tests/generate-changelog.test.js),覆盖 categorize、parseReleaseEntries、buildChangelog 等纯函数

2. 发布工作流自动化 (.github/workflows/release.yml)

  • 新增 GitHub Actions 工作流:当推送 v* tag 时自动触发
  • 自动创建 GitHub Release(gh release create --generate-notes)
  • 自动生成并提交更新后的 CHANGELOG.md

3. 预提交检查优化

  • .husky/pre-commit:从直接调用 npx lint-staged 改为通过 npm run pre-commit 调用,失败时提供友好提示(含 --no-verify 应急方案)
  • scripts/pre-commit.js:通过 lint-staged API 直接运行,在 git 仓库根目录下执行,仅处理暂存区文件

4. CI 增强 (.github/workflows/ci.yml)

  • 在 test job 中新增 npm run test:scripts 步骤,确保脚本测试在 CI 中执行

5. 新增 npm scripts (package.json)

Script 用途
npm run changelog 执行 scripts/generate-changelog.js 生成 CHANGELOG
npm run test:scripts 运行 scripts/__tests__/*.test.js 测试
npm run pre-commit 运行 scripts/pre-commit.js 预提交检查

文件变更一览

.github/workflows/ci.yml                     |   3 +
.github/workflows/release.yml                |  51 ++++
.husky/pre-commit                             |  10 +-
CHANGELOG.md                                  | 183 ++++++++++++++
package.json                                  |   5 +-
scripts/__tests__/generate-changelog.test.js  | 214 +++++++++++++++++
scripts/generate-changelog.js                 | 314 ++++++++++++++++++++++++
scripts/pre-commit.js                         |  25 +++
8 files changed, 803 insertions(+), 2 deletions(-)

如何验证


   # 1. 脚本单元测试
   npm run test:scripts


   # 2. 预提交检查(修改任意文件后暂存)
   git add <some-file>
   npm run pre-commit

   # 3. CHANGELOG 生成(需要 gh CLI 已认证)
   npm run changelog -- --dry-run   # 预览输出

hqwlkj added 11 commits June 24, 2026 18:17
- 在 package.json 中新增 changelog 脚本命令
- 新增 scripts/generate-changelog.js,自动从GitHub Releases生成CHANGELOG.md
- 脚本支持过滤预发布版本,仅列出稳定版本记录
- 根据PR标题的conventional commit类型分组变更项
- 支持dry-run模式打印输出、指定仓库和输出路径
- 新增单元测试覆盖脚本关键功能函数
- 生成的CHANGELOG.md符合Keep a Changelog规范,便于维护和展示历史版本日志
- 在 GitHub Actions CI 工作流中添加 npm run test:scripts 测试步骤
- 在 package.json 中新增 test:scripts 脚本用于运行脚本相关测试
- 优化 husky 预提交钩子,失败时输出提示信息并阻止提交
- 新增 scripts/pre-commit.js 脚本,利用 lint-staged API 实现更严格的预提交检查
- 预提交检查包含 ESLint 自动修复和 Prettier 格式化,确保代码质量
- 新增 release.yml,用于在推送版本标签时触发发布流程
- 实现代码仓库检出与 Node.js 环境的设置与依赖安装
- 自动创建 GitHub Release 并生成发布说明
- 通过脚本自动生成并更新 CHANGELOG.md 文件
- 实现对 CHANGELOG.md 的自动提交与推送操作
- 设置了必要的权限和环境变量保障流程正常执行
- 在CHANGELOG.md中新增每周、每月发布计划说明
- 修改版本条目格式,添加反引号包裹日期以提高可读性
- 更新生成脚本,调整正则表达式格式匹配以适配新的条目格式
- 优化版本标题和日期分隔逻辑,保证自动生成的一致性
- 修正文件头部注释,明确自动生成及手动编辑注意事项
- 在CHANGELOG.md中新增每周、每月发布计划说明
- 修改版本条目格式,添加反引号包裹日期以提高可读性
- 更新生成脚本,调整正则表达式格式匹配以适配新的条目格式
- 优化版本标题和日期分隔逻辑,保证自动生成的一致性
- 修正文件头部注释,明确自动生成及手动编辑注意事项
- 引入 writeStdoutLine 函数替代重复的 process.stdout.write 调用
- 优化多处命令行输出,提升代码一致性和可维护性
- 修改退出提示、会话渲染及屏幕清理相关逻辑使用新函数
- 防止状态行在退出时显示,提升界面表现稳定性
- 增加正则表达式匹配无PR链接的手动发布条目
- 在生成变更日志时支持无PR链接条目格式
- 为无PR链接条目生成无超链接的列表项文本
- 添加对应单元测试覆盖无PR链接条目解析与格式化
- 优化生成的变更日志内容兼容性与灵活性
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant