From 047f1266b9278b5c1d8934a9f2611b725ce1f537 Mon Sep 17 00:00:00 2001 From: jassim Date: Thu, 4 Sep 2025 12:31:24 +0000 Subject: [PATCH] Update scripts/migrate-all.sh --- scripts/migrate-all.sh | 84 +++++++++++++++++++++++++++++++----------- 1 file changed, 63 insertions(+), 21 deletions(-) diff --git a/scripts/migrate-all.sh b/scripts/migrate-all.sh index f8a4534..e17a0e5 100755 --- a/scripts/migrate-all.sh +++ b/scripts/migrate-all.sh @@ -2,55 +2,97 @@ 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)" -# Default services. If arguments are provided, they will override this list. +# Default services list (can be overridden by CLI args) default_services=( "user-auth" "template-manager" ) +# If arguments are passed, they override default services if [ "$#" -gt 0 ]; then services=("$@") else services=("${default_services[@]}") fi -echo "Running migrations for services in: ${ROOT_DIR}/services" -echo "Target services: ${services[*]}" +# Log function with timestamp +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 SERVICE_DIR="${ROOT_DIR}/services/${service}" + 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 fi if [ ! -f "${SERVICE_DIR}/package.json" ]; then - echo "Skipping ${service}: package.json not found" >&2 + log "Skipping ${service}: package.json not found" continue fi - echo "\n========================================" - echo "āž”ļø ${service}: installing deps (ci)" - echo "========================================" - (cd "${SERVICE_DIR}" && npm ci --no-audit --no-fund --prefer-offline) + log "========================================" + log "āž”ļø ${service}: installing dependencies" + log "========================================" - echo "\n========================================" - echo "šŸš€ ${service}: running migrations" - echo "========================================" + if ! (cd "${SERVICE_DIR}" && npm ci --no-audit --no-fund --prefer-offline); then + log "ERROR: Failed to install dependencies for ${service}" + failed_services+=("${service}") + continue + fi - # Attempt to run migrate; if not defined, npm will error and we handle gracefully - if (cd "${SERVICE_DIR}" && npm run -s migrate); then - echo "āœ… ${service}: migrations completed" + log "========================================" + log "šŸš€ ${service}: running migrations" + 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 - echo "āš ļø ${service}: 'npm run migrate' failed or not defined; skipping" + log "ā„¹ļø ${service}: no 'migrate' script found; skipping" fi 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