39354-vm/scripts/flatlogic-deploy.sh
2026-03-28 04:47:13 +00:00

59 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
PROJECT_DIR="${PROJECT_DIR:-$(pwd)}"
DEPLOY_BRANCH="${DEPLOY_BRANCH:-main}"
STORE_PORT="${STORE_PORT:-3001}"
API_PORT="${API_PORT:-8080}"
cd "$PROJECT_DIR"
echo "[deploy] Updating repository to origin/${DEPLOY_BRANCH}"
git fetch origin "$DEPLOY_BRANCH"
git checkout "$DEPLOY_BRANCH"
git reset --hard "origin/$DEPLOY_BRANCH"
echo "[deploy] Ensuring pnpm is available"
corepack enable
corepack prepare pnpm@10.16.1 --activate
echo "[deploy] Installing dependencies"
pnpm install --frozen-lockfile
echo "[deploy] Running checks"
pnpm typecheck
pnpm build
if [[ -n "${DATABASE_URL:-}" ]]; then
echo "[deploy] Applying Drizzle schema to external PostgreSQL/Supabase"
pnpm --filter @workspace/db run push
else
echo "[deploy] DATABASE_URL is missing; skipping DB schema push"
fi
echo "[deploy] Restarting storefront"
if pm2 describe extra-store >/dev/null 2>&1; then
PORT="$STORE_PORT" pm2 restart extra-store --update-env
else
PORT="$STORE_PORT" pm2 start pnpm --name extra-store --interpreter bash -- -lc "pnpm --filter @workspace/extra-store run dev"
fi
if [[ -n "${DATABASE_URL:-}" && -n "${ADMIN_TOKEN:-}" && -n "${API_INGEST_KEY:-}" ]]; then
echo "[deploy] Restarting API backend"
if pm2 describe flatlogic-api >/dev/null 2>&1; then
PORT="$API_PORT" NODE_ENV=production pm2 restart flatlogic-api --update-env
else
PORT="$API_PORT" NODE_ENV=production pm2 start pnpm --name flatlogic-api --interpreter bash -- -lc "pnpm --filter @workspace/api-server run start"
fi
else
echo "[deploy] API secrets are incomplete; skipping API process start"
fi
echo "[deploy] Health checks"
curl -fsS "http://127.0.0.1:${STORE_PORT}/" >/dev/null
if pm2 describe flatlogic-api >/dev/null 2>&1; then
curl -fsS "http://127.0.0.1:${API_PORT}/api/healthz" >/dev/null
fi
echo "[deploy] Done"