Skip to content

Build the image CI has never built - #29

Merged
DenisDrobyshev merged 1 commit into
masterfrom
ci-docker
Aug 27, 2026
Merged

Build the image CI has never built#29
DenisDrobyshev merged 1 commit into
masterfrom
ci-docker

Conversation

@DenisDrobyshev

Copy link
Copy Markdown
Member

docker compose up app is the first instruction in the README, and the website and the organisation profile both print it. Nothing in CI built that image, so a green tick said nothing about whether it still works.

Not hypothetical. The base bump from python:3.12-slim to 3.14-slim (#13) merged with a green tick that could not have caught a broken build — the jobs are lint, tests, and package build. It turned out fine because the api extra resolves on 3.14, which I checked by hand at the time. That check should not have to be done by hand.

What the job does

Builds the image, starts it, and then goes past liveness:

  • /health — proves uvicorn came up;
  • GET /v1/stats — proves the corpus that ships inside the image is readable, which is what the offline promise rests on. An empty corpus fails the step rather than passing quietly.

PRAXIS_OFFLINE=1 is already set in the image, so none of this needs a key, a GPU or the network. The wait is 90s because first start parses the corpus, and container logs are dumped on failure.

Wired into the aggregate ci job, so branch protection covers it without adding a second required context.

Verified

YAML parses; job graph is lint, test, build, docker, ci with the aggregate requiring all four. Routes confirmed against src/praxis/api/app.py — the endpoint is /health, not /healthz, and /v1/stats is a GET on the v1 router.

`docker compose up app` is the first instruction in the README, and the website
and the organisation profile both print it. Nothing in CI built that image, so
a green tick said nothing about whether it still works.

Not hypothetical. The base bump from python:3.12-slim to 3.14-slim merged with
a green tick that could not have caught a broken build. It turned out fine,
which was luck rather than verification.

The check goes past liveness. /health only proves uvicorn started; /v1/stats
reports corpus statistics, so a successful call proves the corpus shipping
inside the image is actually readable - which is what the offline promise rests
on. An empty corpus fails the step rather than passing quietly.

Wired into the aggregate CI job, so branch protection covers it without a
second required context.
@DenisDrobyshev
DenisDrobyshev merged commit 3a0b1a5 into master Aug 27, 2026
12 checks passed
@DenisDrobyshev
DenisDrobyshev deleted the ci-docker branch August 27, 2026 12:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant