Bug report
supabase test db on the Linux release build (tested: standalone Go binary from supabase_linux_amd64.tar.gz, and the .deb package -- both v2.100.1) reports:
Connecting to local database...
Files=0, Tests=0, 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)
Result: NOTESTS
and exits 0 (success), regardless of what path is given -- even when the target files unambiguously exist and are readable.
Tried, all producing the identical Files=0 result:
- Bare
supabase test db (no path argument) supabase test db supabase/tests/database (directory)supabase test db supabase/tests/database/ (trailing slash)supabase test db ./supabase/tests/databasesupabase test db supabase/tests/database/*.sql (shell-expanded individual files)supabase test db supabase/tests/database/one_specific_file.test.sql (single, definitely-existing file)- With and without
--local
Reproduction (self-contained)
# Any Linux host with Docker
git clone <any repo with supabase/tests/database/*.test.sql pgTAP files>cd<repo>
curl -fsSL -o sb.tar.gz https://github.com/supabase/cli/releases/download/v2.100.1/supabase_linux_amd64.tar.gz
mkdir sbx && tar xzf sb.tar.gz -C sbx
./sbx/supabase-go start
ls supabase/tests/database/*.sql # confirms files exist
./sbx/supabase-go test db supabase/tests/database
# Files=0, Tests=0, Result: NOTESTS -- despite the ls above showing real files
Reproduced in three independent environments: a custom self-hosted GitHub Actions runner container, a completely unrelated freshly-created ubuntu:24.04 container (Docker socket bind-mounted, no other shared state), and via docker exec directly. Confirmed not an issue with the reproducing environment's file layout, working directory, or Docker mount configuration -- pwd, ls, and file content are all correct at the exact point test db is invoked.
What I ruled out
- Not a missing-dependency issue: installed
postgresql-client (psql) and libtap-parser-sourcehandler-pgtap-perl (pg_prove) -- no change in behavior. - Not a subprocess-shelling issue:
supabase test db ... --debug shows zero trace of ever invoking pg_prove/psql/prove as a subprocess (no exec/cmd/prove mentions anywhere in the debug log). The Go binary appears to have its own native TAP-summary-formatted output (mimicking Test::Harness's classic Files=N, Tests=N, ... wallclock secs line) without ever calling out to Perl's prove/pg_prove at all. - Workaround confirmed: calling
pg_prove directly against the same local Postgres connection (pg_prove --host 127.0.0.1 --port 54322 --username postgres --dbname postgres supabase/tests/database/*.sql) works correctly and finds/runs all files as expected. So the underlying Postgres instance, pgTAP extension, and test files are all fine -- this is specifically test db's own internal file-argument handling that's broken on the Linux build. - Not a stale/cached-state issue: reproduced on a database freshly created via
supabase start moments earlier, in a container with no prior Supabase state at all.
Version
supabase --version
2.100.1
(also reproduced via the raw supabase-go binary from the same release tarball, so this isn't specific to the Bun-wrapped supabase entrypoint either)
Impact
Silent -- test db exits 0 with Result: NOTESTS, which most CI setups (including ours) don't treat as a failure. This means a CI job built around supabase test db on Linux can run zero tests indefinitely while reporting green, with no error surfaced anywhere. Given how easy this is to reproduce and how silent the failure mode is, this seems worth a loud warning/non-zero exit at minimum, even before the root cause is found.
Bug report
supabase test dbon the Linux release build (tested: standalone Go binary fromsupabase_linux_amd64.tar.gz, and the.debpackage -- both v2.100.1) reports:and exits 0 (success), regardless of what path is given -- even when the target files unambiguously exist and are readable.
Tried, all producing the identical
Files=0result:supabase test db(no path argument)supabase test db supabase/tests/database(directory)supabase test db supabase/tests/database/(trailing slash)supabase test db ./supabase/tests/databasesupabase test db supabase/tests/database/*.sql(shell-expanded individual files)supabase test db supabase/tests/database/one_specific_file.test.sql(single, definitely-existing file)--localReproduction (self-contained)
Reproduced in three independent environments: a custom self-hosted GitHub Actions runner container, a completely unrelated freshly-created
ubuntu:24.04container (Docker socket bind-mounted, no other shared state), and viadocker execdirectly. Confirmed not an issue with the reproducing environment's file layout, working directory, or Docker mount configuration --pwd,ls, and file content are all correct at the exact pointtest dbis invoked.What I ruled out
postgresql-client(psql) andlibtap-parser-sourcehandler-pgtap-perl(pg_prove) -- no change in behavior.supabase test db ... --debugshows zero trace of ever invokingpg_prove/psql/proveas a subprocess (noexec/cmd/provementions anywhere in the debug log). The Go binary appears to have its own native TAP-summary-formatted output (mimickingTest::Harness's classicFiles=N, Tests=N, ... wallclock secsline) without ever calling out to Perl'sprove/pg_proveat all.pg_provedirectly against the same local Postgres connection (pg_prove --host 127.0.0.1 --port 54322 --username postgres --dbname postgres supabase/tests/database/*.sql) works correctly and finds/runs all files as expected. So the underlying Postgres instance, pgTAP extension, and test files are all fine -- this is specificallytest db's own internal file-argument handling that's broken on the Linux build.supabase startmoments earlier, in a container with no prior Supabase state at all.Version
(also reproduced via the raw
supabase-gobinary from the same release tarball, so this isn't specific to the Bun-wrappedsupabaseentrypoint either)Impact
Silent --
test dbexits 0 withResult: NOTESTS, which most CI setups (including ours) don't treat as a failure. This means a CI job built aroundsupabase test dbon Linux can run zero tests indefinitely while reporting green, with no error surfaced anywhere. Given how easy this is to reproduce and how silent the failure mode is, this seems worth a loud warning/non-zero exit at minimum, even before the root cause is found.