hookehuyr

feat(version): 修复版本更新脚本执行顺序

- 使用 git add 而非 git commit,确保版本更新后暂存
......@@ -14,6 +14,17 @@ echo "📝 ${BLUE}检查 Commit Message 格式...${NC}"
echo ""
# ============================================
# 版本自动更新
# ============================================
echo ""
bash scripts/update-version.sh "$1"
# 版本更新后继续验证 commit message 格式
echo ""
echo "🔄 ${BLUE}继续验证 Commit Message...${NC}"
echo ""
# ============================================
# Commit Message 格式验证
# ============================================
......
#!/bin/bash
###############################################################################
# 版本自动更新脚本(内联版本)
#
# 功能:根据 commit message 类型自动更新 package.json 版本号
# 规则:遵循 Semantic Versioning
# - feat: MINOR (1.x.x → 1.y.0)
# - fix: PATCH (x.y.z → x.y.(z+1))
# - perf: MINOR
# - 其他: 不更新
#
# 使用方式:commit-msg hook 中通过 source 调用此脚本
###############################################################################
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 获取 commit message(从环境变量获取,由 husky 传递)
COMMIT_MSG="${HUSKY_COMMIT_MSG}"
# 提取 type(feat|fix|perf)
if [[ $COMMIT_MSG =~ ^feat[[:/\(]] ]]; then
TYPE="feat"
elif [[ $COMMIT_MSG =~ ^fix[[:/\] ]]; then
TYPE="fix"
elif [[ $COMMIT_MSG =~ ^perf[[:/\] ]]; then
TYPE="perf"
else
echo "${YELLOW}ℹ️ $TYPE 类型不触发版本更新${NC}"
exit 0
fi
echo "📋 Type: ${TYPE:-none}"
# 读取当前版本
CURRENT=$(node -p "require('./package.json').version")
echo "📌 当前版本: ${CURRENT}"
echo ""
# 解析版本号 (MAJOR.MINOR.PATCH)
IFS='.' read -r -a <<< "$CURRENT"
MAJOR=${VERSION_ARRAY[0]}
MINOR=${VERSION_ARRAY[1]}
PATCH=${VERSION_ARRAY[2]}
# 版本更新逻辑
case $TYPE in
feat|perf)
# MINOR 版本更新:1.0.0 → 1.1.0
MINOR=$((MINOR + 1))
PATCH=0
;;
fix)
# PATCH 版本更新:1.0.0 → 1.0.1
PATCH=$((PATCH + 1))
;;
esac
echo "${YELLOW}ℹ️ $TYPE 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ revert 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ chore 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ style 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ test 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ docs 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ refactor 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ build 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ ci 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ revert 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ unknown 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${RED}❌ 无法识别的 commit type${NC}"
exit 1
;;
esac
# 计算新版本
NEW="${MAJOR}.${MINOR}.${PATCH}"
# 更新 package.json
npm version --no-git-tag-version "$NEW" >/dev/null 2>&1
# 检查版本是否真的变化了
if [ "$NEW" = "$CURRENT" ]; then
echo "${YELLOW}⚠️ 版本未变化,跳过更新${NC}"
exit 0
fi
echo ""
echo "${GREEN}✅ 版本已更新: ${CURRENT}${NEW}${NC}"
echo ""