Case study CI/CD pipeline with gates that block and a recorded rollback

Five-step walkthrough

Walkthrough: CI/CD pipeline with gates that block and a recorded rollback

Five screenshots in the order I would talk through them. Each step names what to look at, and every chip and Prev/Next link is a real URL fragment.

Terminal transcript of bash scripts/demo.sh on this machine: a healthy release passes five smoke assertions, a deliberately broken release returns 500 on POST /invoices, and rollback restores the previous release and passes smoke again.

Step 1 of 5

One command, two releases

The left pane is a recorded healthy release: five smoke assertions pass and the process serves on port 8787. The right pane is a deliberately broken release whose invoice request returns 500, so three of five assertions miss and the script rolls back.

Rollback timeline read from deploy.log: deploy.start, health.ok, smoke.fail, rollback.start, rollback.health.ok and rollback.smoke.ok, with elapsed seconds for the broken release.

Step 2 of 5

The rollback timeline, second by second

Lane A shows the healthy deploy moving from deploy.start to health.ok and smoke.ok. Lane B records smoke.fail and rollback.start at 23 seconds into the run, rollback.health.ok at 30 seconds and rollback.smoke.ok at 42 seconds.

Terminal transcript of bash scripts/verify.sh: ESLint and tsc --noEmit pass, nine integration tests pass against PostgreSQL 16, and the final line is verify: ok.

Step 3 of 5

Verification runs lint, types and tests

The transcript runs ESLint, tsc --noEmit and nine integration tests against PostgreSQL 16 in 14.71 seconds. Three sections report 9/9 tests, 3/3 sections and zero failures, and the last line is verify: ok.

Trivy report for the locally built invoice-api:slim image at CRITICAL and HIGH severity with ignore-unfixed: zero findings and exit code 0, beside the trivy job settings read from .github/workflows/pr.yml.

Step 4 of 5

The image gate, measured here

The Trivy run scans 68 targets in invoice-api:slim at CRITICAL and HIGH with ignore-unfixed and reports zero findings at exit 0. The right panel reads the same flags from the trivy job in pr.yml, beside the nine jobs and the one required ci-ok check.

Terminal transcript of bash scripts/demo.sh on this machine: a healthy release passes five smoke assertions, a deliberately broken release returns 500 on POST /invoices, and rollback restores the previous release and passes smoke again.

Step 5 of 5

The summary line closes the loop

The table at the bottom of the transcript records five rows: the healthy release and smoke pass, the broken release's smoke row reads FAIL, and the rollback passes. The run ends with exit 0 and demo: ok, so the file records the order the release lane followed.

Back to the case study