Failed runs now explain themselves. Previously a failure reported only a status code and
the word failed, which reads the same whether a key was rotated, a table was dropped, a
project was paused, or Supabase was mid-outage — four situations needing four different
responses, none of them distinguishable without opening the Supabase dashboard.
Template
- Every failure is classified as action required (something you own needs changing) or
outage (Supabase isn't answering, nothing here is misconfigured), stated in one line
at the top of the job summary. Both still fail the run; the verdict says whether to act.
- Action-required failures annotate as errors and outages as warnings, so GitHub's
annotations panel separates them without opening the summary.
- Each failed project gets a section with the cause, Supabase's own error message, the
remedy, and a per-attempt log. The response body is read rather than discarded to
/dev/null, so PostgREST naming a missing relation reaches the reader verbatim.
- Supabase's platform status codes are decoded in place:
540 paused, 402 restricted
under the Fair Use Policy, 544 gateway timeout.
- Transport failures carry curl's exit code and its meaning. A DNS failure now reads as a
deleted or mistyped project rather than a bare
000.
- Retries apply only to conditions that can clear on their own — three attempts across
about a minute for a
5xx, none at all for a rejected key or a missing table.
- Documented that Supalive cannot revive an already-paused project: a paused project is
refused at the gateway, so no ping reaches Postgres.
Fixes
curl … || echo "000" concatenated curl's own 000 with the fallback, producing
000000 as a reported status on any transport failure.
- Actions runs the step as
bash -e {0}, which set -uo pipefail does not clear. Reading
curl's exit code deliberately, rather than masking it behind || echo, meant the first
unreachable project would kill the step before any summary was written and skip every
project after it. errexit is now disabled explicitly, which per-project error handling
requires.