because I got bored of customising my CV for every job
1#!/usr/bin/env bash
2set -euo pipefail
3
4# Deploy CV Generator to production
5# Run from the repo root: ci/deploy.sh
6
7SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8REPO_DIR="$(dirname "$SCRIPT_DIR")"
9ENV_FILE="$REPO_DIR/.env.prod"
10COMPOSE_FILE="$REPO_DIR/docker-compose.prod.yml"
11
12cd "$REPO_DIR"
13
14if [ ! -f "$ENV_FILE" ]; then
15 echo "Error: $ENV_FILE not found. Copy ci/.env.prod.example to .env.prod and configure it."
16 exit 1
17fi
18
19# Export env vars for Caddy / compose
20set -a
21source "$ENV_FILE"
22set +a
23
24echo "==> Pulling latest code"
25git pull --ff-only
26
27echo "==> Rebuilding project-q (if needed)"
28if [ -d "$PROJECT_Q_PATH" ]; then
29 (cd "$PROJECT_Q_PATH" && git pull --ff-only && npm install && npm run build)
30else
31 echo "Warning: PROJECT_Q_PATH=$PROJECT_Q_PATH not found. Build may fail."
32fi
33
34echo "==> Regenerating Docker manifests"
35sh .docker/copy-manifests.sh
36
37echo "==> Building images"
38docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" build
39
40echo "==> Running database migrations"
41docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" run --rm server \
42 sh -c "cd /app/apps/server && npx prisma migrate deploy"
43
44echo "==> Starting services"
45docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" up -d
46
47echo "==> Seeding database (idempotent)"
48docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" exec server \
49 node dist/scripts/seed.js
50
51echo "==> Cleaning up old images"
52docker image prune -f
53
54echo ""
55echo "==> Deploy complete!"
56docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" ps
57echo ""
58echo "Run 'docker compose -f $COMPOSE_FILE --env-file $ENV_FILE logs -f' to watch logs"