mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 23:41:08 +02:00
116 lines
3.2 KiB
Bash
Executable file
116 lines
3.2 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Database migration script for Supabase projects
|
|
# Usage: ./migrate-db.sh [project] [environment]
|
|
# Example: ./migrate-db.sh chat staging
|
|
# Example: ./migrate-db.sh mana-core-auth production
|
|
|
|
set -e
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
PROJECT=${1}
|
|
ENVIRONMENT=${2:-"staging"}
|
|
|
|
log_info() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Validate input
|
|
if [ -z "$PROJECT" ]; then
|
|
log_error "Project name is required"
|
|
echo "Usage: ./migrate-db.sh [project] [environment]"
|
|
echo "Available projects: chat, maerchenzauber, manadeck, memoro, picture, nutriphi, news, mana-core-auth"
|
|
exit 1
|
|
fi
|
|
|
|
log_info "Running database migrations for ${PROJECT} (${ENVIRONMENT})..."
|
|
|
|
# Set Supabase environment variables based on project and environment
|
|
case "$PROJECT" in
|
|
"chat")
|
|
if [ "$ENVIRONMENT" == "production" ]; then
|
|
SUPABASE_URL=${CHAT_SUPABASE_URL}
|
|
SUPABASE_SERVICE_KEY=${CHAT_SUPABASE_SERVICE_KEY}
|
|
else
|
|
SUPABASE_URL=${STAGING_CHAT_SUPABASE_URL}
|
|
SUPABASE_SERVICE_KEY=${STAGING_CHAT_SUPABASE_SERVICE_KEY}
|
|
fi
|
|
MIGRATION_DIR="apps/chat/supabase/migrations"
|
|
;;
|
|
"maerchenzauber")
|
|
if [ "$ENVIRONMENT" == "production" ]; then
|
|
SUPABASE_URL=${MAERCHENZAUBER_SUPABASE_URL}
|
|
SUPABASE_SERVICE_KEY=${MAERCHENZAUBER_SUPABASE_SERVICE_KEY}
|
|
else
|
|
SUPABASE_URL=${STAGING_MAERCHENZAUBER_SUPABASE_URL}
|
|
SUPABASE_SERVICE_KEY=${STAGING_MAERCHENZAUBER_SUPABASE_SERVICE_KEY}
|
|
fi
|
|
MIGRATION_DIR="apps/maerchenzauber/supabase/migrations"
|
|
;;
|
|
"mana-core-auth")
|
|
if [ "$ENVIRONMENT" == "production" ]; then
|
|
DATABASE_URL=${PRODUCTION_AUTH_DATABASE_URL}
|
|
else
|
|
DATABASE_URL=${STAGING_AUTH_DATABASE_URL}
|
|
fi
|
|
MIGRATION_DIR="services/mana-core-auth/src/db/migrations"
|
|
|
|
# Use Drizzle for mana-core-auth
|
|
log_info "Running Drizzle migrations for mana-core-auth..."
|
|
cd services/mana-core-auth
|
|
pnpm run db:migrate
|
|
exit 0
|
|
;;
|
|
*)
|
|
log_error "Unknown project: $PROJECT"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Check if migration directory exists
|
|
if [ ! -d "$MIGRATION_DIR" ]; then
|
|
log_warn "No migrations found for ${PROJECT}"
|
|
exit 0
|
|
fi
|
|
|
|
# Check for Supabase CLI
|
|
if ! command -v supabase &> /dev/null; then
|
|
log_error "Supabase CLI is not installed"
|
|
log_info "Install it with: npm install -g supabase"
|
|
exit 1
|
|
fi
|
|
|
|
# Link to remote project
|
|
log_info "Linking to Supabase project..."
|
|
supabase link --project-ref $(echo $SUPABASE_URL | sed 's|https://||' | sed 's|.supabase.co||')
|
|
|
|
# Run migrations
|
|
log_info "Applying migrations from ${MIGRATION_DIR}..."
|
|
cd $MIGRATION_DIR
|
|
|
|
# List pending migrations
|
|
log_info "Pending migrations:"
|
|
ls -1 *.sql 2>/dev/null || log_info "No SQL migrations found"
|
|
|
|
# Apply migrations using Supabase CLI
|
|
for migration in *.sql; do
|
|
if [ -f "$migration" ]; then
|
|
log_info "Applying migration: $migration"
|
|
supabase db push
|
|
fi
|
|
done
|
|
|
|
log_info "Database migrations completed successfully! ✅"
|