mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 12:32:43 +00:00
v1.4.28 shipped with `offlineGeoEnabled: false` on both production hosts because the Fetch step could silently emit the `.empty` marker and the workflow trusted the script's exit code. The script-side hardening in the previous commit closes the fail-loud gap for download errors; this commit adds a workflow-side belt-and-braces check so a stale `.empty` marker or a workspace-cache surprise cannot survive into the image either. New "Verify GeoLite2 databases" step runs on each platform leg after the Fetch step and before `docker/build-push-action`. When `MAXMIND_LICENSE_KEY` is set it asserts both MMDBs exist in `assets/geolite2/` with non-zero size and that no `.empty` marker survived; either failure exits the leg with a clear `::error::` line. When the secret is unset the step short-circuits to a notice — the intentional "ship without offline tier" path stays usable. `secrets.*` is not allowed in step-level `if:` expressions, so the gate is implemented via env-surfaced presence check inside the step. Validated with `actionlint`. Co-references the live-environment shape in `.planning/round-5-geolite2-ci-fix-report.md`.