From 8a626bf1ec40cd2599f13931166c4908c4d55ea9 Mon Sep 17 00:00:00 2001 From: Tom Prince Date: Sun, 5 Jul 2020 21:07:30 -0600 Subject: [PATCH] [FIXME: revendor] Add support for squashing images. --- .../pkg/v1/mutate/mutate.go | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/mutate.go b/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/mutate.go index cbb1bd806e..0010f868cf 100644 --- a/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/mutate.go +++ b/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/mutate.go @@ -342,6 +342,42 @@ func layerTime(layer v1.Layer, t time.Time) (v1.Layer, error) { return layer, nil } +// Squash squashes the image to a single layer +func Squash(img v1.Image) (v1.Image, error) { + newImage := empty.Image + + tar := Extract(img) + layer, err := tarball.LayerFromReader(tar) + if err != nil { + return nil, fmt.Errorf("error squashing layers: %v", err) + } + + newImage, err = AppendLayers(newImage, layer) + if err != nil { + return nil, fmt.Errorf("appending layers: %v", err) + } + + ocf, err := img.ConfigFile() + if err != nil { + return nil, fmt.Errorf("getting original config file: %v", err) + } + + cf, err := newImage.ConfigFile() + if err != nil { + return nil, fmt.Errorf("setting config file: %v", err) + } + + cfg := cf.DeepCopy() + + // Copy basic config over + cfg.Architecture = ocf.Architecture + cfg.OS = ocf.OS + cfg.OSVersion = ocf.OSVersion + cfg.Config = ocf.Config + + return ConfigFile(newImage, cfg) +} + // Canonical is a helper function to combine Time and configFile // to remove any randomness during a docker build. func Canonical(img v1.Image) (v1.Image, error) {