MCPcopy
hub / github.com/google/go-containerregistry

github.com/google/go-containerregistry @v0.21.7 sqlite

repository ↗ · DeepWiki ↗ · release v0.21.7 ↗
2,171 symbols 10,321 edges 315 files 902 documented · 42%
README

go-containerregistry

GitHub Actions Build Status GoDoc Code Coverage

Introduction

This is a golang library for working with container registries. It's largely based on the Python library of the same name.

The following diagram shows the main types that this library handles. OCI image representation

Philosophy

The overarching design philosophy of this library is to define interfaces that present an immutable view of resources (e.g. Image, Layer, ImageIndex), which can be backed by a variety of medium (e.g. registry, tarball, daemon, ...).

To complement these immutable views, we support functional mutations that produce new immutable views of the resulting resource (e.g. mutate). The end goal is to provide a set of versatile primitives that can compose to do extraordinarily powerful things efficiently and easily.

Both the resource views and mutations may be lazy, eager, memoizing, etc, and most are optimized for common paths based on the tooling we have seen in the wild (e.g. writing new images from disk to the registry as a compressed tarball).

v1.Image

Sources

Sinks

v1.ImageIndex

Sources

Sinks

v1.Layer

Sources

Sinks

Overview

mutate

The simplest use for these libraries is to read from one source and write to another.

For example,

  • crane pull is remote.Image -> tarball.Write,
  • crane push is tarball.Image -> remote.Write,
  • crane cp is remote.Image -> remote.Write.

However, often you actually want to change something about an image. This is the purpose of the mutate package, which exposes some commonly useful things to change about an image.

partial

If you're trying to use this library with a different source or sink than it already supports, it can be somewhat cumbersome. The Image and Layer interfaces are pretty wide, with a lot of redundant information. This is somewhat by design, because we want to expose this information as efficiently as possible where we can, but again it is a pain to implement yourself.

The purpose of the partial package is to make implementing a v1.Image much easier, by filling in all the derived accessors for you if you implement a minimal subset of v1.Image.

transport

You might think our abstractions are bad and you just want to authenticate and send requests to a registry.

This is the purpose of the transport and authn packages.

Tools

This repo hosts some tools built on top of the library.

crane

crane is a tool for interacting with remote images and registries.

gcrane

gcrane is a GCR-specific variant of crane that has richer output for the ls subcommand and some basic garbage collection support.

krane

krane is a drop-in replacement for crane that supports common Kubernetes-based workload identity mechanisms using k8schain as a fallback to traditional authentication mechanisms.

k8schain

k8schain implements the authentication semantics used by kubelets in a way that is easily consumable by this library.

k8schain is not a standalone tool, but it is linked here for visibility.

Emeritus: ko

This tool was originally developed in this repo but has since been moved to its own repo.

Extension points exported contracts — how you extend this code

BlobHandler (Interface)
BlobHandler represents a minimal blob storage backend, capable of serving blob contents. [6 implementers]
pkg/registry/blobs.go
Keychain (Interface)
Keychain is an interface for resolving an image reference to a credential. [8 implementers]
pkg/authn/keychain.go
ImageIndex (Interface)
ImageIndex defines the interface for interacting with an OCI image index. [7 implementers]
pkg/v1/index.go
Reference (Interface)
Reference defines the interface that consumers use when they can take either a tag or a digest. [1 implementers]
pkg/name/ref.go
Option (FuncType)
Option is a functional option for gcrane operations.
pkg/gcrane/options.go
Option (FuncType)
Option is a functional option for crane.
pkg/crane/options.go
Predicate (FuncType)
Predicate determines whether an error should be retried.
internal/retry/retry.go
PeekReader (Interface)
PeekReader is an io.Reader that also implements Peek a la bufio.Reader.
internal/compression/compression.go

Core symbols most depended-on inside this repo

Close
called by 305
pkg/v1/remote/write_test.go
String
called by 245
pkg/authn/keychain.go
Error
called by 155
pkg/v1/remote/transport/error.go
Set
called by 120
cmd/crane/cmd/mutate.go
Context
called by 108
pkg/name/ref.go
Name
called by 98
pkg/name/ref.go
Image
called by 96
pkg/v1/random/image.go
ParseReference
called by 83
pkg/name/ref.go

Shape

Function 1,051
Method 813
Struct 220
Interface 49
FuncType 21
TypeAlias 17

Languages

Go100%

Modules by API surface

pkg/v1/mutate/mutate_test.go61 symbols
pkg/v1/fake/image.go60 symbols
pkg/v1/partial/with.go52 symbols
pkg/v1/remote/write_test.go44 symbols
pkg/v1/fake/index.go40 symbols
pkg/v1/tarball/image.go33 symbols
pkg/v1/remote/pusher.go31 symbols
pkg/v1/remote/write.go29 symbols
pkg/v1/mutate/mutate.go27 symbols
pkg/authn/keychain.go27 symbols
pkg/v1/tarball/write.go25 symbols
pkg/v1/cache/cache.go25 symbols

Dependencies from manifests, versioned

cloud.google.com/go/compute/metadatav0.7.0 · 1×
github.com/Azure/azure-sdk-for-gov68.0.0+incompatible · 1×
github.com/Azure/azure-sdk-for-go/sdk/azcorev1.21.0 · 1×
github.com/Azure/azure-sdk-for-go/sdk/azidentityv1.13.1 · 1×
github.com/Azure/azure-sdk-for-go/sdk/containers/azcontainerregistryv0.2.3 · 1×
github.com/Azure/azure-sdk-for-go/sdk/internalv1.11.2 · 1×
github.com/Azure/go-autorestv14.2.0+incompatible · 1×
github.com/Azure/go-autorest/autorestv0.11.30 · 1×
github.com/Azure/go-autorest/autorest/adalv0.9.24 · 1×
github.com/Azure/go-autorest/autorest/azure/authv0.5.13 · 1×
github.com/Azure/go-autorest/autorest/azure/cliv0.4.7 · 1×
github.com/Azure/go-autorest/autorest/datev0.3.1 · 1×

For agents

$ claude mcp add go-containerregistry \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact