#!/usr/bin/env bash set -Eeuo pipefail require_var() { local name="$1" if [ -z "${!name:-}" ]; then printf 'Required environment variable %s is missing\n' "$name" >&2 exit 2 fi } quote() { printf '%q' "$1" } require_var SWARM_MANAGER_HOST require_var SWARM_SSH_USER require_var ENVIRONMENT require_var STACK_NAME require_var RELEASE_ID require_var COMMIT_SHA require_var WEB_IMAGE require_var PUBLIC_HOST require_var TRAEFIK_NETWORK SSH_PORT="${SWARM_SSH_PORT:-22}" SSH_TARGET="${SWARM_SSH_USER}@${SWARM_MANAGER_HOST}" REMOTE_DEPLOY_DIR="${REMOTE_DEPLOY_DIR:-/tmp/videoreg-deploy}" ssh -p "$SSH_PORT" "$SSH_TARGET" "mkdir -p $(quote "$REMOTE_DEPLOY_DIR")" scp -P "$SSH_PORT" deploy/swarm/docker-stack.yml "$SSH_TARGET:$REMOTE_DEPLOY_DIR/docker-stack.yml" scp -P "$SSH_PORT" deploy/remote/deploy-stack.sh "$SSH_TARGET:$REMOTE_DEPLOY_DIR/deploy-stack.sh" remote_vars=( ENVIRONMENT STACK_NAME RELEASE_ID COMMIT_SHA WEB_IMAGE PUBLIC_HOST TRAEFIK_NETWORK REGION TEAM_ID WEB_REPLICAS WEB_PLACEMENT_CONSTRAINT TRAEFIK_ENTRYPOINTS TRAEFIK_TLS REGISTRY REGISTRY_USERNAME REGISTRY_PASSWORD RELEASE_LOCK_FILE REMOTE_DEPLOY_DIR DEPLOY_MIN_FREE_MB DEPLOY_PRUNE_BEFORE_PULL DEPLOY_PRUNE_UNTIL DEPLOY_CLEANUP_FAILED_IMAGES VIDEOREG_DB_MEMORY_TTL_MS VIDEOREG_NEXT_CACHE_REVALIDATE_SECONDS ) remote_command="" for name in "${remote_vars[@]}"; do if [ -n "${!name:-}" ]; then remote_command+="$name=$(quote "${!name}") " fi done remote_command+="bash $(quote "$REMOTE_DEPLOY_DIR/deploy-stack.sh")" ssh -p "$SSH_PORT" "$SSH_TARGET" "$remote_command"