mirror of
https://github.com/mudler/luet.git
synced 2025-09-26 07:10:25 +00:00
bump github.com/moby/buildkit to v0.13.0 (#351)
* bump github.com/moby/buildkit to v0.13.0 Signed-off-by: Nianyu Shen <nianyu@spectrocloud.com> * fix: update dep usage based on newer version Signed-off-by: Nianyu Shen <nianyu@spectrocloud.com> * remove empty line Signed-off-by: Nianyu Shen <nianyu@spectrocloud.com> * ci: bump golang to 1.21.x * Bump moby * debug --------- Signed-off-by: Nianyu Shen <nianyu@spectrocloud.com> Co-authored-by: Nianyu Shen <nianyu@spectrocloud.com>
This commit is contained in:
committed by
GitHub
parent
c47bf4833a
commit
4c788ccbd1
117
vendor/github.com/google/go-containerregistry/pkg/v1/tarball/layer.go
generated
vendored
117
vendor/github.com/google/go-containerregistry/pkg/v1/tarball/layer.go
generated
vendored
@@ -17,15 +17,19 @@ package tarball
|
||||
import (
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
"github.com/containerd/stargz-snapshotter/estargz"
|
||||
"github.com/google/go-containerregistry/internal/and"
|
||||
comp "github.com/google/go-containerregistry/internal/compression"
|
||||
gestargz "github.com/google/go-containerregistry/internal/estargz"
|
||||
ggzip "github.com/google/go-containerregistry/internal/gzip"
|
||||
"github.com/google/go-containerregistry/internal/zstd"
|
||||
"github.com/google/go-containerregistry/pkg/compression"
|
||||
"github.com/google/go-containerregistry/pkg/logs"
|
||||
v1 "github.com/google/go-containerregistry/pkg/v1"
|
||||
"github.com/google/go-containerregistry/pkg/v1/types"
|
||||
)
|
||||
@@ -36,9 +40,11 @@ type layer struct {
|
||||
size int64
|
||||
compressedopener Opener
|
||||
uncompressedopener Opener
|
||||
compression int
|
||||
compression compression.Compression
|
||||
compressionLevel int
|
||||
annotations map[string]string
|
||||
estgzopts []estargz.Option
|
||||
mediaType types.MediaType
|
||||
}
|
||||
|
||||
// Descriptor implements partial.withDescriptor.
|
||||
@@ -51,7 +57,7 @@ func (l *layer) Descriptor() (*v1.Descriptor, error) {
|
||||
Size: l.size,
|
||||
Digest: digest,
|
||||
Annotations: l.annotations,
|
||||
MediaType: types.DockerLayer,
|
||||
MediaType: l.mediaType,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -82,17 +88,45 @@ 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
|
||||
type LayerOption func(*layer)
|
||||
|
||||
// WithCompression is a functional option for overriding the default
|
||||
// compression algorithm used for compressing uncompressed tarballs.
|
||||
// Please note that WithCompression(compression.ZStd) should be used
|
||||
// in conjunction with WithMediaType(types.OCILayerZStd)
|
||||
func WithCompression(comp compression.Compression) LayerOption {
|
||||
return func(l *layer) {
|
||||
switch comp {
|
||||
case compression.ZStd:
|
||||
l.compression = compression.ZStd
|
||||
case compression.GZip:
|
||||
l.compression = compression.GZip
|
||||
case compression.None:
|
||||
logs.Warn.Printf("Compression type 'none' is not supported for tarball layers; using gzip compression.")
|
||||
l.compression = compression.GZip
|
||||
default:
|
||||
logs.Warn.Printf("Unexpected compression type for WithCompression(): %s; using gzip compression instead.", comp)
|
||||
l.compression = compression.GZip
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// WithCompressionLevel is a functional option for overriding the default
|
||||
// compression level used for compressing uncompressed tarballs.
|
||||
func WithCompressionLevel(level int) LayerOption {
|
||||
return func(l *layer) {
|
||||
l.compression = level
|
||||
l.compressionLevel = level
|
||||
}
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,7 +153,7 @@ func WithCompressedCaching(l *layer) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ioutil.NopCloser(bytes.NewBuffer(buf.Bytes())), nil
|
||||
return io.NopCloser(bytes.NewBuffer(buf.Bytes())), nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,7 +174,7 @@ func WithEstargz(l *layer) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
eopts := append(l.estgzopts, estargz.WithCompressionLevel(l.compression))
|
||||
eopts := append(l.estgzopts, estargz.WithCompressionLevel(l.compressionLevel))
|
||||
rc, h, err := gestargz.ReadCloser(crc, eopts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -187,30 +221,28 @@ func LayerFromFile(path string, opts ...LayerOption) (v1.Layer, error) {
|
||||
// the uncompressed path may end up gzipping things multiple times:
|
||||
// 1. Compute the layer SHA256
|
||||
// 2. Upload the compressed layer.
|
||||
//
|
||||
// Since gzip can be expensive, we support an option to memoize the
|
||||
// compression that can be passed here: tarball.WithCompressedCaching
|
||||
func LayerFromOpener(opener Opener, opts ...LayerOption) (v1.Layer, error) {
|
||||
rc, err := opener()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rc.Close()
|
||||
|
||||
compressed, err := ggzip.Is(rc)
|
||||
comp, err := comp.GetCompression(opener)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
layer := &layer{
|
||||
compression: gzip.BestSpeed,
|
||||
annotations: make(map[string]string, 1),
|
||||
compression: compression.GZip,
|
||||
compressionLevel: gzip.BestSpeed,
|
||||
annotations: make(map[string]string, 1),
|
||||
mediaType: types.DockerLayer,
|
||||
}
|
||||
|
||||
if estgz := os.Getenv("GGCR_EXPERIMENT_ESTARGZ"); estgz == "1" {
|
||||
opts = append([]LayerOption{WithEstargz}, opts...)
|
||||
}
|
||||
|
||||
if compressed {
|
||||
switch comp {
|
||||
case compression.GZip:
|
||||
layer.compressedopener = opener
|
||||
layer.uncompressedopener = func() (io.ReadCloser, error) {
|
||||
urc, err := opener()
|
||||
@@ -219,14 +251,28 @@ func LayerFromOpener(opener Opener, opts ...LayerOption) (v1.Layer, error) {
|
||||
}
|
||||
return ggzip.UnzipReadCloser(urc)
|
||||
}
|
||||
} else {
|
||||
case compression.ZStd:
|
||||
layer.compressedopener = opener
|
||||
layer.uncompressedopener = func() (io.ReadCloser, error) {
|
||||
urc, err := opener()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return zstd.UnzipReadCloser(urc)
|
||||
}
|
||||
default:
|
||||
layer.uncompressedopener = opener
|
||||
layer.compressedopener = func() (io.ReadCloser, error) {
|
||||
crc, err := opener()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return ggzip.ReadCloserLevel(crc, layer.compression), nil
|
||||
|
||||
if layer.compression == compression.ZStd {
|
||||
return zstd.ReadCloserLevel(crc, layer.compressionLevel), nil
|
||||
}
|
||||
|
||||
return ggzip.ReadCloserLevel(crc, layer.compressionLevel), nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,6 +280,23 @@ func LayerFromOpener(opener Opener, opts ...LayerOption) (v1.Layer, error) {
|
||||
opt(layer)
|
||||
}
|
||||
|
||||
// Warn if media type does not match compression
|
||||
var mediaTypeMismatch = false
|
||||
switch layer.compression {
|
||||
case compression.GZip:
|
||||
mediaTypeMismatch =
|
||||
layer.mediaType != types.OCILayer &&
|
||||
layer.mediaType != types.OCIRestrictedLayer &&
|
||||
layer.mediaType != types.DockerLayer
|
||||
|
||||
case compression.ZStd:
|
||||
mediaTypeMismatch = layer.mediaType != types.OCILayerZStd
|
||||
}
|
||||
|
||||
if mediaTypeMismatch {
|
||||
logs.Warn.Printf("Unexpected mediaType (%s) for selected compression in %s in LayerFromOpener().", layer.mediaType, layer.compression)
|
||||
}
|
||||
|
||||
if layer.digest, layer.size, err = computeDigest(layer.compressedopener); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -249,15 +312,19 @@ func LayerFromOpener(opener Opener, opts ...LayerOption) (v1.Layer, error) {
|
||||
}
|
||||
|
||||
// LayerFromReader returns a v1.Layer given a io.Reader.
|
||||
//
|
||||
// The reader's contents are read and buffered to a temp file in the process.
|
||||
//
|
||||
// Deprecated: Use LayerFromOpener or stream.NewLayer instead, if possible.
|
||||
func LayerFromReader(reader io.Reader, opts ...LayerOption) (v1.Layer, error) {
|
||||
// Buffering due to Opener requiring multiple calls.
|
||||
a, err := ioutil.ReadAll(reader)
|
||||
tmp, err := os.CreateTemp("", "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, fmt.Errorf("creating temp file to buffer reader: %w", err)
|
||||
}
|
||||
return LayerFromOpener(func() (io.ReadCloser, error) {
|
||||
return ioutil.NopCloser(bytes.NewReader(a)), nil
|
||||
}, opts...)
|
||||
if _, err := io.Copy(tmp, reader); err != nil {
|
||||
return nil, fmt.Errorf("writing temp file to buffer reader: %w", err)
|
||||
}
|
||||
return LayerFromFile(tmp.Name(), opts...)
|
||||
}
|
||||
|
||||
func computeDigest(opener Opener) (v1.Hash, int64, error) {
|
||||
|
Reference in New Issue
Block a user