prepare-commit-msg 892 Bytes
#!/bin/sh
# ============================================
# Prepare-commit-msg Hook
# ============================================

RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'

COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2

# 只跳过 merge 提交,其他情况都执行
if [ "$COMMIT_SOURCE" != "merge" ]; then
  if [ -f "$COMMIT_MSG_FILE" ]; then
    COMMIT_MSG=$(cat "$COMMIT_MSG_FILE")
    FIRST_LINE=$(echo "$COMMIT_MSG" | head -n 1)
    COMMIT_TYPE=$(echo "$FIRST_LINE" | sed -E 's/^([a-z]+)\(.*/\1/')

    # 只对特定类型更新 CHANGELOG,跳过 docs(changelog)
    if echo "$FIRST_LINE" | grep -qE "^docs\(changelog\):"; then
      :
    elif [ "$COMMIT_TYPE" = "feat" ] || [ "$COMMIT_TYPE" = "fix" ] || [ "$COMMIT_TYPE" = "refactor" ] || [ "$COMMIT_TYPE" = "perf" ]; then
      bash scripts/changelog/update-changelog-prepare.sh "$COMMIT_MSG_FILE"
    fi
  fi
fi