Some checks failed
Sync dev → Gitea / Mirror dev to Gitea (push) Has been cancelled
Commits merged: - fix(FN-191): fix typecheck and lint issues for bootstrap changes - test(FN-191): complete Step 4 — update tests for new multi-table bootstrap logic - fix(FN-191): complete Step 3 — strengthen bootstrap canary to detect partial-baseline state - fix(FN-191): complete Step 2 — add dotenv bootstrap loader to migrate.ts - fix(FN-191): complete Step 1 — replace manual migration comment with working db:migrate step Files changed: apps/api/src/database/__tests__/migrate.spec.ts | 146 ++++++++++++++++++------ apps/api/src/database/migrate.ts | 124 ++++++++++++++------ scripts/deploy.sh | 12 +- 3 files changed, 203 insertions(+), 79 deletions(-) Fusion-Task-Id: FN-191
69 lines
2.4 KiB
Bash
Executable File
69 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# ──────────────────────────────────────────────
|
|
# Zero-downtime deploy script for sase-v2
|
|
# ──────────────────────────────────────────────
|
|
|
|
# Load NVM so node/pnpm are on PATH under non-interactive SSH sessions
|
|
export NVM_DIR="$HOME/.nvm"
|
|
# shellcheck disable=SC1091
|
|
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
|
|
|
|
DEPLOY_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
LOG_PREFIX="[deploy]"
|
|
|
|
log() {
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $LOG_PREFIX $1"
|
|
}
|
|
|
|
error_exit() {
|
|
log "ERROR: $1"
|
|
exit 1
|
|
}
|
|
|
|
cd "$DEPLOY_DIR" || error_exit "Cannot change to project directory: $DEPLOY_DIR"
|
|
|
|
log "Starting zero-downtime deployment..."
|
|
log "Working directory: $DEPLOY_DIR"
|
|
|
|
# ── Step 1: Sync to origin/main ──
|
|
# Hard reset (not pull) so stale build artifacts on the deploy server
|
|
# (e.g. apps/web/tsconfig.tsbuildinfo) don't block updates. The deploy
|
|
# server is treated as a deployment target, not a development checkout.
|
|
log "Fetching and resetting to origin/main..."
|
|
git fetch origin main || error_exit "git fetch failed"
|
|
git reset --hard origin/main || error_exit "git reset --hard failed"
|
|
|
|
# ── Step 2: Install dependencies ──
|
|
log "Installing dependencies (frozen lockfile)..."
|
|
pnpm install --frozen-lockfile || error_exit "pnpm install failed"
|
|
|
|
# ── Step 3: Build all packages and apps ──
|
|
log "Building all packages..."
|
|
pnpm build || error_exit "Build failed"
|
|
|
|
# ── Step 3b: Pre-render public pages for SEO ──
|
|
log "Installing Playwright Chromium (if missing)..."
|
|
cd apps/web
|
|
npx playwright install chromium --with-deps 2>/dev/null || log "WARNING: playwright install skipped"
|
|
log "Pre-rendering public pages..."
|
|
pnpm prerender || log "WARNING: Pre-render failed (non-fatal, continuing deploy)"
|
|
cd "$DEPLOY_DIR"
|
|
|
|
# ── Step 4: Database migrations ──
|
|
log "Running database migrations..."
|
|
cd apps/api
|
|
pnpm db:migrate || error_exit "Database migration failed"
|
|
cd "$DEPLOY_DIR"
|
|
|
|
# ── Step 5: Zero-downtime PM2 reload ──
|
|
log "Reloading PM2 processes (zero-downtime)..."
|
|
pm2 reload ecosystem.config.js || error_exit "PM2 reload failed"
|
|
|
|
# ── Step 6: Verify processes are running ──
|
|
log "Verifying PM2 process status..."
|
|
pm2 list
|
|
|
|
log "Deployment completed successfully!"
|