CI/CD Pipeline
Main build flow:
- Build amd64 Docker image.
- Push immutable
ci-${GITHUB_SHA}tag to GHCR. - Start Docker Compose with that exact image.
- Clone official Rinha 2026 repo.
- Run public
test/test.jsthrough k6. - Upload raw benchmark artifacts.
- Archive summarized JSON into
docs/public/reports. - GitHub Pages deploys the docs site.
The automatic main-branch benchmark runs against the immutable image tag built in
the same workflow, not a locally rebuilt image. The canonical submission/runtime
shape is root docker-compose.yml with the standalone yolo FD-passing load
balancer and two API containers while Docker resource limits remain active.
The comparison branch is isolated from main. It keeps public competitor compose
files under competitor-compose/ and runs a same-matrix benchmark against our
current candidate plus the compact active matrix:
RonieNeubauer/rinha2026— official global #1 and current C #1 reference from issuezanfranceschi/rinha-de-backend-2026#4682.macedot/rinha-2026-c— next C-language reference from issuezanfranceschi/rinha-de-backend-2026#4342.
Other historical competitor compose files are intentionally not kept active on the branch unless Jonathan requests a broader/full-field comparison.
Manual Official-like Benchmark runs can archive experiment reports too. Use
report_kind=experiment for non-default search/runtime parameters so failed or
alternate runs stay visible in index.json/latest.json without moving
latest-candidate.json.
Report files
| File | Purpose |
|---|---|
latest.json | latest archived benchmark result, regardless of report kind |
latest-candidate.json | latest report_kind=candidate submission-stack result |
index.json | sorted benchmark history with report_kind metadata for candidate, experiment, and calibrated runs |
rinha-benchmark-*.json | immutable benchmark records |
rinha-benchmark-*.html | k6 HTML reports when generated |
The report archive commit is docs-only. The build workflow ignores docs-only report commits, so report archiving does not trigger a new benchmark loop.
When benchmark reports change, the build workflow triggers the Pages workflow so
/reports/ refreshes without manual action.