Repository navigation
Description
Summary
Since the v0.0.200 release (2026-10-23 ~14:50 UTC), the latest tag of paketobuildpacks/builder-noble-java-tiny points to a single-arch arm64 manifest instead of a multi-arch image index. The versioned tag 0.0.200, pushed at the same time, is correctly multi-arch (amd64 + arm64).
As a result, builds that use latest on amd64 hosts fail with exec format error.
Evidence
| Tag | Digest | Media type | Platforms |
|---|---|---|---|
latest |
sha256:771c7c33710f656bd0326daface2968d73b44b1f7b3a21caeaf1cedcb322c512 |
application/vnd.docker.distribution.manifest.v2+json |
linux/arm64 only |
0.0.200 |
sha256:7c62dd7e66b277ec9fa2b60d0ad74c4e9ef15db7910dcdf51126e62a02a31463 |
image index | linux/amd64, linux/arm64 |
0.0.198 |
sha256:be9118fdc9fa4fbfee6e8f81195b0e30b26b5a1d2660601f31a3d4f31374d455 |
application/vnd.oci.image.index.v1+json |
linux/amd64, linux/arm64 |
Reproduce:
docker buildx imagetools inspect paketobuildpacks/builder-noble-java-tiny:latest
# MediaType: application/vnd.docker.distribution.manifest.v2+json
# Digest: sha256:771c7c33710f656bd0326daface2968d73b44b1f7b3a21caeaf1cedcb322c512
curl -s "https://hub.docker.com/v2/repositories/paketobuildpacks/builder-noble-java-tiny/tags?page_size=3" \
| jq '.results[] | {name, digest, archs: [.images[].architecture]}'
# latest -> ["arm64"]
# 0.0.200 -> ["amd64", "arm64"]Impact
Spring Boot spring-boot-maven-plugin:4.1.1:build-image with the default builder on a GitHub-hosted ubuntu-24.04 (amd64) runner picks up the arm64 builder, pulls the arm64 run image, and the lifecycle fails:
[INFO] > Pulled builder image 'paketobuildpacks/builder-noble-java-tiny@sha256:771c7c33710f656bd0326daface2968d73b44b1f7b3a21caeaf1cedcb322c512'
[INFO] > Pulling run image 'docker.io/paketobuildpacks/ubuntu-noble-run-tiny:0.0.150' for platform 'linux/arm64' 100%
[INFO] > Executing lifecycle version v0.21.26
[INFO] > Running creator
[INFO] [creator] exec /cnb/lifecycle/creator: exec format error
[ERROR] ... Builder lifecycle 'creator' failed with status code 255
The same pipeline succeeded the day before with latest = 0.0.198 (multi-arch index, run image pulled for linux/amd64).
Workaround
Pin the builder to a versioned tag, e.g. paketobuildpacks/builder-noble-java-tiny:0.0.200.
Expected
latest should point to the same multi-arch image index as the newest versioned tag.
Activity
JohnNiang commentedon Oct 23, 2026
I have the same problem.
wsams commentedon Oct 23, 2026
We added this to our
pom.xmlto work around the issue. This pins to 0.0.200fafeichter commentedon Oct 23, 2026
I can confirm too.
landsman commentedon Oct 23, 2026
Yeah, x86 is missing.
Fix for gradle:
tasks.bootBuildImage { publish = false imageName = "your-image:latest" builder = "paketobuildpacks/builder-noble-java-tiny:0.0.200" }mschout commentedon Oct 23, 2026
Yeah, this is a significant problem.
alekseinovikov commentedon Oct 23, 2026
Looks like a race in
push-image.yml, not a build change. Run 39973018505 (0.0.200) and run 39892077505 (0.0.199) used the same runner image, crane v0.22.1, pack v0.40.9 and lifecycle v0.21.26. For 0.0.199,crane tag … latestwrote the index (sha256:07b5e2d0…, 513 bytes). For 0.0.200 it wrotesha256:771c7c33…(6636 bytes), which is the linux/arm64 child of the 0.0.200 indexsha256:7c62dd7e…. Socrane tagread:0.0.200about 2 s after pack pushed the manifest list and got a single-platform manifest. Re-tagginglatestfrom the index digest (crane tag paketobuildpacks/builder-noble-java-tiny@sha256:7c62dd7e66b277ec9fa2b60d0ad74c4e9ef15db7910dcdf51126e62a02a31463 latest) should fix it. Tagging by the digest pack reports, rather than by tag name, would avoid the race.AganzeFelicite commentedon Oct 24, 2026
Same here: amd64 GitLab CI runners, Spring Boot Gradle plugin 4.1.0,
bootBuildImagewith the default builder.:latestresolved tosha256:07b5e2d0…(the 0.0.199 index) and the plugin pulledubuntu-noble-run-tiny:0.0.149forlinux/amd64.:latestresolved tosha256:771c7c33…, the plugin pulledubuntu-noble-run-tiny:0.0.150forlinux/arm64, and the lifecycle failed:exec /cnb/lifecycle/creator: exec format error.docker buildx imagetools inspect …:latestshows a single manifest (architecture arm64), while0.0.200is an index with amd64 and arm64.Worked around by pinning
builder = "paketobuildpacks/builder-noble-java-tiny:0.0.199". Could a maintainer re-taglatestto the 0.0.200 index (sha256:7c62dd7e66b277ec9fa2b60d0ad74c4e9ef15db7910dcdf51126e62a02a31463)?ci(backend): 💚 fix ci
chadselph commentedon Oct 26, 2026
This was "fixed" by 0.0.201 and 0.0.202 being pushed, but it would be nice to address @alekseinovikov's findings so this won't keep happening
pacostas commentedon Oct 27, 2026
@alekseinovikov Would you like to provide a fix? Even checking if the
latesttag, has the same amount of architectures as the tag with number and failing the workflow, would be useful too. Another solution could be tagging with the digestalekseinovikov commentedon Oct 27, 2026
@pacostas Sure, opened paketo-buildpacks/github-config#1450. It waits until the version tag lists every target of builder.toml, then tags latest by that manifest's digest, so it does both the platform check and the digest tagging.
pacostas commentedon Oct 27, 2026
Nice, thank you!! Reviewing it asap
Tag builder latest by the digest of the full manifest list
Tag builder latest by the digest of the full manifest list
Tag builder latest by the digest of the full manifest list
Tag builder latest by the digest of the full manifest list
Tag builder latest by the digest of the full manifest list (#1450)