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