#!/usr/bin/env bash set -euo pipefail # Deploy CV Generator to production # Run from the repo root: ci/deploy.sh SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_DIR="$(dirname "$SCRIPT_DIR")" ENV_FILE="$REPO_DIR/.env.prod" COMPOSE_FILE="$REPO_DIR/docker-compose.prod.yml" cd "$REPO_DIR" if [ ! -f "$ENV_FILE" ]; then echo "Error: $ENV_FILE not found. Copy ci/.env.prod.example to .env.prod and configure it." exit 1 fi # Export env vars for Caddy / compose set -a source "$ENV_FILE" set +a echo "==> Pulling latest code" git pull --ff-only echo "==> Rebuilding project-q (if needed)" if [ -d "$PROJECT_Q_PATH" ]; then (cd "$PROJECT_Q_PATH" && git pull --ff-only && npm install && npm run build) else echo "Warning: PROJECT_Q_PATH=$PROJECT_Q_PATH not found. Build may fail." fi echo "==> Regenerating Docker manifests" sh .docker/copy-manifests.sh echo "==> Building images" docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" build echo "==> Running database migrations" docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" run --rm server \ sh -c "cd /app/apps/server && npx prisma migrate deploy" echo "==> Starting services" docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" up -d echo "==> Seeding database (idempotent)" docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" exec server \ node dist/scripts/seed.js echo "==> Cleaning up old images" docker image prune -f echo "" echo "==> Deploy complete!" docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" ps echo "" echo "Run 'docker compose -f $COMPOSE_FILE --env-file $ENV_FILE logs -f' to watch logs"