Gabochie DevOps

2026-10-15 · CI rescue · PR #3

CI dead since Oct 2: four layered bugs, one green main

A client's CI looked healthy — green badges on the default branch. It wasn't. Every push ran zero jobs, and nobody noticed, because a different workflow stayed green. Here's the stack of failures I peeled apart:

1. Invalid YAML, zero jobs. A `python -c` block lost its indentation in an edit. YAML parsers reject the file; GitHub schedules the run, creates no jobs, marks failure. Invisible unless you open the run.

2. Unquoted docker flag. `--health-cmd pg_isready -U postgres` — docker parsed `-U` as its own flag (exit 125). One pair of quotes.

3. My own bad fix. I re-indented the block flat and broke Python semantics. CI caught it in minutes — which is exactly what CI is for, including against me.

4. The real find. With the pipeline finally running: 77 passed, 1 failed. The failing test introspected `app.routes` — but FastAPI ≥0.14 stores included routers lazily (`_IncludedRouter`, verified in installed source). The app was always fine; the test was version-fragile. Fixed via `app.openapi()["paths"]`, green on FastAPI 0.135 and 0.143.

Lesson I now sell: unpinned dependency ranges plus a CI suite that never actually executes equals silent rot. Pin the lesson, not just the versions.

Is your CI actually running? Get a free check