#!/usr/bin/env bash set -euo pipefail repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$repo_root" deploy_host="${DEPLOY_HOST:-AMS-DEV01}" deploy_user="${DEPLOY_USER:-zak}" deploy_path="${DEPLOY_PATH:-/home/${deploy_user}/magent}" ssh_opts="${DEPLOY_SSH_OPTS:-"-o StrictHostKeyChecking=accept-new"}" timestamp="$(date -u +%Y%m%dT%H%M%SZ)" remote="${deploy_user}@${deploy_host}" echo "Deploying tracked repository contents to ${remote}:${deploy_path}" git archive --format=tar HEAD | ssh ${ssh_opts} "${remote}" " set -e mkdir -p '${deploy_path}' backup_root=\"\${HOME}/magent-backups/${timestamp}\" mkdir -p \"\${backup_root}\" cd '${deploy_path}' for path in backend frontend docker-compose.yml docker-compose.hub.yml Dockerfile README.md docker scripts .build_number .gitattributes .gitignore; do if [ -e \"\$path\" ]; then cp -a \"\$path\" \"\${backup_root}/\" fi done tar -xf - -C '${deploy_path}' docker compose up -d --build " echo "Running remote smoke checks" ssh ${ssh_opts} "${remote}" " set -e python3 - <<'PY' from urllib import request checks = [ ('http://127.0.0.1:8000/health', 200), ('http://127.0.0.1:3000/login', 200), ] for url, expected in checks: with request.urlopen(url, timeout=20) as response: if response.status != expected: raise SystemExit(f'{url} returned {response.status}, expected {expected}') print(url, response.status) PY " echo "Deployment completed successfully"