#!/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