fix(husky): 修复 CHANGELOG 自动更新功能 - 移至 post-commit hook
问题: - commit-msg hook 无法将 CHANGELOG 更改加入当前提交(快照已确定) - 导致"实现 CHANGELOG 自动更新功能"的提交未被记录到 CHANGELOG 解决方案: - 将 CHANGELOG 更新逻辑移至 post-commit hook - 提交成功后自动创建补充提交记录 CHANGELOG 更改 - 使用 --no-verify 避免补充提交的循环触发 变更: - .husky/post-commit: 添加 CHANGELOG 自动更新和补充提交逻辑 - .husky/commit-msg: 移除无效的 CHANGELOG 更新调用 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Showing
3 changed files
with
79 additions
and
15 deletions
| ... | @@ -85,17 +85,3 @@ fi | ... | @@ -85,17 +85,3 @@ fi |
| 85 | 85 | ||
| 86 | echo " ${GREEN}✅ Commit Message 格式正确${NC}" | 86 | echo " ${GREEN}✅ Commit Message 格式正确${NC}" |
| 87 | echo "" | 87 | echo "" |
| 88 | - | ||
| 89 | -# ============================================ | ||
| 90 | -# 自动更新 CHANGELOG.md | ||
| 91 | -# ============================================ | ||
| 92 | -echo "📝 ${BLUE}更新 CHANGELOG.md...${NC}" | ||
| 93 | -echo "" | ||
| 94 | - | ||
| 95 | -# 调用 CHANGELOG 更新脚本 | ||
| 96 | -SCRIPT_PATH="scripts/update-changelog.sh" | ||
| 97 | -if [ -f "$SCRIPT_PATH" ]; then | ||
| 98 | - bash "$SCRIPT_PATH" "$COMMIT_MSG_FILE" | ||
| 99 | -else | ||
| 100 | - echo " ${YELLOW}⚠️ CHANGELOG 更新脚本不存在: $SCRIPT_PATH${NC}" | ||
| 101 | -fi | ... | ... |
| 1 | +#!/bin/sh | ||
| 2 | +# ============================================ | ||
| 3 | +# Post-commit Hook | ||
| 4 | +# ============================================ | ||
| 5 | +# | ||
| 6 | +# 功能: | ||
| 7 | +# 1. 显示提交成功信息 | ||
| 8 | +# 2. 自动更新 CHANGELOG.md(通过补充提交) | ||
| 9 | +# | ||
| 10 | +# 作者:Claude Code | ||
| 11 | +# 日期:2026-02-22 | ||
| 12 | +# ============================================ | ||
| 13 | + | ||
| 1 | # 颜色定义 | 14 | # 颜色定义 |
| 15 | +RED='\033[0;31m' | ||
| 2 | GREEN='\033[0;32m' | 16 | GREEN='\033[0;32m' |
| 3 | BLUE='\033[0;34m' | 17 | BLUE='\033[0;34m' |
| 4 | YELLOW='\033[1;33m' | 18 | YELLOW='\033[1;33m' |
| ... | @@ -23,7 +37,7 @@ echo " Msg: $(echo "$COMMIT_MSG" | head -n 1)" | ... | @@ -23,7 +37,7 @@ echo " Msg: $(echo "$COMMIT_MSG" | head -n 1)" |
| 23 | echo "" | 37 | echo "" |
| 24 | 38 | ||
| 25 | # 统计本次提交的改动 | 39 | # 统计本次提交的改动 |
| 26 | -STATS=$(git diff HEAD~1 --numstat | awk '{added+=$1; deleted+=$2; files++} END {print files, added, deleted}') | 40 | +STATS=$(git diff HEAD~1 --numstat 2>/dev/null | awk '{added+=$1; deleted+=$2; files++} END {print files, added, deleted}') |
| 27 | FILES_CHANGED=$(echo "$STATS" | cut -d' ' -f1) | 41 | FILES_CHANGED=$(echo "$STATS" | cut -d' ' -f1) |
| 28 | LINES_ADDED=$(echo "$STATS" | cut -d' ' -f2) | 42 | LINES_ADDED=$(echo "$STATS" | cut -d' ' -f2) |
| 29 | LINES_DELETED=$(echo "$STATS" | cut -d' ' -f3) | 43 | LINES_DELETED=$(echo "$STATS" | cut -d' ' -f3) |
| ... | @@ -34,6 +48,60 @@ echo " 新增行数: +$LINES_ADDED" | ... | @@ -34,6 +48,60 @@ echo " 新增行数: +$LINES_ADDED" |
| 34 | echo " 删除行数: -$LINES_DELETED" | 48 | echo " 删除行数: -$LINES_DELETED" |
| 35 | echo "" | 49 | echo "" |
| 36 | 50 | ||
| 51 | +# ============================================ | ||
| 52 | +# 自动更新 CHANGELOG.md | ||
| 53 | +# ============================================ | ||
| 54 | +CHANGELOG_FILE="docs/CHANGELOG.md" | ||
| 55 | +SCRIPT_PATH="scripts/update-changelog.sh" | ||
| 56 | + | ||
| 57 | +# 检查文件和脚本是否存在 | ||
| 58 | +if [ ! -f "$CHANGELOG_FILE" ]; then | ||
| 59 | + echo " ${YELLOW}⚠️ CHANGELOG.md 不存在,跳过自动更新${NC}" | ||
| 60 | +elif [ ! -f "$SCRIPT_PATH" ]; then | ||
| 61 | + echo " ${YELLOW}⚠️ CHANGELOG 更新脚本不存在: $SCRIPT_PATH${NC}" | ||
| 62 | +else | ||
| 63 | + echo "📝 ${BLUE}更新 CHANGELOG.md...${NC}" | ||
| 64 | + | ||
| 65 | + # 调用 CHANGELOG 更新脚本(传入 commit message 文件) | ||
| 66 | + # 创建临时文件保存 commit message | ||
| 67 | + TEMP_MSG_FILE=$(mktemp) | ||
| 68 | + echo "$COMMIT_MSG" > "$TEMP_MSG_FILE" | ||
| 69 | + | ||
| 70 | + # 执行更新脚本 | ||
| 71 | + bash "$SCRIPT_PATH" "$TEMP_MSG_FILE" | ||
| 72 | + SCRIPT_EXIT_CODE=$? | ||
| 73 | + | ||
| 74 | + # 清理临时文件 | ||
| 75 | + rm -f "$TEMP_MSG_FILE" | ||
| 76 | + | ||
| 77 | + if [ $SCRIPT_EXIT_CODE -eq 0 ]; then | ||
| 78 | + # 检查 CHANGELOG 是否有变更 | ||
| 79 | + if git diff --quiet "$CHANGELOG_FILE" 2>/dev/null; then | ||
| 80 | + echo " ${GREEN}✅ CHANGELOG 无需更新(可能已存在相同条目)${NC}" | ||
| 81 | + else | ||
| 82 | + # CHANGELOG 有变更,创建补充提交 | ||
| 83 | + echo " ${BLUE}创建 CHANGELOG 补充提交...${NC}" | ||
| 84 | + | ||
| 85 | + # 获取原始提交的主题(第一行) | ||
| 86 | + COMMIT_SUBJECT=$(echo "$COMMIT_MSG" | head -n 1) | ||
| 87 | + | ||
| 88 | + # 暂存 CHANGELOG 更改 | ||
| 89 | + git add "$CHANGELOG_FILE" | ||
| 90 | + | ||
| 91 | + # 创建补充提交(跳过 hooks 避免循环) | ||
| 92 | + git commit --no-verify -m "docs(changelog): 更新 CHANGELOG - $COMMIT_SUBJECT" 2>/dev/null | ||
| 93 | + | ||
| 94 | + if [ $? -eq 0 ]; then | ||
| 95 | + echo " ${GREEN}✅ CHANGELOG 补充提交已创建${NC}" | ||
| 96 | + else | ||
| 97 | + echo " ${YELLOW}⚠️ CHANGELOG 补充提交失败${NC}" | ||
| 98 | + fi | ||
| 99 | + fi | ||
| 100 | + fi | ||
| 101 | +fi | ||
| 102 | + | ||
| 103 | +echo "" | ||
| 104 | + | ||
| 37 | # 提示下一步操作 | 105 | # 提示下一步操作 |
| 38 | echo "🚀 ${BLUE}下一步操作:${NC}" | 106 | echo "🚀 ${BLUE}下一步操作:${NC}" |
| 39 | 107 | ... | ... |
| 1 | # CHANGELOG | 1 | # CHANGELOG |
| 2 | 2 | ||
| 3 | +## [2026-02-22] - CHANGELOG 自动更新功能 | ||
| 4 | + | ||
| 5 | +### 配置 | ||
| 6 | +- 新增 `scripts/update-changelog.sh` 自动更新脚本 | ||
| 7 | +- 修改 `.husky/commit-msg` 调用自动更新脚本 | ||
| 8 | +- 移除 `.husky/pre-commit` 中的手动 CHANGELOG 检查 | ||
| 9 | +- 支持重复检测:同一天不同主题的提交会分别记录 | ||
| 10 | + | ||
| 11 | +--- | ||
| 12 | + | ||
| 3 | ## [2026-02-22] - 文档结构优化 | 13 | ## [2026-02-22] - 文档结构优化 |
| 4 | 14 | ||
| 5 | ### 文档 | 15 | ### 文档 | ... | ... |
-
Please register or login to post a comment