v0.0.1 - 添加CI/CD版本管理脚本
This commit is contained in:
parent
0bd2d78697
commit
dbddb10823
|
|
@ -0,0 +1,136 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# ========================================
|
||||||
|
# CI/CD 版本自动同步脚本
|
||||||
|
# 每次代码更新后自动运行
|
||||||
|
# ========================================
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
REPO_DIR="/root/.openclaw/workspace/jiachenlong"
|
||||||
|
VERSION_FILE="$REPO_DIR/config/VERSION.json"
|
||||||
|
CHANGELOG_FILE="$REPO_DIR/config/CHANGELOG.md"
|
||||||
|
|
||||||
|
cd "$REPO_DIR"
|
||||||
|
|
||||||
|
echo "========================================="
|
||||||
|
echo " CI/CD 版本自动同步"
|
||||||
|
echo "========================================="
|
||||||
|
|
||||||
|
# 检查是否有未提交的更改
|
||||||
|
if [ -n "$(git status --porcelain)" ]; then
|
||||||
|
echo "⚠️ 有未提交的更改,请先提交"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 获取当前版本
|
||||||
|
CURRENT_VERSION=$(python3 -c "import json; print(json.load(open('$VERSION_FILE'))['version'])")
|
||||||
|
echo "📌 当前版本: $CURRENT_VERSION"
|
||||||
|
|
||||||
|
# 解析版本号
|
||||||
|
MAJOR=$(echo $CURRENT_VERSION | cut -d. -f1)
|
||||||
|
MINOR=$(echo $CURRENT_VERSION | cut -d. -f2)
|
||||||
|
PATCH=$(echo $CURRENT_VERSION | cut -d. -f3)
|
||||||
|
|
||||||
|
# 询问是否升级版本
|
||||||
|
echo ""
|
||||||
|
echo "请选择版本升级类型:"
|
||||||
|
echo " 1) PATCH (补丁): ${MAJOR}.${MINOR}.$((PATCH+1))"
|
||||||
|
echo " 2) MINOR (小版本): ${MAJOR}.$((MINOR+1)).0"
|
||||||
|
echo " 3) MAJOR (大版本): $((MAJOR+1)).0.0"
|
||||||
|
echo " 4) 自定义版本"
|
||||||
|
read -p "选择 (1-4): " choice
|
||||||
|
|
||||||
|
case $choice in
|
||||||
|
1) NEW_VERSION="${MAJOR}.${MINOR}.$((PATCH+1))";;
|
||||||
|
2) NEW_VERSION="${MAJOR}.$((MINOR+1)).0";;
|
||||||
|
3) NEW_VERSION="$((MAJOR+1)).0.0";;
|
||||||
|
4) read -p "输入新版本号: " NEW_VERSION;;
|
||||||
|
*) NEW_VERSION="${MAJOR}.${MINOR}.$((PATCH+1))";;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "📌 新版本: $NEW_VERSION"
|
||||||
|
|
||||||
|
# 更新 VERSION.json
|
||||||
|
python3 << EOF
|
||||||
|
import json
|
||||||
|
|
||||||
|
with open('$VERSION_FILE') as f:
|
||||||
|
v = json.load(f)
|
||||||
|
|
||||||
|
old_version = v['version']
|
||||||
|
v['version'] = '$NEW_VERSION'
|
||||||
|
v['updated'] = '$(date +%Y-%m-%d)'
|
||||||
|
|
||||||
|
# 更新主版本号到所有模块
|
||||||
|
for section in ['frontend', 'backend']:
|
||||||
|
if 'pages' in v['modules'][section]:
|
||||||
|
for k in v['modules'][section]['pages']:
|
||||||
|
v['modules'][section]['pages'][k] = '$NEW_VERSION'
|
||||||
|
if 'routers' in v['modules'][section]:
|
||||||
|
for k in v['modules'][section]['routers']:
|
||||||
|
v['modules'][section]['routers'][k] = '$NEW_VERSION'
|
||||||
|
if 'config' in v['modules'][section]:
|
||||||
|
for k in v['modules'][section]['config']:
|
||||||
|
v['modules'][section]['config'][k] = '$NEW_VERSION'
|
||||||
|
if 'app' in v['modules'][section]:
|
||||||
|
for k in v['modules'][section]['app']:
|
||||||
|
v['modules'][section]['app'][k] = '$NEW_VERSION'
|
||||||
|
|
||||||
|
with open('$VERSION_FILE', 'w') as f:
|
||||||
|
json.dump(v, f, indent=2, ensure_ascii=False)
|
||||||
|
|
||||||
|
print(f"✅ VERSION.json 已更新: {old_version} → $NEW_VERSION")
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# 同步到所有文件头部
|
||||||
|
python3 << 'EOF'
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
import os
|
||||||
|
|
||||||
|
VERSION = '$NEW_VERSION'
|
||||||
|
|
||||||
|
with open('$VERSION_FILE') as f:
|
||||||
|
v = json.load(f)
|
||||||
|
|
||||||
|
frontend_pages = v['modules']['frontend']['pages']
|
||||||
|
backend_routers = v['modules']['backend']['routers']
|
||||||
|
|
||||||
|
# 前端文件
|
||||||
|
for fname in frontend_pages:
|
||||||
|
fpath = f"$REPO_DIR/frontend/src/pages/{fname}.jsx"
|
||||||
|
if os.path.exists(fpath):
|
||||||
|
with open(fpath, 'r') as f:
|
||||||
|
content = f.read()
|
||||||
|
new_content = re.sub(r'Version: [\d.]+', f'Version: {VERSION}', content, count=1)
|
||||||
|
new_content = re.sub(r'\d{4}-\d{2}-\d{2}', '$(date +%Y-%m-%d)', new_content, count=1)
|
||||||
|
with open(fpath, 'w') as f:
|
||||||
|
f.write(new_content)
|
||||||
|
print(f" ✅ {fname}.jsx")
|
||||||
|
|
||||||
|
# 后端文件
|
||||||
|
for fname in backend_routers:
|
||||||
|
fpath = f"$REPO_DIR/backend/app/routers/{fname}.py"
|
||||||
|
if os.path.exists(fpath):
|
||||||
|
with open(fpath, 'r') as f:
|
||||||
|
content = f.read()
|
||||||
|
new_content = re.sub(r'Version: [\d.]+', f'Version: {VERSION}', content, count=1)
|
||||||
|
new_content = re.sub(r'\d{4}-\d{2}-\d{2}', '$(date +%Y-%m-%d)', new_content, count=1)
|
||||||
|
with open(fpath, 'w') as f:
|
||||||
|
f.write(new_content)
|
||||||
|
print(f" ✅ {fname}.py")
|
||||||
|
|
||||||
|
print(f"✅ 所有文件版本已同步到 {VERSION}")
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# 提交更改
|
||||||
|
git add .
|
||||||
|
git commit -m "v$NEW_VERSION - 自动版本更新"
|
||||||
|
git push
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "========================================="
|
||||||
|
echo " ✅ 版本更新完成!"
|
||||||
|
echo "========================================="
|
||||||
|
echo "新版本: $NEW_VERSION"
|
||||||
|
echo "已推送到远程仓库"
|
||||||
|
|
@ -0,0 +1,93 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# ========================================
|
||||||
|
# 版本同步脚本 - 只更新修改的文件
|
||||||
|
# 用法: ./scripts/version_sync.sh [patch|minor|major|custom]
|
||||||
|
# ========================================
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
REPO_DIR="/root/.openclaw/workspace/jiachenlong"
|
||||||
|
VERSION_FILE="$REPO_DIR/config/VERSION.json"
|
||||||
|
cd "$REPO_DIR"
|
||||||
|
|
||||||
|
# 获取当前版本
|
||||||
|
CURRENT=$(python3 -c "import json; print(json.load(open('$VERSION_FILE'))['version'])")
|
||||||
|
echo "📌 当前版本: $CURRENT"
|
||||||
|
|
||||||
|
# 解析版本号
|
||||||
|
MAJOR=$(echo $CURRENT | cut -d. -f1)
|
||||||
|
MINOR=$(echo $CURRENT | cut -d. -f2)
|
||||||
|
PATCH=$(echo $CURRENT | cut -d. -f3)
|
||||||
|
|
||||||
|
# 根据参数决定新版本
|
||||||
|
case "${1:-patch}" in
|
||||||
|
patch) NEW="$MAJOR.$MINOR.$((PATCH+1))";;
|
||||||
|
minor) NEW="$MAJOR.$((MINOR+1)).0";;
|
||||||
|
major) NEW="$((MAJOR+1)).0.0";;
|
||||||
|
*) NEW="${1:-$CURRENT}";;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "📌 新版本: $NEW"
|
||||||
|
|
||||||
|
# 1. 更新VERSION.json主版本号
|
||||||
|
python3 << EOF
|
||||||
|
import json
|
||||||
|
|
||||||
|
with open('$VERSION_FILE') as f:
|
||||||
|
v = json.load(f)
|
||||||
|
|
||||||
|
v['version'] = '$NEW'
|
||||||
|
v['updated'] = '$(date +%Y-%m-%d)'
|
||||||
|
|
||||||
|
with open('$VERSION_FILE', 'w') as f:
|
||||||
|
json.dump(v, f, indent=2, ensure_ascii=False)
|
||||||
|
print("✅ VERSION.json 主版本已更新")
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# 2. 同步VERSION.json中的版本到文件头部(只同步VERSION.json中已记录的版本)
|
||||||
|
python3 << 'EOF'
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
import os
|
||||||
|
|
||||||
|
VERSION = '$NEW'
|
||||||
|
REPO = '$REPO_DIR'
|
||||||
|
|
||||||
|
with open(f'{REPO}/config/VERSION.json') as f:
|
||||||
|
v = json.load(f)
|
||||||
|
|
||||||
|
pages = v['modules']['frontend']['pages']
|
||||||
|
routers = v['modules']['backend']['routers']
|
||||||
|
|
||||||
|
# 前端
|
||||||
|
for fname, ver in pages.items():
|
||||||
|
fpath = f'{REPO}/frontend/src/pages/{fname}.jsx'
|
||||||
|
if os.path.exists(fpath):
|
||||||
|
with open(fpath, 'r') as f:
|
||||||
|
content = f.read()
|
||||||
|
# 只更新VERSION.json中记录的版本
|
||||||
|
new_content = re.sub(r'Version: [\d.]+', f'Version: {ver}', content, count=1)
|
||||||
|
with open(fpath, 'w') as f:
|
||||||
|
f.write(new_content)
|
||||||
|
print(f" ✅ {fname}.jsx: {ver}")
|
||||||
|
|
||||||
|
# 后端
|
||||||
|
for fname, ver in routers.items():
|
||||||
|
fpath = f'{REPO}/backend/app/routers/{fname}.py'
|
||||||
|
if os.path.exists(fpath):
|
||||||
|
with open(fpath, 'r') as f:
|
||||||
|
content = f.read()
|
||||||
|
new_content = re.sub(r'Version: [\d.]+', f'Version: {ver}', content, count=1)
|
||||||
|
with open(fpath, 'w') as f:
|
||||||
|
f.write(new_content)
|
||||||
|
print(f" ✅ {fname}.py: {ver}")
|
||||||
|
|
||||||
|
print("✅ 所有文件版本已同步")
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# 3. 提交
|
||||||
|
git add .
|
||||||
|
git commit -m "v$NEW - 版本自动更新" || echo "无新更改"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "✅ 完成!版本: $CURRENT → $NEW"
|
||||||
Loading…
Reference in New Issue