Repository navigation
fix: build on the multi-arch python companion, pinned by its index digest - #71
Merged
Merged
Conversation
…gest
The default runtime image was docker.io/codeflydev/python:0.0.1, a single
linux/amd64 manifest. A recipe rendered for linux/amd64,linux/arm64 pulled
the amd64 image for both platforms, so the arm64 half ran amd64 binaries under
QEMU and died on its first RUN ("Invalid ELF image for this architecture").
The default is now ghcr.io/codefly-dev/python:0.0.5, the companion of the
core this agent links, pinned by the digest of its amd64+arm64 image index.
A test holds the tag to core's companion version so a core bump cannot leave
the pin behind.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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.
Why
A composed workspace's GitOps render builds every image for
linux/amd64,linux/arm64. Every python-fastapi service failed the arm64 half:The agent's default runtime image,
docker.io/codeflydev/python:0.0.1(resolved tosha256:84376bd4…), is a singlelinux/amd64manifest, not an image index. Its config saysarchitecture: amd64. Both platform builds therefore start from amd64 binaries. On an amd64 runner, QEMU cannot run them as arm64. On an arm64 host, BuildKit reportsInvalidBaseImagePlatform: … was pulled with platform "linux/amd64", expected "linux/arm64", and an "arm64" image would carry amd64 binaries.Change
ghcr.io/codefly-dev/python:0.0.5, the Python companion of the core this agent links (core v0.5.9,companions/python/info.codefly.yaml). It is published by the CLI as an amd64+arm64 index and pinned by the index digestsha256:67d6fe82…, so each platform resolves its own entry.TestRuntimeImageIsTheLinkedCoreCompanionholds the tag equal to core's companion version, so a core bump fails until the pin moves.TestRuntimeImageIsDigestPinnedrequires a digest pin.Classification: fix, at the owner. The agent owns its default base image, and the multi-arch image already existed on the canonical registry. The agent was still pointing at the legacy single-arch one.
Verified
go vet ./...is clean. The runtime-image, recipe and Dockerfile tests pass locally.requires-python >=3.12), built with this recipe's shape from the new pin forlinux/amd64,linux/arm64: both platforms build,uv sync --frozensucceeds, and the runtime importsfastapi/uvicornonx86_64andaarch64(Python 3.13.1).InvalidBaseImagePlatform.ghcr.io/codefly-dev/python:0.0.5lists linux/amd64 and linux/arm64.Not verified
go test -race ./...and the Docker image-build tests run in CI, not locally.🤖 Generated with Claude Code