#!/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"