From 18b1e0f66eb50ff1d322711c53dd38fb4537b89b Mon Sep 17 00:00:00 2001 From: Paul Nothaft <53005142+the-luap@users.noreply.github.com> Date: Sun, 16 Aug 2026 18:57:44 +0200 Subject: [PATCH] ci(tests): run the gated real-Postgres .picpeak cases in the backend job (#1056) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The .picpeak restore suites gate their Postgres cases behind PICPEAK_PG_TEST_URL and describe.skip themselves out when it is unset. That variable was set in no workflow, so those cases have never run in CI — the suites reported green while silently skipping the half that needs a real database: sequence resync, operator/role preservation across a cross-instance restore, and whether a coerced row lands with the right STORED VALUES rather than merely not throwing. Add a postgres:15-alpine service to the backend job (same shape schema-drift already uses) and point the variable at it. Everything else in the suite still runs on SQLite; this only un-gates the cases that were skipping. Verified against a real Postgres 15 before wiring: picpeakRestorePg 4/4 and picpeakCrossEngine 11/11 (8 of which were previously skipped across both). Matters now because #1043 opens sqlite -> pg restore to the upload UI, so the coercion layer's correctness stops being a CLI-only concern. Co-authored-by: Paul Nothaft --- .github/workflows/tests.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index fd83a548..6f47727d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -30,6 +30,29 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 + # The .picpeak restore suites gate their real-Postgres cases behind + # PICPEAK_PG_TEST_URL and `describe.skip` themselves out when it is + # unset — so until now they never ran here. That hid the half that + # matters: sequence resync, operator/role preservation across a + # cross-instance restore, and (with #1041) whether a SQLite-shaped + # row actually lands in Postgres with the right STORED VALUES rather + # than merely not throwing. Everything else in the suite still runs + # on SQLite; this service only un-gates those cases. + services: + postgres: + image: postgres:15-alpine + env: + POSTGRES_USER: picpeak + POSTGRES_PASSWORD: testpass + POSTGRES_DB: picpeak_test + options: >- + --health-cmd "pg_isready -U picpeak -d picpeak_test" + --health-interval 2s + --health-timeout 2s + --health-retries 30 + ports: + - 5432:5432 + steps: - name: Checkout code uses: actions/checkout@v4 @@ -52,6 +75,9 @@ jobs: # The S3 path itself is covered separately by the integration # suite when MinIO is provisioned. SKIP_S3_TESTS: 'true' + # Un-gates the real-Postgres cases in the .picpeak restore suites + # (see the `services:` note above). Absent it they silently skip. + PICPEAK_PG_TEST_URL: 'postgres://picpeak:testpass@127.0.0.1:5432/picpeak_test' run: | # Excluded suites — fail on upstream/beta too, tracked # separately as test-infra debt: