Some checks failed
Deploy to talkpro / build-and-sync (push) Failing after 14s
Gitea workflow no longer needs TALKPRO_HOST secret; defaults match talkpro VPS. Fail fast with a clear message if TALKPRO_SSH_PRIVATE_KEY is missing. Co-authored-by: Cursor <cursoragent@cursor.com>
61 lines
1.8 KiB
Bash
Executable File
61 lines
1.8 KiB
Bash
Executable File
#!/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}/"
|