hookehuyr

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

- 使用 git add 而非 git commit,确保版本更新后暂存
...@@ -14,6 +14,17 @@ echo "📝 ${BLUE}检查 Commit Message 格式...${NC}" ...@@ -14,6 +14,17 @@ echo "📝 ${BLUE}检查 Commit Message 格式...${NC}"
14 echo "" 14 echo ""
15 15
16 # ============================================ 16 # ============================================
17 +# 版本自动更新
18 +# ============================================
19 +echo ""
20 +bash scripts/update-version.sh "$1"
21 +
22 +# 版本更新后继续验证 commit message 格式
23 +echo ""
24 +echo "🔄 ${BLUE}继续验证 Commit Message...${NC}"
25 +echo ""
26 +
27 +# ============================================
17 # Commit Message 格式验证 28 # Commit Message 格式验证
18 # ============================================ 29 # ============================================
19 30
......
1 +#!/bin/bash
2 +
3 +###############################################################################
4 +# 版本自动更新脚本(内联版本)
5 +#
6 +# 功能:根据 commit message 类型自动更新 package.json 版本号
7 +# 规则:遵循 Semantic Versioning
8 +# - feat: MINOR (1.x.x → 1.y.0)
9 +# - fix: PATCH (x.y.z → x.y.(z+1))
10 +# - perf: MINOR
11 +# - 其他: 不更新
12 +#
13 +# 使用方式:commit-msg hook 中通过 source 调用此脚本
14 +###############################################################################
15 +
16 +set -e
17 +
18 +# 颜色定义
19 +RED='\033[0;31m'
20 +GREEN='\033[0;32m'
21 +YELLOW='\033[1;33m'
22 +BLUE='\033[0;34m'
23 +NC='\033[0m'
24 +
25 +# 获取 commit message(从环境变量获取,由 husky 传递)
26 +COMMIT_MSG="${HUSKY_COMMIT_MSG}"
27 +
28 +# 提取 type(feat|fix|perf)
29 +if [[ $COMMIT_MSG =~ ^feat[[:/\(]] ]]; then
30 + TYPE="feat"
31 +elif [[ $COMMIT_MSG =~ ^fix[[:/\] ]]; then
32 + TYPE="fix"
33 +elif [[ $COMMIT_MSG =~ ^perf[[:/\] ]]; then
34 + TYPE="perf"
35 +else
36 + echo "${YELLOW}ℹ️ $TYPE 类型不触发版本更新${NC}"
37 + exit 0
38 +fi
39 +
40 +echo "📋 Type: ${TYPE:-none}"
41 +
42 +# 读取当前版本
43 +CURRENT=$(node -p "require('./package.json').version")
44 +echo "📌 当前版本: ${CURRENT}"
45 +echo ""
46 +
47 +# 解析版本号 (MAJOR.MINOR.PATCH)
48 +IFS='.' read -r -a <<< "$CURRENT"
49 +MAJOR=${VERSION_ARRAY[0]}
50 +MINOR=${VERSION_ARRAY[1]}
51 +PATCH=${VERSION_ARRAY[2]}
52 +
53 +# 版本更新逻辑
54 +case $TYPE in
55 + feat|perf)
56 + # MINOR 版本更新:1.0.0 → 1.1.0
57 + MINOR=$((MINOR + 1))
58 + PATCH=0
59 + ;;
60 + fix)
61 + # PATCH 版本更新:1.0.0 → 1.0.1
62 + PATCH=$((PATCH + 1))
63 + ;;
64 +esac
65 + echo "${YELLOW}ℹ️ $TYPE 类型不触发版本更新${NC}"
66 + exit 0
67 + ;;
68 +esac
69 + echo "${YELLOW}ℹ️ revert 类型不触发版本更新${NC}"
70 + exit 0
71 + ;;
72 +esac
73 + echo "${YELLOW}ℹ️ chore 类型不触发版本更新${NC}"
74 + exit 0
75 + ;;
76 +esac
77 + echo "${YELLOW}ℹ️ style 类型不触发版本更新${NC}"
78 + exit 0
79 + ;;
80 +esac
81 + echo "${YELLOW}ℹ️ test 类型不触发版本更新${NC}"
82 + exit 0
83 + ;;
84 +esac
85 + echo "${YELLOW}ℹ️ docs 类型不触发版本更新${NC}"
86 + exit 0
87 + ;;
88 +esac
89 + echo "${YELLOW}ℹ️ refactor 类型不触发版本更新${NC}"
90 + exit 0
91 + ;;
92 +esac
93 + echo "${YELLOW}ℹ️ build 类型不触发版本更新${NC}"
94 + exit 0
95 + ;;
96 +esac
97 + echo "${YELLOW}ℹ️ ci 类型不触发版本更新${NC}"
98 + exit 0
99 + ;;
100 +esac
101 + echo "${YELLOW}ℹ️ revert 类型不触发版本更新${NC}"
102 + exit 0
103 + ;;
104 +esac
105 + echo "${YELLOW}ℹ️ unknown 类型不触发版本更新${NC}"
106 + exit 0
107 + ;;
108 +esac
109 + echo "${RED}❌ 无法识别的 commit type${NC}"
110 + exit 1
111 + ;;
112 +esac
113 +
114 +# 计算新版本
115 +NEW="${MAJOR}.${MINOR}.${PATCH}"
116 +
117 +# 更新 package.json
118 +npm version --no-git-tag-version "$NEW" >/dev/null 2>&1
119 +
120 +# 检查版本是否真的变化了
121 +if [ "$NEW" = "$CURRENT" ]; then
122 + echo "${YELLOW}⚠️ 版本未变化,跳过更新${NC}"
123 + exit 0
124 +fi
125 +
126 +echo ""
127 +echo "${GREEN}✅ 版本已更新: ${CURRENT}${NEW}${NC}"
128 +echo ""