hookehuyr

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>
...@@ -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 ### 文档
......