Skip to content

Ignore attestation manifests when reading Docker Hub tags - #311

Merged
ericmj merged 1 commit into
mainfrom
ignore-attestation-manifests
Oct 7, 2026
Merged

ericmj merged 1 commit into
mainfrom
ignore-attestation-manifests

Conversation

@ericmj

@ericmj ericmj commented Oct 7, 2026

Copy link
Copy Markdown
Member

The agents run 9c27cff, whose trixie docker-cli sends docker build through buildx, and buildx attaches a provenance attestation to every image by default. Docker Hub lists the attestation as an image with architecture "unknown", and Bob.DockerHub.parse/1 returned it as an arch. Every per-arch image pushed since 2026-10-02 carries one.

Bob.Job.DockerManifest.publish?/4 then read a published manifest of amd64, unknown as spanning an arch its sources lack and left it alone. When one arch's build finished first, its manifest job published a single-arch manifest, and the job queued by the second arch never added it. 527 manifests in hexpm/erlang and hexpm/elixir, built on 2026-10-02 and 2026-10-06, are stuck with one arch; hexpm/elixir:1.20.4-erlang-28.5.0.7-debian-trixie-20261005, for example, has no arm64 image. Bob.Job.DockerChecker.manifest/0 finds the same 527 mismatches every 15 minutes and queues 527 DockerManifest jobs, each making three Docker Hub requests and changing nothing.

parse/1 now drops entries with architecture "unknown", so the next DockerChecker run after deploy rebuilds those 527 manifests with both arches.

The agents run 9c27cff, whose trixie docker-cli sends `docker build` through buildx, and buildx attaches a provenance attestation to every image by default. Docker Hub lists the attestation as an image with architecture "unknown", and `Bob.DockerHub.parse/1` returned it as an arch. Every per-arch image pushed since 2026-10-02 carries one.

`Bob.Job.DockerManifest.publish?/4` then read a published manifest of `amd64, unknown` as spanning an arch its sources lack and left it alone. When one arch's build finished first, its manifest job published a single-arch manifest, and the job queued by the second arch never added it. 527 manifests in hexpm/erlang and hexpm/elixir, built on 2026-10-02 and 2026-10-06, are stuck with one arch; hexpm/elixir:1.20.4-erlang-28.5.0.7-debian-trixie-20261005, for example, has no arm64 image. `Bob.Job.DockerChecker.manifest/0` finds the same 527 mismatches every 15 minutes and queues 527 DockerManifest jobs, each making three Docker Hub requests and changing nothing.

`parse/1` now drops entries with architecture "unknown", so the next DockerChecker run after deploy rebuilds those 527 manifests with both arches.
@ericmj
ericmj merged commit b1071f8 into main Oct 7, 2026
4 checks passed
@ericmj
ericmj deleted the ignore-attestation-manifests branch October 7, 2026 14:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant