-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathupdate_version.sh
More file actions
executable file
·106 lines (85 loc) · 3.45 KB
/
update_version.sh
File metadata and controls
executable file
·106 lines (85 loc) · 3.45 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
#!/bin/bash
# 检查是否提供了版本号参数
if [ -z "$1" ]; then
echo "错误:请提供版本号作为参数"
echo "使用方法:./update_version.sh v0.0.14"
exit 1
fi
NEW_VERSION="$1"
# 获取当前最新的 tag
CURRENT_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
# 检查当前 tag 是否符合预期格式(v0.0.x)
if [[ ! "$CURRENT_TAG" =~ ^v0\.0\.[0-9]+$ ]]; then
echo "错误:当前 tag '$CURRENT_TAG' 不符合 v0.0.x 格式"
echo "请确保当前 tag 是 v0.0.x 格式才能更新版本"
exit 1
fi
# 提取当前版本号(去掉 v 前缀)
CURRENT_VERSION=${CURRENT_TAG#v}
# 比较版本号
if [ "$CURRENT_VERSION" = "$NEW_VERSION" ]; then
echo "当前版本已经是 $NEW_VERSION,无需更新"
exit 0
fi
# 查找 examples 目录下的 go.mod 文件中的包名
PACKAGE_NAME=""
for go_mod_file in examples/*/go.mod; do
if [ -f "$go_mod_file" ]; then
# 提取包名(如 github.com/ZingYao/autogo_scriptengine)
PACKAGE_NAME=$(grep "^require" "$go_mod_file" | sed 's/require[[:space:]]*//g' | head -1)
# 如果找到了包名,则使用它
if [ -n "$PACKAGE_NAME" ]; then
break
fi
fi
done
# 如果没有找到包名,则使用默认包名
if [ -z "$PACKAGE_NAME" ]; then
PACKAGE_NAME="github.com/ZingYao/autogo_scriptengine"
fi
echo "检测到的包名:$PACKAGE_NAME"
# 检查当前 tag 是否包含目标包名
if [[ "$CURRENT_TAG" == *"$PACKAGE_NAME"* ]]; then
echo "当前 tag '$CURRENT_TAG' 已包含包名 '$PACKAGE_NAME',无需替换"
else
# 删除旧的 tag
git tag -d "$CURRENT_TAG" 2>/dev/null || true
# 创建新的 tag(只使用版本号)
NEW_TAG="${NEW_VERSION}"
echo "新的 tag 将是:$NEW_TAG"
git tag "$NEW_TAG"
fi
# 更新 examples 目录下的 go.mod 文件
echo "更新 examples 目录下的 go.mod 文件..."
find examples -name "go.mod" -type f -exec sed -i '' "/github.com\/ZingYao\/autogo_scriptengine/ s/ v[0-9]\.[0-9]\.[0-9]\{1,\}\(\.[0-9]\{1,\}\)*/ ${NEW_VERSION}/g" {} \;
# 更新项目根目录的 README.md 文件(不是 go.mod)
echo "更新项目根目录的 README.md 文件..."
if [ -f "README.md" ]; then
sed -i '' "/github.com\/ZingYao\/autogo_scriptengine/ s/@v[0-9]\.[0-9]\.[0-9]\{1,\}\(\.[0-9]\{1,\}\)*/@${NEW_VERSION}/g" README.md
fi
# 更新 docs/README.md 文件
echo "更新 docs/README.md 文件..."
sed -i '' "/github.com\/ZingYao\/autogo_scriptengine/ s/@v[0-9]\.[0-9]\.[0-9]\{1,\}\(\.[0-9]\{1,\}\)*/@${NEW_VERSION}/g" docs/README.md
# 更新 docs/js_engine/README.md 文件
echo "更新 docs/js_engine/README.md 文件..."
if [ -f "docs/js_engine/README.md" ]; then
sed -i '' "/github.com\/ZingYao\/autogo_scriptengine/ s/@v[0-9]\.[0-9]\.[0-9]\{1,\}\(\.[0-9]\{1,\}\)*/@${NEW_VERSION}/g" docs/js_engine/README.md
fi
# 更新 docs/lua_engine/README.md 文件
echo "更新 docs/lua_engine/README.md 文件..."
if [ -f "docs/lua_engine/README.md" ]; then
sed -i '' "/github.com\/ZingYao\/autogo_scriptengine/ s/@v[0-9]\.[0-9]\.[0-9]\{1,\}\(\.[0-9]\{1,\}\)*/@${NEW_VERSION}/g" docs/lua_engine/README.md
fi
# 提交更改
echo "提交更改..."
git add -A
git commit -m "更新版本为 ${NEW_VERSION}
git push
- 更新所有 go.mod 文件
- 更新所有 README.md 文件
- Tag: $NEW_VERSION"
# 推送 tag
echo "推送 tag ${NEW_TAG}..."
git tag "${NEW_VERSION}"
git push origin "${NEW_VERSION}"
echo "完成!版本已从 $CURRENT_TAG 更新为 $NEW_VERSION"