From dbddb1082384ce2176647ee9bc37515f8c116ebb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B2=E8=BE=B0=E7=94=9F=E4=BA=A7?= Date: Sun, 19 Apr 2026 23:37:08 +0800 Subject: [PATCH] =?UTF-8?q?v0.0.1=20-=20=E6=B7=BB=E5=8A=A0CI/CD=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/ci_version_sync.sh | 136 +++++++++++++++++++++++++++++++++++++ scripts/version_sync.sh | 93 +++++++++++++++++++++++++ 2 files changed, 229 insertions(+) create mode 100755 scripts/ci_version_sync.sh create mode 100755 scripts/version_sync.sh diff --git a/scripts/ci_version_sync.sh b/scripts/ci_version_sync.sh new file mode 100755 index 0000000..4e7642d --- /dev/null +++ b/scripts/ci_version_sync.sh @@ -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 "已推送到远程仓库" \ No newline at end of file diff --git a/scripts/version_sync.sh b/scripts/version_sync.sh new file mode 100755 index 0000000..3b5b9e7 --- /dev/null +++ b/scripts/version_sync.sh @@ -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" \ No newline at end of file