#!/usr/bin/env bash # Build Astro dist/ and rsync to the Talk Pro marketing host (talkpro.info). # Used by Gitea Actions and for manual deploys from this repo. # # Required (CI): TALKPRO_SSH_PRIVATE_KEY — PEM contents (Gitea secret) # Optional: TALKPRO_SSH_KEY_FILE — path to PEM (local) # Defaults match .env.deploy.example / Gitea workflow job env: # TALKPRO_HOST=13.214.179.69 TALKPRO_USER=ubuntu TALKPRO_REMOTE_ROOT=/home/ubuntu/talkpro set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" cd "$ROOT" HOST="${TALKPRO_HOST:-13.214.179.69}" USER="${TALKPRO_USER:-ubuntu}" REMOTE_ROOT="${TALKPRO_REMOTE_ROOT:-/home/ubuntu/talkpro}" [[ -n "$HOST" ]] || HOST=13.214.179.69 [[ -n "$USER" ]] || USER=ubuntu [[ -n "$REMOTE_ROOT" ]] || REMOTE_ROOT=/home/ubuntu/talkpro KEY_FILE="${TALKPRO_SSH_KEY_FILE:-}" TMP_KEY="" cleanup() { [[ -n "$TMP_KEY" && -f "$TMP_KEY" ]] && rm -f "$TMP_KEY" } trap cleanup EXIT if [[ -n "${TALKPRO_SSH_PRIVATE_KEY:-}" ]]; then TMP_KEY="$(mktemp)" chmod 600 "$TMP_KEY" printf '%s\n' "$TALKPRO_SSH_PRIVATE_KEY" > "$TMP_KEY" KEY_FILE="$TMP_KEY" elif [[ -z "$KEY_FILE" || ! -f "$KEY_FILE" ]]; then echo "ERROR: Set TALKPRO_SSH_PRIVATE_KEY (Gitea secret / env) or TALKPRO_SSH_KEY_FILE (local path)" >&2 exit 1 fi if [[ ! -s "$KEY_FILE" ]]; then echo "ERROR: SSH key file is empty — check TALKPRO_SSH_PRIVATE_KEY secret in Gitea" >&2 exit 1 fi chmod 600 "$KEY_FILE" SSH_OPTS=(-i "$KEY_FILE" -o BatchMode=yes -o StrictHostKeyChecking=accept-new) RSYNC_SSH="ssh -i ${KEY_FILE} -o BatchMode=yes -o StrictHostKeyChecking=accept-new" if [[ -f package-lock.json ]]; then npm ci else npm install fi npm run build "${SSH[@]}" "${USER}@${HOST}" "mkdir -p ${REMOTE_ROOT}" rsync -avz --delete \ -e "$RSYNC_SSH" \ dist/ \ "${USER}@${HOST}:${REMOTE_ROOT}/" echo "Deployed dist/ → ${USER}@${HOST}:${REMOTE_ROOT}/"