#!/bin/sh set -eu run_db_push() { echo "Syncing schema with prisma db push..." npx prisma db push } if [ ! -d "prisma/migrations" ] || [ -z "$(find prisma/migrations -mindepth 1 -maxdepth 1 -type d 2>/dev/null)" ]; then echo "No Prisma migrations found, syncing schema with db push..." run_db_push else echo "Applying Prisma migrations with migrate deploy..." MIGRATE_LOG="$(mktemp)" set +e npx prisma migrate deploy >"$MIGRATE_LOG" 2>&1 MIGRATE_EXIT=$? set -e if [ "$MIGRATE_EXIT" -eq 0 ]; then cat "$MIGRATE_LOG" rm -f "$MIGRATE_LOG" elif grep -q "P3005" "$MIGRATE_LOG"; then cat "$MIGRATE_LOG" >&2 echo "" >&2 echo "prisma migrate deploy failed with P3005: database already has schema but no migration history (typical after prisma db push)." >&2 echo "Falling back to prisma db push so the schema stays in sync." >&2 rm -f "$MIGRATE_LOG" run_db_push elif grep -q "P3009" "$MIGRATE_LOG" || grep -q "P3018" "$MIGRATE_LOG" || grep -q "42P01" "$MIGRATE_LOG"; then cat "$MIGRATE_LOG" >&2 echo "" >&2 echo "prisma migrate deploy failed due to an unrecoverable migration state for this environment (failed migration / missing relation)." >&2 echo "Falling back to prisma db push to ensure the schema exists and matches schema.prisma." >&2 rm -f "$MIGRATE_LOG" run_db_push else cat "$MIGRATE_LOG" >&2 rm -f "$MIGRATE_LOG" exit "$MIGRATE_EXIT" fi fi exec node dist/src/main.js