You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
First release of a new DB-only stack (beacon: single postgres:16 service, DB_POSTGRES=true, no HTTP services). Deploy fully succeeded on the VPS — container running, RUN_DB_SCHEMA_ON_DEPLOY applied the schema, PostgreSQL: Ready — then:
⚠ Services: No *_PORT entries found in services.conf
Overall Status: degraded
Passed: 9 / Warning: 1 / Failed: 0
⚠ Health check failed — rolling back to the previous release...
✗ Release failed health checks after deploy
The "rollback" restored a snapshot taken seconds earlier (0 services) and restarted the same healthy container — harmless here, but the release is reported as failed and every future release of this stack will do the same dance.
Root cause chain
lib/health.sh marks the run "degraded" on any warning, and health exits 1 for degraded (degraded) return 1).
release treats any non-zero health exit as failure → auto-rollback.
Net: for DB-only stacks, release --env prod can never report success.
Suggested fixes (any of)
In the services check: if services.conf has zero *_PORT entries but a DB_*=true flag, treat the DB readiness check as the service-health signal and skip the warning (log info instead).
In release: only rollback on unhealthy (exit 2), not degraded (exit 1) — warnings shouldn't undo a deploy.
A HEALTH_ALLOW_NO_SERVICES=true (or similar) opt-out in services.conf for headless/DB-only stacks.
Fix 2 seems right regardless of the others: a warning-triggered rollback of a passing deploy is a worse outcome than surfacing the warning.
Environment
strut v0.43.3 (VPS side updated same run), stack: postgres:16 only, DB_POSTGRES=true, no service ports. Related: #487 (DB_PORT validation), #488 (silent local fallback).
What happened
First release of a new DB-only stack (
beacon: single postgres:16 service,DB_POSTGRES=true, no HTTP services). Deploy fully succeeded on the VPS — container running,RUN_DB_SCHEMA_ON_DEPLOYapplied the schema,PostgreSQL: Ready— then:The "rollback" restored a snapshot taken seconds earlier (0 services) and restarted the same healthy container — harmless here, but the release is reported as failed and every future release of this stack will do the same dance.
Root cause chain
lib/health.shmarks the run "degraded" on any warning, andhealthexits 1 for degraded (degraded) return 1).releasetreats any non-zero health exit as failure → auto-rollback.*_PORThealth entries — there is no HTTP service. And per validate: DB_PORT rejected — DB_* boolean rule collides with *_PORT numeric rule #487, even the documentaryDB_PORT=<num>is rejected by validation, so there is no way to silence the warning.Net: for DB-only stacks,
release --env prodcan never report success.Suggested fixes (any of)
services.confhas zero*_PORTentries but aDB_*=trueflag, treat the DB readiness check as the service-health signal and skip the warning (log info instead).release: only rollback onunhealthy(exit 2), notdegraded(exit 1) — warnings shouldn't undo a deploy.HEALTH_ALLOW_NO_SERVICES=true(or similar) opt-out in services.conf for headless/DB-only stacks.Fix 2 seems right regardless of the others: a warning-triggered rollback of a passing deploy is a worse outcome than surfacing the warning.
Environment
strut v0.43.3 (VPS side updated same run), stack: postgres:16 only,
DB_POSTGRES=true, no service ports. Related: #487 (DB_PORT validation), #488 (silent local fallback).🤖 Generated with Claude Code