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
| File | Lines | What is there |
|---|---|---|
…/workflows/build.yml | 82-84 | Environment variable for skipping the gate during image build |
…/workflows/build.yml | 138-140 | Execution of the sample script in the dev directory |
README.md | 121-123 | Description of the six clients and the conformance kit |
Behaviour that surprises
- The
BOOBLIK_SKIP_GATEenvironment variable is used to prevent paying for the same check twice during the image build phase (build.yml:83). - The
conformancecheck 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
HEALTHCHECKthat uses theMETADATAprotocol is required because a simple TCP connection check cannot distinguish between a live broker and a hung process (README.md:104-106).