#!/usr/bin/env bash set -euo pipefail NAS_HOST="karan@100.121.200.111" NAS_PATH="/volume2/docker/goodall" REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$REPO_DIR" echo "==> Checking SSH connectivity to ${NAS_HOST}" if ! ssh -o ConnectTimeout=5 -o BatchMode=yes "$NAS_HOST" true; then echo "ERROR: cannot reach ${NAS_HOST} over SSH (tailscale down?)" >&2 exit 1 fi echo "==> Clearing stale project files on ${NAS_HOST}:${NAS_PATH} (preserving config/ and .env)" ssh "$NAS_HOST" "mkdir -p ${NAS_PATH} && find ${NAS_PATH} -mindepth 1 -maxdepth 1 ! -name 'config' ! -name '.env' -exec rm -rf {} +" echo "==> Syncing project files to ${NAS_HOST}:${NAS_PATH}" COPYFILE_DISABLE=1 tar -cz \ --exclude='.git' \ --exclude='.claude' \ --exclude='config' \ --exclude='.env' \ . | ssh "$NAS_HOST" "tar -xzf - -C ${NAS_PATH}" echo "==> Decrypting secrets and writing remote .env" sops --input-type dotenv --output-type dotenv -d .env.enc \ | ssh "$NAS_HOST" "cat > ${NAS_PATH}/.env && chmod 600 ${NAS_PATH}/.env" echo "==> Pulling latest images and recreating containers" ssh "$NAS_HOST" "cd ${NAS_PATH} && docker compose pull && docker compose up -d" echo "==> Deploy complete."