Files

46 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
readonly LOCAL_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
readonly PROJECT_ROOT="$(cd "$LOCAL_ROOT/../.." && pwd)"
configuration_exports=$(/usr/bin/python3 "$PROJECT_ROOT/Tools/release_configuration.py" --shell)
eval "$configuration_exports"
readonly DEPLOY_HOST="$PROJECTQUINT_DEPLOY_HOST"
readonly DEPLOY_KEY="$PROJECTQUINT_DEPLOY_KEY"
readonly REMOTE_SOURCE="$PROJECTQUINT_REMOTE_SOURCE"
readonly REMOTE_WEB_ROOT="/var/www/projectquint"
readonly REMOTE_NGINX="/etc/nginx/sites-available/projectquint.conf"
readonly SSH_ARGS=(-i "$DEPLOY_KEY" -o IdentitiesOnly=yes -o BatchMode=yes)
readonly RSYNC_SSH=$(/usr/bin/python3 -c 'import shlex, sys; print(shlex.join(sys.argv[1:]))' ssh "${SSH_ARGS[@]}")
if [[ ! -f "$LOCAL_ROOT/package.json" || ! -d "$LOCAL_ROOT/dist" ]]; then
printf 'ProjectQuint site build is missing. Run npm run build first.\n' >&2
exit 1
fi
ssh "${SSH_ARGS[@]}" "$DEPLOY_HOST" \
"mkdir -p '$REMOTE_SOURCE' '$REMOTE_SOURCE/.deploy'"
rsync -a --delete \
--exclude node_modules \
--exclude dist \
--exclude .astro \
--exclude .deploy \
-e "$RSYNC_SSH" \
"$LOCAL_ROOT/" "$DEPLOY_HOST:$REMOTE_SOURCE/"
ssh "${SSH_ARGS[@]}" "$DEPLOY_HOST" \
"mkdir -p '$REMOTE_SOURCE/.deploy/dist'"
rsync -a --delete \
-e "$RSYNC_SSH" \
"$LOCAL_ROOT/dist/" "$DEPLOY_HOST:$REMOTE_SOURCE/.deploy/dist/"
ssh "${SSH_ARGS[@]}" "$DEPLOY_HOST" \
"sudo mkdir -p '$REMOTE_WEB_ROOT' &&
sudo rsync -a --delete '$REMOTE_SOURCE/.deploy/dist/' '$REMOTE_WEB_ROOT/' &&
sudo install -m 0644 '$REMOTE_SOURCE/ops/nginx/projectquint.conf' '$REMOTE_NGINX' &&
sudo ln -sfn '$REMOTE_NGINX' /etc/nginx/sites-enabled/projectquint.conf &&
sudo nginx -t &&
sudo systemctl reload nginx"