Skip to content

Commit

Permalink
fix: allow changing media-type when pushing an image tag (#3022)
Browse files Browse the repository at this point in the history
Fixes #3005

Previously, changing a image's media-type was disallowed.
However, "docker buildx" appears to first push an image manifest and
then an image index for the same image tag. So, allow this.

Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com>
  • Loading branch information
rchincha authored Mar 11, 2025
1 parent 0930e57 commit c87f489
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 12 deletions.
4 changes: 2 additions & 2 deletions pkg/api/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10835,13 +10835,13 @@ func TestManifestImageIndex(t *testing.T) {
resp, err = resty.R().SetHeader("Content-Type", ispec.MediaTypeImageIndex).
SetBody(content).Put(baseURL + "/v2/index/manifests/test:1.0")
So(err, ShouldBeNil)
So(resp.StatusCode(), ShouldEqual, http.StatusBadRequest)
So(resp.StatusCode(), ShouldEqual, http.StatusCreated)

// previously an image index, try writing a manifest
resp, err = resty.R().SetHeader("Content-Type", ispec.MediaTypeImageManifest).
SetBody(m1content).Put(baseURL + "/v2/index/manifests/test:index1")
So(err, ShouldBeNil)
So(resp.StatusCode(), ShouldEqual, http.StatusBadRequest)
So(resp.StatusCode(), ShouldEqual, http.StatusCreated)
})
})
})
Expand Down
10 changes: 2 additions & 8 deletions pkg/storage/common/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,15 +250,9 @@ func CheckIfIndexNeedsUpdate(index *ispec.Index, desc *ispec.Descriptor,

// changing media-type is disallowed!
if manifest.MediaType != desc.MediaType {
err := zerr.ErrBadManifest
log.Error().Err(err).
log.Info().
Str("old mediaType", manifest.MediaType).
Str("new mediaType", desc.MediaType).Msg("cannot change media-type")

reason := fmt.Sprintf("changing manifest media-type from \"%s\" to \"%s\" is disallowed",
manifest.MediaType, desc.MediaType)

return false, "", zerr.NewError(err).AddDetail("reason", reason)
Str("new mediaType", desc.MediaType).Msg("media-type changed")
}

oldDesc := *desc
Expand Down
4 changes: 2 additions & 2 deletions pkg/storage/s3/s3_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3410,11 +3410,11 @@ func TestS3ManifestImageIndex(t *testing.T) {
So(digest, ShouldNotBeNil)

_, _, err = imgStore.PutImageManifest("index", "test:1.0", ispec.MediaTypeImageIndex, content)
So(err, ShouldNotBeNil)
So(err, ShouldBeNil)

// previously an image index, try writing a manifest
_, _, err = imgStore.PutImageManifest("index", "test:index1", ispec.MediaTypeImageManifest, m1content)
So(err, ShouldNotBeNil)
So(err, ShouldBeNil)
})
})
})
Expand Down

0 comments on commit c87f489

Please sign in to comment.