@@ -18,7 +18,9 @@ import (
18
18
"fmt"
19
19
"os"
20
20
21
+ comp "github.com/google/go-containerregistry/internal/compression"
21
22
"github.com/google/go-containerregistry/internal/windows"
23
+ "github.com/google/go-containerregistry/pkg/compression"
22
24
v1 "github.com/google/go-containerregistry/pkg/v1"
23
25
"github.com/google/go-containerregistry/pkg/v1/mutate"
24
26
"github.com/google/go-containerregistry/pkg/v1/stream"
@@ -50,13 +52,11 @@ func Append(base v1.Image, paths ...string) (v1.Image, error) {
50
52
}
51
53
52
54
baseMediaType , err := base .MediaType ()
53
-
54
55
if err != nil {
55
56
return nil , fmt .Errorf ("getting base image media type: %w" , err )
56
57
}
57
58
58
59
layerType := types .DockerLayer
59
-
60
60
if baseMediaType == types .OCIManifestSchema1 {
61
61
layerType = types .OCILayer
62
62
}
@@ -90,6 +90,21 @@ func getLayer(path string, layerType types.MediaType) (v1.Layer, error) {
90
90
return stream .NewLayer (f , stream .WithMediaType (layerType )), nil
91
91
}
92
92
93
+ // This is dumb but the tarball package assumes things about mediaTypes that aren't true
94
+ // and doesn't have enough context to know what the right default is.
95
+ f , err = os .Open (path )
96
+ if err != nil {
97
+ return nil , err
98
+ }
99
+ defer f .Close ()
100
+ z , _ , err := comp .PeekCompression (f )
101
+ if err != nil {
102
+ return nil , err
103
+ }
104
+ if z == compression .ZStd {
105
+ layerType = types .OCILayerZStd
106
+ }
107
+
93
108
return tarball .LayerFromFile (path , tarball .WithMediaType (layerType ))
94
109
}
95
110
0 commit comments