From aa1ca811fe4a1e9658fab03d30076dcf26840517 Mon Sep 17 00:00:00 2001 From: cfdaily Date: Mon, 8 Jun 2026 20:23:16 +0800 Subject: [PATCH] auto-sync: 2026-06-08 20:23:16 --- scripts/deploy.sh | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/scripts/deploy.sh b/scripts/deploy.sh index d553df8..2e7a6a2 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -18,6 +18,8 @@ usage() { echo " --source=DIR 源码目录 (default: 项目开发目录)" echo " --target=DIR 安装目标目录 (default: ~/.sanguo_projects/sanguo_moziplus_v2)" echo " --skip-build 跳过前端构建" + echo " --version 显示当前部署版本" + echo " --rollback 回滚到上一个部署版本" echo " -h, --help 显示帮助" exit 0 } @@ -27,10 +29,59 @@ for arg in "$@"; do --source=*) SOURCE_DIR="${arg#*=}" ;; --target=*) TARGET_DIR="${arg#*=}" ;; --skip-build) SKIP_BUILD=true ;; + --version) ACTION=version ;; + --rollback) ACTION=rollback ;; + --health-check) ;; # 保留兼容,无额外操作 -h|--help) usage ;; esac done +ACTION="${ACTION:-deploy}" + +# ── 部署历史文件 ── +HISTORY_FILE="$TARGET_DIR/data/deploy-history.jsonl" + +# ── version 分支 ── +if [ "$ACTION" = "version" ]; then + if [ -f "$HISTORY_FILE" ]; then + LAST_COMMIT=$(tail -1 "$HISTORY_FILE" | python3 -c 'import sys,json; print(json.load(sys.stdin).get("commit","unknown"))' 2>/dev/null || echo "unknown") + echo "$LAST_COMMIT" + else + echo "No deployment history found." + fi + exit 0 +fi + +# ── rollback 分支 ── +if [ "$ACTION" = "rollback" ]; then + if [ ! -f "$HISTORY_FILE" ]; then + echo "❌ No deployment history, cannot rollback." + exit 1 + fi + LINE_COUNT=$(wc -l < "$HISTORY_FILE") + if [ "$LINE_COUNT" -lt 2 ]; then + echo "❌ Not enough history for rollback (need at least 2 entries)." + exit 1 + fi + ROLLBACK_COMMIT=$(tail -2 "$HISTORY_FILE" | head -1 | python3 -c 'import sys,json; print(json.load(sys.stdin).get("commit",""))' 2>/dev/null || echo "") + if [ -z "$ROLLBACK_COMMIT" ]; then + echo "❌ Could not parse previous commit from history." + exit 1 + fi + echo "🔄 Rolling back to commit: $ROLLBACK_COMMIT" + # 保存当前分支/commit 以便恢复 + CURRENT_REF=$(git -C "$SOURCE_DIR" rev-parse HEAD 2>/dev/null || echo "") + # checkout 到目标 commit + git -C "$SOURCE_DIR" checkout "$ROLLBACK_COMMIT" 2>/dev/null + # 使用 DEPLOY_OVERRIDE_COMMIT 显式传 commit hash + DEPLOY_OVERRIDE_COMMIT="$ROLLBACK_COMMIT" bash "$0" --source="$SOURCE_DIR" --target="$TARGET_DIR" --skip-build + # 恢复到原来的 commit + if [ -n "$CURRENT_REF" ]; then + git -C "$SOURCE_DIR" checkout "$CURRENT_REF" 2>/dev/null || true + fi + exit 0 +fi + echo "🚀 Deploying moziplus v2" echo " Source: $SOURCE_DIR" echo " Target: $TARGET_DIR"