Pin server image base by digest - #129
Merged
Merged
Conversation
den-sq
marked this pull request as ready for review
August 14, 2026 17:04
tavateva
approved these changes
Aug 14, 2026
tavateva
left a comment
There was a problem hiding this comment.
APPROVE — @ 4c9d09b0. Clean supply-chain hardening; #128 is fully addressed. (Draft PR — mark-ready + merge are yours.)
Grounded the one load-bearing fact — the digest — against Docker Hub's registry API
- The tag currently resolves to exactly the pinned digest.
thehale/python-poetry:2.1.3-py3.11-slim's liveDocker-Content-Digestissha256:4e091da0d71700b404a2844ac3bbd4aaa3450a6421c469935ae165d41252a964— identical to the pin. So this freezes future drift without changing today's image (byte-identical builds now, immutable later). ✅ - It's a single-platform
manifest.v2(linux/amd64; config blob reports Python 3.11.12 / Poetry 2.1.3), not a multi-arch index. That means the pin removes no multi-arch capability — the tag was already single-arch — and it lines up withserver-image.yml, whosebuild-push-actionsets noplatforms:and so builds amd64-only. Pinning the platform manifest is the correct choice here, not a portability landmine. - Both Dockerfiles carry the identical digest; the real CI
server-imagebuild fromDockerfile-prodon this pin is green.
Acceptance criteria (#128)
- Both
Dockerfile/Dockerfile-prodpin by@sha256— ✅ - Bump is an explicit, reviewed digest change — ✅ the new Base Image Pin doc section plus the "both Dockerfiles move together" load-bearing decision in the body.
- Rebuild from same source + pinned base reproduces the digest — ✅ the drift vector #128 named (mutable base) is closed. (Full bit-reproducibility of the final image also depends on the wheel/pip layers and buildkit — broader than the base pin, and already covered for released images by the certified-digest manifest flow. Out of #128's scope; noted only for honesty.)
Non-blocking
- Swept for other mutable bases: the only others are
plugins/plugin-template/backend/Dockerfile{,.gpu}(python:3.10-slim,nvidia/cuda:12.4.1-…). Those are plugin scaffolds, and #128 explicitly treats thenvidia/cudacase as a separate companion concern — correctly out of this PR. Not asking you to touch them here. - Optional doc nit: the new section says "resolve the new tag's digest" without saying how. A one-liner — e.g.
docker buildx imagetools inspect thehale/python-poetry:<tag>and copy theDigest:— would make the next bump turnkey. - Incidental trailing-newline fix on both Dockerfiles — fine; the files were being edited anyway.
Verification depth
Digest + architecture verified by direct registry pulls on my host (auth.docker.io token → registry-1.docker.io manifest + config blob). CI outcomes (coverage / docs / server-image / test-coverage all green; MERGEABLE / CLEAN) relied on as reported by GitHub, not re-run locally.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #128
Validation
Shared-basis audit