diff --git a/server/docker-entrypoint.sh b/server/docker-entrypoint.sh index 7f715fa..f373c40 100644 --- a/server/docker-entrypoint.sh +++ b/server/docker-entrypoint.sh @@ -1,12 +1,37 @@ #!/bin/sh set -eu -if [ -d "prisma/migrations" ] && [ -n "$(find prisma/migrations -mindepth 1 -maxdepth 1 -type d 2>/dev/null)" ]; then - echo "Applying Prisma migrations with migrate deploy..." - npx prisma migrate deploy -else - echo "No Prisma migrations found, syncing schema with db push..." +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 + else + cat "$MIGRATE_LOG" >&2 + rm -f "$MIGRATE_LOG" + exit "$MIGRATE_EXIT" + fi fi exec node dist/src/main.js