package mutate

import "github.com/google/go-containerregistry/pkg/v1/mutate"

Package mutate provides facilities for mutating v1.Images of any kind.

Index

Functions

func Annotations

Annotations mutates the annotations on an annotatable image or index manifest.

The annotatable input is expected to be a v1.Image or v1.ImageIndex, and returns the same type. You can type-assert the result like so:

img := Annotations(empty.Image, map[string]string{
    "foo": "bar",
}).(v1.Image)

Or for an index:

idx := Annotations(empty.Index, map[string]string{
    "foo": "bar",
}).(v1.ImageIndex)

If the input Annotatable is not an Image or ImageIndex, the result will attempt to lazily annotate the raw manifest.

func Append

func Append(base v1.Image, adds ...Addendum) (v1.Image, error)

Append will apply the list of addendums to the base image

func AppendLayers

func AppendLayers(base v1.Image, layers ...v1.Layer) (v1.Image, error)

AppendLayers applies layers to a base image.

func AppendManifests

func AppendManifests(base v1.ImageIndex, adds ...IndexAddendum) v1.ImageIndex

AppendManifests appends a manifest to the ImageIndex.

func Canonical

func Canonical(img v1.Image) (v1.Image, error)

Canonical is a helper function to combine Time and configFile to remove any randomness during a docker build.

func Config

func Config(base v1.Image, cfg v1.Config) (v1.Image, error)

Config mutates the provided v1.Image to have the provided v1.Config

func ConfigFile

func ConfigFile(base v1.Image, cfg *v1.ConfigFile) (v1.Image, error)

ConfigFile mutates the provided v1.Image to have the provided v1.ConfigFile

func ConfigMediaType

func ConfigMediaType(img v1.Image, mt types.MediaType) v1.Image

ConfigMediaType modifies the MediaType() of the given image's Config.

If !mt.IsConfig(), this will be the image's artifactType in any indexes it's a part of.

func CreatedAt

func CreatedAt(base v1.Image, created v1.Time) (v1.Image, error)

CreatedAt mutates the provided v1.Image to have the provided v1.Time

func Extract

func Extract(img v1.Image) io.ReadCloser

Extract takes an image and returns an io.ReadCloser containing the image's flattened filesystem.

Callers can read the filesystem contents by passing the reader to tar.NewReader, or io.Copy it directly to some output.

If a caller doesn't read the full contents, they should Close it to free up resources used during extraction.

func IndexMediaType

func IndexMediaType(idx v1.ImageIndex, mt types.MediaType) v1.ImageIndex

IndexMediaType modifies the MediaType() of the given index.

func MediaType

func MediaType(img v1.Image, mt types.MediaType) v1.Image

MediaType modifies the MediaType() of the given image.

func Rebase

func Rebase(orig, oldBase, newBase v1.Image) (v1.Image, error)

Rebase returns a new v1.Image where the oldBase in orig is replaced by newBase.

func RemoveManifests

func RemoveManifests(base v1.ImageIndex, matcher match.Matcher) v1.ImageIndex

RemoveManifests removes any descriptors that match the match.Matcher.

func Subject

Subject mutates the subject on an image or index manifest.

The input is expected to be a v1.Image or v1.ImageIndex, and returns the same type. You can type-assert the result like so:

img := Subject(empty.Image, subj).(v1.Image)

Or for an index:

idx := Subject(empty.Index, subj).(v1.ImageIndex)

If the input is not an Image or ImageIndex, the result will attempt to lazily annotate the raw manifest.

func Time

func Time(img v1.Image, t time.Time) (v1.Image, error)

Time sets all timestamps in an image to the given timestamp.

Types

type Addendum

type Addendum struct {
	Layer       v1.Layer
	History     v1.History
	URLs        []string
	Annotations map[string]string
	MediaType   types.MediaType
}

Addendum contains layers and history to be appended to a base image

type Appendable

type Appendable interface {
	MediaType() (types.MediaType, error)
	Digest() (v1.Hash, error)
	Size() (int64, error)
}

Appendable is an interface that represents something that can be appended to an ImageIndex. We need to be able to construct a v1.Descriptor in order to append something, and this is the minimum required information for that.

type IndexAddendum

type IndexAddendum struct {
	Add Appendable
	v1.Descriptor
}

IndexAddendum represents an appendable thing and all the properties that we may want to override in the resulting v1.Descriptor.

Source Files

doc.go image.go index.go mutate.go rebase.go

Version
v0.20.3 (latest)
Published
Jan 15, 2025
Platform
linux/amd64
Imports
20 packages
Last checked
16 hours ago

Tools for package owners.