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
echo " ${GREEN}✅ Commit Message 格式正确${NC}"
echo ""
# ============================================
# 自动更新 CHANGELOG.md
# ============================================
echo "📝 ${BLUE}更新 CHANGELOG.md...${NC}"
echo ""
# 调用 CHANGELOG 更新脚本
SCRIPT_PATH="scripts/update-changelog.sh"
if [ -f "$SCRIPT_PATH" ]; then
bash "$SCRIPT_PATH" "$COMMIT_MSG_FILE"
else
echo " ${YELLOW}⚠️ CHANGELOG 更新脚本不存在: $SCRIPT_PATH${NC}"
fi
......
#!/bin/sh
# ============================================
# Post-commit Hook
# ============================================
#
# 功能:
# 1. 显示提交成功信息
# 2. 自动更新 CHANGELOG.md(通过补充提交)
#
# 作者:Claude Code
# 日期:2026-02-22
# ============================================
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
......@@ -23,7 +37,7 @@ echo " Msg: $(echo "$COMMIT_MSG" | head -n 1)"
echo ""
# 统计本次提交的改动
STATS=$(git diff HEAD~1 --numstat | awk '{added+=$1; deleted+=$2; files++} END {print files, added, deleted}')
STATS=$(git diff HEAD~1 --numstat 2>/dev/null | awk '{added+=$1; deleted+=$2; files++} END {print files, added, deleted}')
FILES_CHANGED=$(echo "$STATS" | cut -d' ' -f1)
LINES_ADDED=$(echo "$STATS" | cut -d' ' -f2)
LINES_DELETED=$(echo "$STATS" | cut -d' ' -f3)
......@@ -34,6 +48,60 @@ echo " 新增行数: +$LINES_ADDED"
echo " 删除行数: -$LINES_DELETED"
echo ""
# ============================================
# 自动更新 CHANGELOG.md
# ============================================
CHANGELOG_FILE="docs/CHANGELOG.md"
SCRIPT_PATH="scripts/update-changelog.sh"
# 检查文件和脚本是否存在
if [ ! -f "$CHANGELOG_FILE" ]; then
echo " ${YELLOW}⚠️ CHANGELOG.md 不存在,跳过自动更新${NC}"
elif [ ! -f "$SCRIPT_PATH" ]; then
echo " ${YELLOW}⚠️ CHANGELOG 更新脚本不存在: $SCRIPT_PATH${NC}"
else
echo "📝 ${BLUE}更新 CHANGELOG.md...${NC}"
# 调用 CHANGELOG 更新脚本(传入 commit message 文件)
# 创建临时文件保存 commit message
TEMP_MSG_FILE=$(mktemp)
echo "$COMMIT_MSG" > "$TEMP_MSG_FILE"
# 执行更新脚本
bash "$SCRIPT_PATH" "$TEMP_MSG_FILE"
SCRIPT_EXIT_CODE=$?
# 清理临时文件
rm -f "$TEMP_MSG_FILE"
if [ $SCRIPT_EXIT_CODE -eq 0 ]; then
# 检查 CHANGELOG 是否有变更
if git diff --quiet "$CHANGELOG_FILE" 2>/dev/null; then
echo " ${GREEN}✅ CHANGELOG 无需更新(可能已存在相同条目)${NC}"
else
# CHANGELOG 有变更,创建补充提交
echo " ${BLUE}创建 CHANGELOG 补充提交...${NC}"
# 获取原始提交的主题(第一行)
COMMIT_SUBJECT=$(echo "$COMMIT_MSG" | head -n 1)
# 暂存 CHANGELOG 更改
git add "$CHANGELOG_FILE"
# 创建补充提交(跳过 hooks 避免循环)
git commit --no-verify -m "docs(changelog): 更新 CHANGELOG - $COMMIT_SUBJECT" 2>/dev/null
if [ $? -eq 0 ]; then
echo " ${GREEN}✅ CHANGELOG 补充提交已创建${NC}"
else
echo " ${YELLOW}⚠️ CHANGELOG 补充提交失败${NC}"
fi
fi
fi
fi
echo ""
# 提示下一步操作
echo "🚀 ${BLUE}下一步操作:${NC}"
......
# CHANGELOG
## [2026-02-22] - CHANGELOG 自动更新功能
### 配置
- 新增 `scripts/update-changelog.sh` 自动更新脚本
- 修改 `.husky/commit-msg` 调用自动更新脚本
- 移除 `.husky/pre-commit` 中的手动 CHANGELOG 检查
- 支持重复检测:同一天不同主题的提交会分别记录
---
## [2026-02-22] - 文档结构优化
### 文档
......