Files
sase.tr/scripts/deploy.sh
Fusion c9c168b89c
Some checks failed
Sync dev → Gitea / Mirror dev to Gitea (push) Has been cancelled
feat(FN-191): replace manual migration comment with working db:migrate step (+4 more)
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
2026-05-12 05:25:37 +00:00

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