auto-sync: 2026-06-08 20:23:16
This commit is contained in:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user