diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d37b71c..fe3f2e3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -351,8 +351,20 @@ jobs: run: pnpm --filter @capakraken/web exec playwright install-deps chromium - name: Push DB schema & seed + env: + PGPASSWORD: capakraken_test run: | - pnpm --filter @capakraken/db exec prisma db push --schema ./prisma/schema.prisma --force-reset --accept-data-loss --skip-generate + # Nuke any leftover schema state from a previous job that shared the + # postgres service container (act_runner reuses service volumes). + # --force-reset alone proved unreliable here: push reported "in sync" + # but audit_logs ended up missing, suggesting a split-brain between + # the reset and the subsequent DDL. + psql -h postgres -U capakraken -d capakraken_test -v ON_ERROR_STOP=1 \ + -c "DROP SCHEMA IF EXISTS public CASCADE; CREATE SCHEMA public; GRANT ALL ON SCHEMA public TO capakraken; GRANT ALL ON SCHEMA public TO public;" + pnpm --filter @capakraken/db exec prisma db push --schema ./prisma/schema.prisma --accept-data-loss --skip-generate + # Sanity check: confirm the schema actually landed before seeding. + psql -h postgres -U capakraken -d capakraken_test -v ON_ERROR_STOP=1 \ + -c "SELECT to_regclass('public.audit_logs') AS audit_logs, to_regclass('public.users') AS users;" pnpm db:seed - name: Run E2E tests @@ -387,6 +399,13 @@ jobs: PGADMIN_PASSWORD=ci-pgadmin EOF + - name: Tear down any stale stack & volumes + # act_runner on self-hosted QNAP keeps named compose volumes between + # runs. A previous run's failed migration entry in _prisma_migrations + # causes P3009 on the next migrate deploy; wipe volumes for a truly + # fresh deploy test every time. + run: docker compose -f docker-compose.yml -f docker-compose.ci.yml down -v --remove-orphans || true + - name: Start infrastructure (postgres + redis) run: docker compose -f docker-compose.yml -f docker-compose.ci.yml up -d postgres redis