booblik

Docker image verification and conformance

Generated page

Model gemma-mtp, commit ef58254ca7be, 2026-08-16, sources: 6. Edit the code or the hand-written documentation instead.

Diagram

The booblik:ci image and the six profile flags

Verification of the runtime environment and the baked-in startup profile. The image is not just a wrapper for the JAR; it contains a specific set of six profile flags baked into the start script. As noted in build.yml:58-61, this is critical because a single JAVA_OPTS line in a user's Dockerfile could silently replace these flags, resulting in a process that no one has actually measured.

The BOOBLIK_SKIP_GATE mechanism

The lifecycle of the image build process and how it avoids redundant JVM-side checks. To optimize CI time, the image build step skips the standard gate because the build workflow has already executed it on the same commit, as described in build.yml:79-80. This is implemented by passing BOOBLIK_SKIP_GATE: '1' to the build script.

The conformance/run.sh kit

The mechanics of the reference client testing the live broker image. This kit uses a reference client to ensure the broker adheres to the specification, specifically catching errors like a partitioner that disagrees with the protocol, which unit tests of the client alone would never detect (client-go.yml:74-76).

The ci/docker-smoke.sh health check

Verification of the container's operational state via the METADATA protocol. Unlike a simple TCP connection check, the health check asks the broker for METADATA to ensure the process is actually responsive and not just holding a socket open in the kernel backlog (README.md:104-106).

Key files

FileLinesWhat is there
…/workflows/build.yml82-84Environment variable for skipping the gate during image build
…/workflows/build.yml138-140Execution of the sample script in the dev directory
README.md121-123Description of the six clients and the conformance kit

Behaviour that surprises

  • The BOOBLIK_SKIP_GATE environment variable is used to prevent paying for the same check twice during the image build phase (build.yml:83).
  • The conformance check is the only way to catch a partitioner that disagrees with the specification, as unit tests are insufficient for protocol-level correctness (client-go.yml:74-76).
  • A HEALTHCHECK that uses the METADATA protocol is required because a simple TCP connection check cannot distinguish between a live broker and a hung process (README.md:104-106).

On this page