Skip to main content
← Back to list
01Issue
BugOpenExtensionsPublic
AssigneesNone

Relationships

#4051 push (Apple Containers) makes an index whose platform manifest is unpullable on Forgejo

Opened by dmc · 10/27/2026

Summary

push with the Apple Containers runtime makes an image that cannot be pulled from a Forgejo (Gitea) registry. The tag resolves to the image index, but the platform manifest that the index points to returns 404 MANIFEST_UNKNOWN.

Cause

push runs container image push <ref>. Apple's containerization library pushes every descriptor with the same ref: tag (ImageStore+Export.swift: client.push(name: name, ref: tag, descriptor: descriptor, …)), so the child manifest goes to PUT /v2/<name>/manifests/<tag> and then the index goes to the same tag. Docker, buildah, skopeo and crane push child manifests by digest.

Forgejo keeps one package version per tag, so the index push replaces the child manifest, and the child manifest is no longer addressable by digest. A registry that keeps replaced manifests by digest (Docker Hub, distribution) hides the problem.

container image push --platform linux/amd64 does not help: it still pushes an index.

Reproduce

  1. build with platform: linux/amd64 and tag forgejo.example/owner/repo/image:testing.
  2. push that image (Apple Containers runtime).
  3. skopeo inspect --raw docker://forgejo.example/owner/repo/image:testing → an OCI index with one linux/amd64 manifest sha256:X.
  4. GET /v2/owner/repo/image/manifests/sha256:X → 404 {"errors":[{"code":"MANIFEST_UNKNOWN"}]}. podman pull / bootc switch fail with reading manifest sha256:X … manifest unknown.

Versions: swamp 20261027.021509.0, @swamp/container-image 2026.10.22.1, Apple container 1.5.0, Forgejo 16.0.6.

Workaround that works

container image save --platform linux/amd64 -o image.tar <ref>
skopeo copy --multi-arch all oci-archive:image.tar docker://<ref>

skopeo pushes the child manifest by digest and the index to the tag. The digests do not change, and the image pulls.

Request

For the Apple Containers runtime, make push give a pullable result on registries like Forgejo. For example, route it through image save + skopeo copy (when skopeo is present), or add an option for that path.

Upstream repository: https://github.com/swamp-club/swamp-extensions

Environment

  • Extension: @swamp/container-image@2026.10.22.1
  • swamp: 20261027.021509.0-sha.f96841b5
  • OS: darwin (aarch64)
  • Deno: 2.9.8
  • Shell: /bin/zsh
02Bog Flow
◉OPEN○TRIAGED○IN PROGRESS○SHIPPED

Open

10/27/2026, 10:05:17 PM

No activity in this phase yet.

03Sludge Pulse
Editable. Press Enter to edit.

system commented 10/27/2026, 10:05:17 PM

Classified automatically when this issue was filed.

  • Source: Extensions

If you feel this classification is incorrect, add a ripple to tell us so.

Sign in to post a ripple.