codenuk_backend_mine/scripts/migrate-all.sh
2025-10-10 08:56:39 +05:30

101 lines
3.0 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# Exit on error
set -e
# ========================================
# MIGRATION SCRIPT FOR ALL SERVICES
# ========================================
# Get root directory (one level above this script)
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
# Default services list (can be overridden by CLI args)
default_services="shared-schemas user-auth template-manager unified-tech-stack-service git-integration"
# If arguments are passed, they override default services
if [ "$#" -gt 0 ]; then
services="$*"
else
services="$default_services"
fi
# 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)
if [ -z "${DATABASE_URL:-}" ]; then
log "ERROR: Missing required environment variable: DATABASE_URL"
exit 1
fi
# Always attempt to run migrations on startup.
# Each service's migration script must be idempotent and skip already-applied versions.
# The previous global marker skip is removed to allow new migrations to apply automatically.
# Track failed services
failed_services=""
for service in $services; do
SERVICE_DIR="${ROOT_DIR}/services/${service}"
if [ ! -d "${SERVICE_DIR}" ]; then
log "Skipping ${service}: directory not found at ${SERVICE_DIR}"
continue
fi
if [ ! -f "${SERVICE_DIR}/package.json" ]; then
log "Skipping ${service}: package.json not found"
continue
fi
log "========================================"
log "➡️ ${service}: installing dependencies"
log "========================================"
# Check if package-lock.json exists, use appropriate install command
if [ -f "${SERVICE_DIR}/package-lock.json" ]; then
if ! (cd "${SERVICE_DIR}" && npm ci --no-audit --no-fund --prefer-offline); then
log "ERROR: Failed to install dependencies for ${service}"
failed_services="${failed_services} ${service}"
continue
fi
else
if ! (cd "${SERVICE_DIR}" && npm install --no-audit --no-fund); then
log "ERROR: Failed to install dependencies for ${service}"
failed_services="${failed_services} ${service}"
continue
fi
fi
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="${failed_services} ${service}"
fi
else
log " ${service}: no 'migrate' script found; skipping"
fi
done
log "========================================"
if [ -n "$failed_services" ]; then
log "MIGRATIONS COMPLETED WITH ERRORS"
log "Failed services: $failed_services"
exit 1
else
log "✅ All migrations completed successfully"
fi