64 lines
1.9 KiB
Bash
Executable File
64 lines
1.9 KiB
Bash
Executable File
#!/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}"
|
|
prod_path="${PROD_DEPLOY_PATH:-/home/${deploy_user}/magent}"
|
|
deploy_path="${BETA_DEPLOY_PATH:-/home/${deploy_user}/magent-beta}"
|
|
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 beta 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-beta-backups/${timestamp}\"
|
|
mkdir -p \"\${backup_root}\"
|
|
cd '${deploy_path}'
|
|
for path in backend frontend docker-compose.yml docker-compose.hub.yml docker-compose.beta.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}'
|
|
|
|
if [ ! -f '${deploy_path}/.env' ] && [ -f '${prod_path}/.env' ]; then
|
|
cp '${prod_path}/.env' '${deploy_path}/.env'
|
|
fi
|
|
|
|
mkdir -p '${deploy_path}/data'
|
|
if [ ! -f '${deploy_path}/data/magent.db' ] && [ -d '${prod_path}/data' ]; then
|
|
cp -a '${prod_path}/data/.' '${deploy_path}/data/'
|
|
fi
|
|
|
|
cd '${deploy_path}'
|
|
docker compose -p magent-beta -f docker-compose.beta.yml up -d --build
|
|
"
|
|
|
|
echo "Running remote beta smoke checks"
|
|
ssh ${ssh_opts} "${remote}" "
|
|
set -e
|
|
python3 - <<'PY'
|
|
from urllib import request
|
|
|
|
checks = [
|
|
('http://127.0.0.1:8100/health', 200),
|
|
('http://127.0.0.1:3100/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 "Beta deployment completed successfully"
|