#!/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 (format: migration `20251210120000_add_event_feedback`) # Using sed instead of grep -P for Alpine Linux compatibility MIGRATION_NAME=$(grep "migration \`" /tmp/migrate.log | sed -n "s/.*migration \`\([0-9_]*[a-z_]*\)\`.*/\1/p" | head -1) if [ -z "$MIGRATION_NAME" ]; then echo "Could not extract migration name from error" return 1 fi echo "Resolving failed migration: $MIGRATION_NAME" # Try to resolve as applied (migration might have partially succeeded) if pnpm dlx prisma migrate resolve --applied "$MIGRATION_NAME" 2>&1; then echo "Migration resolved successfully, retrying deploy..." # Retry migration deploy pnpm dlx prisma migrate deploy || { echo "Migration deploy still failed after resolution, continuing anyway..." return 0 } return 0 else echo "Failed to resolve migration, but continuing..." return 0 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