Skip to content

Commit

Permalink
Add tarball.WithMediaType to specify layer media type (#1286)
Browse files Browse the repository at this point in the history
  • Loading branch information
imjasonh committed Feb 11, 2022
1 parent a44adc3 commit 41f8d92
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 2 deletions.
13 changes: 11 additions & 2 deletions pkg/v1/tarball/layer.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ type layer struct {
compression int
annotations map[string]string
estgzopts []estargz.Option
mediaType types.MediaType
}

// Descriptor implements partial.withDescriptor.
Expand All @@ -51,7 +52,7 @@ func (l *layer) Descriptor() (*v1.Descriptor, error) {
Size: l.size,
Digest: digest,
Annotations: l.annotations,
MediaType: types.DockerLayer,
MediaType: l.mediaType,
}, nil
}

Expand Down Expand Up @@ -82,7 +83,7 @@ func (l *layer) Size() (int64, error) {

// MediaType implements v1.Layer
func (l *layer) MediaType() (types.MediaType, error) {
return types.DockerLayer, nil
return l.mediaType, nil
}

// LayerOption applies options to layer
Expand All @@ -96,6 +97,13 @@ func WithCompressionLevel(level int) LayerOption {
}
}

// WithMediaType is a functional option for overriding the layer's media type.
func WithMediaType(mt types.MediaType) LayerOption {
return func(l *layer) {
l.mediaType = mt
}
}

// WithCompressedCaching is a functional option that overrides the
// logic for accessing the compressed bytes to memoize the result
// and avoid expensive repeated gzips.
Expand Down Expand Up @@ -204,6 +212,7 @@ func LayerFromOpener(opener Opener, opts ...LayerOption) (v1.Layer, error) {
layer := &layer{
compression: gzip.BestSpeed,
annotations: make(map[string]string, 1),
mediaType: types.DockerLayer,
}

if estgz := os.Getenv("GGCR_EXPERIMENT_ESTARGZ"); estgz == "1" {
Expand Down
30 changes: 30 additions & 0 deletions pkg/v1/tarball/layer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (

"github.com/containerd/stargz-snapshotter/estargz"
"github.com/google/go-containerregistry/internal/compare"
"github.com/google/go-containerregistry/pkg/v1/types"
"github.com/google/go-containerregistry/pkg/v1/validate"
)

Expand Down Expand Up @@ -225,6 +226,35 @@ func TestLayerFromOpenerReader(t *testing.T) {
}
}

func TestWithMediaType(t *testing.T) {
setupFixtures(t)
defer teardownFixtures(t)

l, err := LayerFromFile("testdata/content.tar")
if err != nil {
t.Fatalf("Unable to create layer from tar file: %v", err)
}
got, err := l.MediaType()
if err != nil {
t.Fatalf("MediaType: %v", err)
}
if want := types.DockerLayer; got != want {
t.Errorf("got %v, want %v", got, want)
}

l, err = LayerFromFile("testdata/content.tar", WithMediaType(types.OCILayer))
if err != nil {
t.Fatalf("Unable to create layer from tar file: %v", err)
}
got, err = l.MediaType()
if err != nil {
t.Fatalf("MediaType: %v", err)
}
if want := types.OCILayer; got != want {
t.Errorf("got %v, want %v", got, want)
}
}

func TestLayerFromReader(t *testing.T) {
setupFixtures(t)
defer teardownFixtures(t)
Expand Down

0 comments on commit 41f8d92

Please sign in to comment.