auto-sync: 2026-06-08 20:23:16
This commit is contained in:
@@ -18,6 +18,8 @@ usage() {
|
|||||||
echo " --source=DIR 源码目录 (default: 项目开发目录)"
|
echo " --source=DIR 源码目录 (default: 项目开发目录)"
|
||||||
echo " --target=DIR 安装目标目录 (default: ~/.sanguo_projects/sanguo_moziplus_v2)"
|
echo " --target=DIR 安装目标目录 (default: ~/.sanguo_projects/sanguo_moziplus_v2)"
|
||||||
echo " --skip-build 跳过前端构建"
|
echo " --skip-build 跳过前端构建"
|
||||||
|
echo " --version 显示当前部署版本"
|
||||||
|
echo " --rollback 回滚到上一个部署版本"
|
||||||
echo " -h, --help 显示帮助"
|
echo " -h, --help 显示帮助"
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
@@ -27,10 +29,59 @@ for arg in "$@"; do
|
|||||||
--source=*) SOURCE_DIR="${arg#*=}" ;;
|
--source=*) SOURCE_DIR="${arg#*=}" ;;
|
||||||
--target=*) TARGET_DIR="${arg#*=}" ;;
|
--target=*) TARGET_DIR="${arg#*=}" ;;
|
||||||
--skip-build) SKIP_BUILD=true ;;
|
--skip-build) SKIP_BUILD=true ;;
|
||||||
|
--version) ACTION=version ;;
|
||||||
|
--rollback) ACTION=rollback ;;
|
||||||
|
--health-check) ;; # 保留兼容,无额外操作
|
||||||
-h|--help) usage ;;
|
-h|--help) usage ;;
|
||||||
esac
|
esac
|
||||||
done
|
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 "🚀 Deploying moziplus v2"
|
||||||
echo " Source: $SOURCE_DIR"
|
echo " Source: $SOURCE_DIR"
|
||||||
echo " Target: $TARGET_DIR"
|
echo " Target: $TARGET_DIR"
|
||||||
|
|||||||
Reference in New Issue
Block a user