Update scripts/migrate-all.sh
This commit is contained in:
parent
5da1072c08
commit
047f1266b9
@ -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 "========================================"
|
||||||
|
log "🚀 ${service}: running migrations"
|
||||||
|
log "========================================"
|
||||||
|
|
||||||
|
if grep -q '"migrate":' "${SERVICE_DIR}/package.json"; then
|
||||||
if (cd "${SERVICE_DIR}" && npm run -s migrate); then
|
if (cd "${SERVICE_DIR}" && npm run -s migrate); then
|
||||||
echo "✅ ${service}: migrations completed"
|
log "✅ ${service}: migrations completed successfully"
|
||||||
else
|
else
|
||||||
echo "⚠️ ${service}: 'npm run migrate' failed or not defined; skipping"
|
log "⚠️ ${service}: migration failed"
|
||||||
|
failed_services+=("${service}")
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user