Files
got-gaming/scripts/docker-entrypoint.sh

80 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
# Create necessary directories
mkdir -p /app/data
mkdir -p /app/public/uploads
mkdir -p /app/public/uploads/backgrounds
# Function to deploy migrations with automatic failure resolution
deploy_migrations() {
echo "Deploying migrations..."
# Try to deploy migrations
if pnpm dlx prisma migrate deploy 2>&1 | tee /tmp/migrate.log; then
echo "Migrations deployed successfully"
return 0
fi
# Check if error is about failed migrations (P3009)
if ! grep -q "P3009" /tmp/migrate.log && ! grep -q "failed migrations" /tmp/migrate.log; then
echo "Migration error is not about failed migrations"
return 1
fi
echo "Found failed migrations, attempting to resolve..."
# Extract migration name from error - look for text between backticks
# Pattern: The `20251210120000_add_event_feedback` migration
MIGRATION_NAME=$(grep -oE "\`[0-9_]+[a-zA-Z_]+\`" /tmp/migrate.log | tr -d '\`' | head -1)
# If still not found, try without backticks (fallback)
if [ -z "$MIGRATION_NAME" ]; then
MIGRATION_NAME=$(grep "failed" /tmp/migrate.log | grep -oE "[0-9]{14}_[a-zA-Z_]+" | head -1)
fi
if [ -z "$MIGRATION_NAME" ]; then
echo "Could not extract migration name from error. Log content:"
cat /tmp/migrate.log
return 1
fi
echo "Resolving failed migration: $MIGRATION_NAME"
# Try to resolve as applied (migration might have partially succeeded)
RESOLVE_OUTPUT=$(pnpm dlx prisma migrate resolve --applied "$MIGRATION_NAME" 2>&1)
RESOLVE_EXIT=$?
echo "$RESOLVE_OUTPUT"
if [ $RESOLVE_EXIT -eq 0 ]; then
echo "Migration resolved successfully, retrying deploy..."
# Retry migration deploy
if pnpm dlx prisma migrate deploy 2>&1; then
echo "Migrations deployed successfully after resolution"
return 0
else
echo "Migration deploy still failed after resolution, but continuing..."
return 0
fi
else
# Check if migration is already marked as applied
if echo "$RESOLVE_OUTPUT" | grep -q "already recorded as applied"; then
echo "Migration is already marked as applied, retrying deploy..."
pnpm dlx prisma migrate deploy 2>&1 || true
return 0
else
echo "Failed to resolve migration: $RESOLVE_OUTPUT"
echo "Continuing anyway - app might still work if migration was partially applied"
return 0
fi
fi
}
# Deploy migrations (don't fail if it errors - app might still work)
deploy_migrations || {
echo "Migration deployment had issues, but continuing to start app..."
}
# Start the application
exec pnpm start