Update scripts/migrate-all.sh

This commit is contained in:
jassim 2025-09-04 12:31:24 +00:00
parent 5da1072c08
commit 047f1266b9

View File

@ -2,55 +2,97 @@
set -euo pipefail set -euo pipefail
# This script runs database migrations for all services that define a migrate script. # ========================================
# Ensure databases are reachable and required env vars are set (e.g., DATABASE_URL or individual PG vars). # MIGRATION SCRIPT FOR ALL SERVICES
# ========================================
# Get root directory (one level above this script)
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# Default services. If arguments are provided, they will override this list. # Default services list (can be overridden by CLI args)
default_services=( default_services=(
"user-auth" "user-auth"
"template-manager" "template-manager"
) )
# If arguments are passed, they override default services
if [ "$#" -gt 0 ]; then if [ "$#" -gt 0 ]; then
services=("$@") services=("$@")
else else
services=("${default_services[@]}") services=("${default_services[@]}")
fi fi
echo "Running migrations for services in: ${ROOT_DIR}/services" # Log function with timestamp
echo "Target services: ${services[*]}" log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}
log "Starting database migrations..."
log "Root directory: ${ROOT_DIR}"
log "Target services: ${services[*]}"
# Validate required environment variables (if using DATABASE_URL or PG vars)
required_vars=("DATABASE_URL")
missing_vars=()
for var in "${required_vars[@]}"; do
if [ -z "${!var:-}" ]; then
missing_vars+=("$var")
fi
done
if [ ${#missing_vars[@]} -gt 0 ]; then
log "ERROR: Missing required environment variables: ${missing_vars[*]}"
exit 1
fi
# Track failed services
failed_services=()
for service in "${services[@]}"; do for service in "${services[@]}"; do
SERVICE_DIR="${ROOT_DIR}/services/${service}" SERVICE_DIR="${ROOT_DIR}/services/${service}"
if [ ! -d "${SERVICE_DIR}" ]; then if [ ! -d "${SERVICE_DIR}" ]; then
echo "Skipping ${service}: directory not found at ${SERVICE_DIR}" >&2 log "Skipping ${service}: directory not found at ${SERVICE_DIR}"
continue continue
fi fi
if [ ! -f "${SERVICE_DIR}/package.json" ]; then if [ ! -f "${SERVICE_DIR}/package.json" ]; then
echo "Skipping ${service}: package.json not found" >&2 log "Skipping ${service}: package.json not found"
continue continue
fi fi
echo "\n========================================" log "========================================"
echo "➡️ ${service}: installing deps (ci)" log "➡️ ${service}: installing dependencies"
echo "========================================" log "========================================"
(cd "${SERVICE_DIR}" && npm ci --no-audit --no-fund --prefer-offline)
echo "\n========================================" if ! (cd "${SERVICE_DIR}" && npm ci --no-audit --no-fund --prefer-offline); then
echo "🚀 ${service}: running migrations" log "ERROR: Failed to install dependencies for ${service}"
echo "========================================" failed_services+=("${service}")
continue
fi
# Attempt to run migrate; if not defined, npm will error and we handle gracefully log "========================================"
if (cd "${SERVICE_DIR}" && npm run -s migrate); then log "🚀 ${service}: running migrations"
echo "${service}: migrations completed" log "========================================"
if grep -q '"migrate":' "${SERVICE_DIR}/package.json"; then
if (cd "${SERVICE_DIR}" && npm run -s migrate); then
log "${service}: migrations completed successfully"
else
log "⚠️ ${service}: migration failed"
failed_services+=("${service}")
fi
else else
echo "⚠️ ${service}: 'npm run migrate' failed or not defined; skipping" log " ${service}: no 'migrate' script found; skipping"
fi fi
done done
echo "\n✅ All migrations attempted. Review logs above for any errors." log "========================================"
if [ ${#failed_services[@]} -gt 0 ]; then
log "MIGRATIONS COMPLETED WITH ERRORS"
log "Failed services: ${failed_services[*]}"
exit 1
else
log "✅ All migrations completed successfully"
fi