forked from awsl-project/maxx
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtag.sh
More file actions
executable file
·115 lines (95 loc) · 2.5 KB
/
tag.sh
File metadata and controls
executable file
·115 lines (95 loc) · 2.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/bin/bash
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 获取最新的 tag
get_latest_tag() {
git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0"
}
# 解析版本号
parse_version() {
local version=$1
version=${version#v} # 去掉 v 前缀
IFS='.' read -r major minor patch <<< "$version"
echo "$major $minor $patch"
}
# bump 版本
bump_version() {
local major=$1
local minor=$2
local patch=$3
local bump_type=$4
case $bump_type in
major)
major=$((major + 1))
minor=0
patch=0
;;
minor)
minor=$((minor + 1))
patch=0
;;
patch)
patch=$((patch + 1))
;;
esac
echo "v${major}.${minor}.${patch}"
}
# 主流程
main() {
echo -e "${BLUE}=== Git Tag Bump ===${NC}"
echo
# 获取当前版本
current_tag=$(get_latest_tag)
echo -e "当前版本: ${GREEN}${current_tag}${NC}"
echo
# 解析版本号
read -r major minor patch <<< "$(parse_version "$current_tag")"
# 计算各种 bump 后的版本
patch_version=$(bump_version "$major" "$minor" "$patch" "patch")
minor_version=$(bump_version "$major" "$minor" "$patch" "minor")
major_version=$(bump_version "$major" "$minor" "$patch" "major")
# 交互式选择
echo "选择版本类型:"
echo -e " ${YELLOW}1)${NC} patch ${GREEN}${patch_version}${NC}"
echo -e " ${YELLOW}2)${NC} minor ${GREEN}${minor_version}${NC}"
echo -e " ${YELLOW}3)${NC} major ${GREEN}${major_version}${NC}"
echo -e " ${YELLOW}4)${NC} 取消"
echo
read -p "请选择 [1-4]: " choice
case $choice in
1)
new_version=$patch_version
;;
2)
new_version=$minor_version
;;
3)
new_version=$major_version
;;
4|*)
echo -e "${YELLOW}已取消${NC}"
exit 0
;;
esac
echo
echo -e "将创建新 tag: ${GREEN}${new_version}${NC}"
read -p "确认推送? [y/N]: " confirm
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
echo -e "${YELLOW}已取消${NC}"
exit 0
fi
# 创建并推送 tag
echo
echo -e "${BLUE}创建 tag...${NC}"
git tag "$new_version"
echo -e "${BLUE}推送 tag...${NC}"
git push origin "$new_version"
echo
echo -e "${GREEN}完成! 新版本: ${new_version}${NC}"
}
main