#!/usr/bin/env bash set -euo pipefail fail() { echo "[remote-preflight][ERROR] $1" >&2 exit 1 } for key in REMOTE_DIR REMOTE_ENV_FILE COMPOSE_FILE POSTGRES_DATA_DIR STORAGE_HOST_DIR DEPLOY_DATA_MODE SYNC_ENV; do [[ -n "${!key:-}" ]] || fail "缺少 $key" done if [[ "$DEPLOY_DATA_MODE" == "existing" ]]; then [[ -d "$REMOTE_DIR" \ && -f "$REMOTE_DIR/server/package.json" \ && -f "$REMOTE_DIR/$COMPOSE_FILE" ]] \ || fail "existing 模式要求 REMOTE_DIR 是现存仓库根目录" [[ -f "$POSTGRES_DATA_DIR/PG_VERSION" && -d "$STORAGE_HOST_DIR" ]] \ || fail "existing 模式的数据目录合同未满足" fi if [[ "$SYNC_ENV" == "0" ]]; then [[ -f "$REMOTE_ENV_FILE" && ! -L "$REMOTE_ENV_FILE" ]] \ || fail "SYNC_ENV=0 要求同步前已有普通远端 .env 文件" fi echo "[remote-preflight][PASS] 远端仓库、环境与数据合同通过"