feat(deploy): bramka zdrowia po deployu (make up/run)#15
Merged
Conversation
`make up` (i `make run` przez zaleznosc) konczy sie lekka, read-only bramka
scripts/post-deploy-check.sh. Po `docker compose up --wait` healthchecked uslugi
sa juz zdrowe; bramka lapie to, co moglo pasc PO --wait albo czego --wait nie
pilnuje: usluge `unhealthy` lub `restarting` (crash-loop, takze bez healthchecka).
Zachowanie:
- wszystko OK -> "✓ Wszystkie uslugi zdrowe." + exit 0 (cicho),
- problem + TTY -> prompt [s] shell / [d] make doctor / [klawisz] wyjscie
(auto za 30s), exit 1,
- problem + nie-TTY -> wypis + exit 1 bez pytania (CI/cron/`| tee`),
- blad samej bramki -> fail-open (exit 0), nigdy nie blokuje deployu.
Bramkuje TYLKO na stanie kontenerow (NIE na grepie bledow w logach). `exited`
swiadomie NIE flagowane (lapaloby on-demand backup-runner). Read-only: NIE
wysyla maili/pushy/Rollbara — te zostaja opt-in w `make doctor` (intencja PR #13).
up-quick celowo bez bramki.
Opt-out BPP_SKIP_HEALTH_GATE=1 dla wewnetrznej automatyki wolajacej `make up` pod
`set -e` — bez tego transient flap zdrowia tuz po restarcie przerwalby sekwencje
(np. `make up` przed `make migrate` w upgrade-postgres.sh) albo prompt zawisalby
w TTY-bez-czlowieka. Ustawiaja go: scripts/upgrade-postgres.sh (krok 10, przed
migrate) i scripts/restore.sh. `read -t 30` dodatkowo chroni przed zawieszeniem
w PTY-bez-czlowieka (ssh -t / Ansible). Blad `docker compose ps` -> fail-open,
ale BEZ falszywego "zdrowe" (nie twierdzimy zdrowia, ktorego nie sprawdzilismy).
Prompt na stderr + read ze stdin -> dziala takze przy `make up | tee deploy.log`.
Testy: scripts/test-post-deploy-check.sh (mock docker compose ps + make; sciezki
OK/unhealthy/restarting/exited/pusty/blad-ps/opt-out), cel `make test-post-deploy-check`.
Zwalidowane: bash -n, shellcheck, unit-testy 7/7, smoke-test na realnym dockerze
(szablon ps + wykrycie unhealthy), test-doctor 19/19 bez regresji, mkdocs --strict.
Docs: notka w docs/eksploatacja/komendy.md + kontrakt w CLAUDE.md (Safety).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
mpasternak
force-pushed
the
feat/post-deploy-health-gate
branch
from
June 30, 2026 21:41
d937ca6 to
a219bd7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Co i dlaczego
PR #13 słusznie wyrzucił side-effectful testy (mail/Rollbar) z auto-deployu, ale wpadliśmy w drugą skrajność: po
make run/make upnic się nie sprawdza, jest tylko jednolinijkowy hint „uruchommake doctor". Ten PR przywraca automatyczne, ale ciche i read-only potwierdzenie zdrowia po deployu — bez szumu powiadomień.Zachowanie
make up(amake runprzez zależność) kończy się lekką bramkąscripts/post-deploy-check.sh:✓ uslugi zdrowe+ exit 0 (cicho, nie blokuje)[s] shell · [d] make doctor · [klawisz] wyjście, exit 1| tee)Decyzje projektowe
unhealthy/restarting), nie na grepie błędów w logach (za dużo benign „error"/„failed" → fałszywe alarmy).exitedświadomie NIE flagowane — to łapałoby on-demandbackup-runnerjako fałszywy problem.make doctor(zgodnie z intencją PR feat(make): doctor menu diagnostyczne + deploy bez auto-testów #13). Auto-leci tylko read-onlyhealth.docker compose up --waithealthchecked usługi są już zdrowe (inaczejupstanąłby wcześniej) — bramka łapie więc głównie flap po--waiti usługi bez healthchecka w crash-loopie, plus daje jawne✓/prompt.make up | tee deploy.log.up-quickcelowo bez bramki (lekki wariant).Walidacja
scripts/test-post-deploy-check.sh(mockdocker compose ps+make): OK/unhealthy/restarting/exited/pusty — 5/5. Celmake test-post-deploy-check.{{.Service}}\t{{.State}}\t{{.Health}}emituje poprawnie (puste health dla usługi bez healthchecka), a kontener z padającym healthcheckiem realnie dajeunhealthyi jest łapany.bash -n+shellcheck(profil repo) czyste;make test-doctor19/19 bez regresji;mkdocs build --strictczysty.Docs
Notka w
docs/eksploatacja/komendy.md(sekcja Diagnostyka) + kontrakt dla agentów wCLAUDE.md(Safety).Uwagi
test-doctor, nowymake test-post-deploy-checknie jest jeszcze wpięty w CI (tests/test_makefile.sh) — istniejący gap, świadomie nie ruszam w tym PR.make upimake run(nie tylko run) — zgodnie z ustaleniem.🤖 Generated with Claude Code