diff --git a/scripts/docker-entrypoint.sh b/scripts/docker-entrypoint.sh index 024fdbb..8edac4c 100755 --- a/scripts/docker-entrypoint.sh +++ b/scripts/docker-entrypoint.sh @@ -23,29 +23,50 @@ deploy_migrations() { 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) + # 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" + 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) - if pnpm dlx prisma migrate resolve --applied "$MIGRATION_NAME" 2>&1; then + 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 - pnpm dlx prisma migrate deploy || { - echo "Migration deploy still failed after resolution, continuing anyway..." + if pnpm dlx prisma migrate deploy 2>&1; then + echo "Migrations deployed successfully after resolution" return 0 - } - return 0 + else + echo "Migration deploy still failed after resolution, but continuing..." + return 0 + fi else - echo "Failed to resolve migration, but continuing..." - return 0 + # 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 }