chore(husky): 重组changelog脚本并完善文档
- 移动 update-changelog.sh 到 scripts/changelog/ 目录 - 新增 .husky/README.md Git hooks 完整文档 - 更新 scripts/changelog/README.md 添加自动更新说明 - 更新 .husky/post-commit 脚本路径引用 - 同步更新 docs/CHANGELOG.md 路径引用
Showing
5 changed files
with
231 additions
and
2 deletions
.husky/README.md
0 → 100644
| 1 | +# Git Hooks 文档 | ||
| 2 | + | ||
| 3 | +## 📋 概述 | ||
| 4 | + | ||
| 5 | +本项目使用 [Husky](https://typicode.github.io/husky/) 管理 Git hooks,实现代码质量检查和自动化 CHANGELOG 更新。 | ||
| 6 | + | ||
| 7 | +## 🔧 可用的 Hooks | ||
| 8 | + | ||
| 9 | +### 1. commit-msg - Commit Message 格式验证 | ||
| 10 | + | ||
| 11 | +**文件**:`.husky/commit-msg` | ||
| 12 | + | ||
| 13 | +**功能**:验证 commit message 是否符合 Conventional Commits 格式规范。 | ||
| 14 | + | ||
| 15 | +**格式要求**: | ||
| 16 | +``` | ||
| 17 | +<type>(<scope>): <subject> | ||
| 18 | +``` | ||
| 19 | + | ||
| 20 | +**允许的类型**: | ||
| 21 | +- `feat` - 新功能 | ||
| 22 | +- `fix` - Bug 修复 | ||
| 23 | +- `docs` - 文档更新 | ||
| 24 | +- `style` - 代码格式(不影响功能) | ||
| 25 | +- `refactor` - 重构(不是新功能也不是修复) | ||
| 26 | +- `perf` - 性能优化 | ||
| 27 | +- `test` - 测试相关 | ||
| 28 | +- `chore` - 构建/工具链相关 | ||
| 29 | +- `revert` - 回滚提交 | ||
| 30 | + | ||
| 31 | +**允许的范围**: | ||
| 32 | +- `material` - 资料/文档模块 | ||
| 33 | +- `product` - 产品模块 | ||
| 34 | +- `plan` - 计划书模块 | ||
| 35 | +- `user` - 用户模块 | ||
| 36 | +- `auth` - 认证模块 | ||
| 37 | +- `api` - API 接口 | ||
| 38 | +- `ui` - UI 组件 | ||
| 39 | +- `config` - 配置文件 | ||
| 40 | +- `build` - 构建相关 | ||
| 41 | +- `ci` - CI/CD 相关 | ||
| 42 | +- `release` - 发布相关 | ||
| 43 | +- `husky` - Git Hooks 相关 | ||
| 44 | +- `chore` - 其他杂项 | ||
| 45 | +- `to-parse` - 文档解析相关 | ||
| 46 | + | ||
| 47 | +**主题要求**: | ||
| 48 | +- 简短描述(不超过 50 字符) | ||
| 49 | +- 使用中文 | ||
| 50 | +- 不以句号结尾 | ||
| 51 | +- 使用祈使句(如 "添加" 而非 "添加了") | ||
| 52 | + | ||
| 53 | +**示例**: | ||
| 54 | +``` | ||
| 55 | +feat(material): 添加文档列表分类导航 | ||
| 56 | + | ||
| 57 | +fix(auth): 修复登录状态判断问题 | ||
| 58 | + | ||
| 59 | +docs(readme): 更新项目说明文档 | ||
| 60 | +``` | ||
| 61 | + | ||
| 62 | +--- | ||
| 63 | + | ||
| 64 | +### 2. post-commit - 提交后自动化 | ||
| 65 | + | ||
| 66 | +**文件**:`.husky/post-commit` | ||
| 67 | + | ||
| 68 | +**功能**: | ||
| 69 | +1. 显示提交成功信息和改动统计 | ||
| 70 | +2. **自动更新 CHANGELOG.md**(通过 `scripts/changelog/update-changelog.sh`) | ||
| 71 | +3. 创建补充提交(如果 CHANGELOG 有变更) | ||
| 72 | + | ||
| 73 | +**工作流程**: | ||
| 74 | +``` | ||
| 75 | +git commit | ||
| 76 | + ↓ | ||
| 77 | +[pre-commit hook] 代码质量检查 | ||
| 78 | + ↓ | ||
| 79 | +[commit-msg hook] 验证 commit message 格式 | ||
| 80 | + ↓ | ||
| 81 | +[post-commit hook] ✅ 执行 | ||
| 82 | + ├─ 显示提交信息 | ||
| 83 | + ├─ 自动更新 CHANGELOG | ||
| 84 | + └─ 如有变更,创建补充提交 | ||
| 85 | +``` | ||
| 86 | + | ||
| 87 | +**CHANGELOG 自动更新流程**: | ||
| 88 | +1. 解析最新的 commit message | ||
| 89 | +2. 生成对应的 CHANGELOG 条目 | ||
| 90 | +3. 插入到 `docs/CHANGELOG.md` 开头 | ||
| 91 | +4. 如果 CHANGELOG 有变更: | ||
| 92 | + - 暂存 CHANGELOG 文件 | ||
| 93 | + - 创建补充提交:`docs(changelog): 更新 CHANGELOG - <原始提交主题>` | ||
| 94 | + - 补充提交使用 `--no-verify` 跳过 hooks,避免循环 | ||
| 95 | + | ||
| 96 | +**输出示例**: | ||
| 97 | +``` | ||
| 98 | +✅ 提交成功! | ||
| 99 | + | ||
| 100 | +📝 提交信息: | ||
| 101 | + Hash: a6618ea | ||
| 102 | + Author: huyirui | ||
| 103 | + Date: 2026-02-22 15:30:45 | ||
| 104 | + Msg: fix(husky): 修复 CHANGELOG 自动更新功能 | ||
| 105 | + | ||
| 106 | +📊 改动统计: | ||
| 107 | + 文件数: 3 | ||
| 108 | + 新增行数: +45 | ||
| 109 | + 删除行数: -12 | ||
| 110 | + | ||
| 111 | +📝 更新 CHANGELOG.md... | ||
| 112 | + ✅ CHANGELOG.md 已自动更新 | ||
| 113 | + 类型: 修复 | ||
| 114 | + 范围: husky | ||
| 115 | + 描述: 修复 CHANGELOG 自动更新功能 | ||
| 116 | + | ||
| 117 | + ✅ CHANGELOG 补充提交已创建 | ||
| 118 | +``` | ||
| 119 | + | ||
| 120 | +--- | ||
| 121 | + | ||
| 122 | +## ⚙️ 配置说明 | ||
| 123 | + | ||
| 124 | +### 安装 | ||
| 125 | + | ||
| 126 | +```bash | ||
| 127 | +# Husky 已自动配置 | ||
| 128 | +# Hooks 位于 .husky/ 目录 | ||
| 129 | + | ||
| 130 | +# 确保 hooks 可执行 | ||
| 131 | +chmod +x .husky/* | ||
| 132 | +``` | ||
| 133 | + | ||
| 134 | +### 自定义 | ||
| 135 | + | ||
| 136 | +如需修改 hook 行为,直接编辑 `.husky/` 目录下的脚本文件。 | ||
| 137 | + | ||
| 138 | +--- | ||
| 139 | + | ||
| 140 | +## 📝 Commit Message 最佳实践 | ||
| 141 | + | ||
| 142 | +### ✅ 推荐格式 | ||
| 143 | + | ||
| 144 | +``` | ||
| 145 | +feat(module): 简短描述 | ||
| 146 | + | ||
| 147 | +- 具体变更点 1 | ||
| 148 | +- 具体变更点 2 | ||
| 149 | +- 具体变更点 3 | ||
| 150 | + | ||
| 151 | +Closes #123 | ||
| 152 | +``` | ||
| 153 | + | ||
| 154 | +### ❌ 避免格式 | ||
| 155 | + | ||
| 156 | +``` | ||
| 157 | +# ❌ 太长 | ||
| 158 | +feat(module): 这是一个非常长的描述,超过五十个字符的限制,应该避免这种写法 | ||
| 159 | + | ||
| 160 | +# ❌ 句号结尾 | ||
| 161 | +feat(module): 添加新功能。 | ||
| 162 | + | ||
| 163 | +# ❌ 非祈使句 | ||
| 164 | +feat(module): 添加了新功能 | ||
| 165 | +``` | ||
| 166 | + | ||
| 167 | +--- | ||
| 168 | + | ||
| 169 | +## 🔍 故障排查 | ||
| 170 | + | ||
| 171 | +### 问题:提交被拒绝 | ||
| 172 | + | ||
| 173 | +**原因**:commit message 格式不符合规范 | ||
| 174 | + | ||
| 175 | +**解决**:按照 `<type>(<scope>): <subject>` 格式重新编写 | ||
| 176 | + | ||
| 177 | +### 问题:CHANGELOG 未更新 | ||
| 178 | + | ||
| 179 | +**可能原因**: | ||
| 180 | +1. Commit message 格式不正确 | ||
| 181 | +2. `scripts/changelog/update-changelog.sh` 脚本路径错误 | ||
| 182 | +3. `docs/CHANGELOG.md` 文件不存在 | ||
| 183 | + | ||
| 184 | +**解决**: | ||
| 185 | +1. 检查 commit message 格式 | ||
| 186 | +2. 运行 `pnpm changelog:check` 检查漏记 | ||
| 187 | +3. 手动运行脚本调试 | ||
| 188 | + | ||
| 189 | +--- | ||
| 190 | + | ||
| 191 | +## 📚 相关文档 | ||
| 192 | + | ||
| 193 | +- [CHANGELOG 工具文档](../scripts/changelog/README.md) | ||
| 194 | +- [项目 CHANGELOG](../../docs/CHANGELOG.md) | ||
| 195 | +- [Commit Message 规范](commit-msg) |
| ... | @@ -52,7 +52,7 @@ echo "" | ... | @@ -52,7 +52,7 @@ echo "" |
| 52 | # 自动更新 CHANGELOG.md | 52 | # 自动更新 CHANGELOG.md |
| 53 | # ============================================ | 53 | # ============================================ |
| 54 | CHANGELOG_FILE="docs/CHANGELOG.md" | 54 | CHANGELOG_FILE="docs/CHANGELOG.md" |
| 55 | -SCRIPT_PATH="scripts/update-changelog.sh" | 55 | +SCRIPT_PATH="scripts/changelog/update-changelog.sh" |
| 56 | 56 | ||
| 57 | # 检查文件和脚本是否存在 | 57 | # 检查文件和脚本是否存在 |
| 58 | if [ ! -f "$CHANGELOG_FILE" ]; then | 58 | if [ ! -f "$CHANGELOG_FILE" ]; then | ... | ... |
| ... | @@ -3,7 +3,7 @@ | ... | @@ -3,7 +3,7 @@ |
| 3 | ## [2026-02-22] - CHANGELOG 自动更新功能 | 3 | ## [2026-02-22] - CHANGELOG 自动更新功能 |
| 4 | 4 | ||
| 5 | ### 配置 | 5 | ### 配置 |
| 6 | -- 新增 `scripts/update-changelog.sh` 自动更新脚本 | 6 | +- 新增 `scripts/changelog/update-changelog.sh` 自动更新脚本 |
| 7 | - 修改 `.husky/commit-msg` 调用自动更新脚本 | 7 | - 修改 `.husky/commit-msg` 调用自动更新脚本 |
| 8 | - 移除 `.husky/pre-commit` 中的手动 CHANGELOG 检查 | 8 | - 移除 `.husky/pre-commit` 中的手动 CHANGELOG 检查 |
| 9 | - 支持重复检测:同一天不同主题的提交会分别记录 | 9 | - 支持重复检测:同一天不同主题的提交会分别记录 | ... | ... |
| ... | @@ -6,11 +6,45 @@ | ... | @@ -6,11 +6,45 @@ |
| 6 | 6 | ||
| 7 | | 文件 | 说明 | 使用频率 | | 7 | | 文件 | 说明 | 使用频率 | |
| 8 | |------|------|---------| | 8 | |------|------|---------| |
| 9 | +| `update-changelog.sh` | 自动更新 - 根据 commit message 自动更新 CHANGELOG.md | ⭐⭐⭐ 高频(自动) | | ||
| 9 | | `check-changelog.sh` | 漏记检查 - 扫描 git 提交,检查 CHANGELOG 漏记 | ⭐⭐⭐ 高频 | | 10 | | `check-changelog.sh` | 漏记检查 - 扫描 git 提交,检查 CHANGELOG 漏记 | ⭐⭐⭐ 高频 | |
| 10 | | `archive-changelog.sh` | 归档脚本 - 当记录超过 20 条时自动归档 | ⭐ 低频 | | 11 | | `archive-changelog.sh` | 归档脚本 - 当记录超过 20 条时自动归档 | ⭐ 低频 | |
| 11 | 12 | ||
| 12 | ## 🚀 使用方式 | 13 | ## 🚀 使用方式 |
| 13 | 14 | ||
| 15 | +### 自动更新 CHANGELOG(推荐) | ||
| 16 | + | ||
| 17 | +**说明**:`update-changelog.sh` 是自动化脚本,通过 Git post-commit hook 自动调用。无需手动运行。 | ||
| 18 | + | ||
| 19 | +**触发时机**:每次提交代码后自动执行 | ||
| 20 | + | ||
| 21 | +**工作流程**: | ||
| 22 | +1. 解析 commit message,提取 `type(scope): subject` 格式 | ||
| 23 | +2. 根据 commit 类型映射到中文(feat→新增、fix→修复等) | ||
| 24 | +3. 生成 CHANGELOG 条目 | ||
| 25 | +4. 自动插入到 `docs/CHANGELOG.md` 开头 | ||
| 26 | +5. 如果 CHANGELOG 有变更,会自动创建补充提交 | ||
| 27 | + | ||
| 28 | +**类型映射**: | ||
| 29 | +- `feat` → `新增` | ||
| 30 | +- `fix` → `修复` | ||
| 31 | +- `docs` → `文档` | ||
| 32 | +- `style` → `样式` | ||
| 33 | +- `refactor` → `优化` | ||
| 34 | +- `perf` → `性能` | ||
| 35 | +- `test` → `测试` | ||
| 36 | +- `chore` → `配置` | ||
| 37 | +- `revert` → `回滚` | ||
| 38 | + | ||
| 39 | +**手动运行(仅调试用)**: | ||
| 40 | +```bash | ||
| 41 | +./scripts/changelog/update-changelog.sh <commit-message-file> | ||
| 42 | +``` | ||
| 43 | + | ||
| 44 | +**去重机制**:同一天相同主题的提交会分别记录,避免覆盖。 | ||
| 45 | + | ||
| 46 | +--- | ||
| 47 | + | ||
| 14 | ### 检查漏记 | 48 | ### 检查漏记 |
| 15 | 49 | ||
| 16 | ```bash | 50 | ```bash | ... | ... |
-
Please register or login to post a comment