Documentation ¶
Index ¶
- Variables
- type Builder
- type CacheExportMode
- type CacheExportOpt
- type CacheExporter
- type CacheExporterRecord
- type CacheExporterTarget
- type CacheInfoLink
- type CacheKey
- type CacheKeyStorage
- type CacheKeyWithSelector
- type CacheLink
- type CacheManager
- type CacheMap
- type CacheRecord
- type CacheResult
- type CacheResultStorage
- type CachedResult
- type Edge
- type ExportableCacheKey
- type Index
- type Job
- func (j *Job) Build(ctx context.Context, e Edge) (CachedResult, error)
- func (j *Job) Context(ctx context.Context) context.Context
- func (j *Job) Discard() error
- func (j *Job) EachValue(ctx context.Context, key string, fn func(interface{}) error) error
- func (j *Job) SetValue(key string, v interface{})
- func (j *Job) Status(ctx context.Context, ch chan *client.SolveStatus) error
- type Op
- type Remote
- type ResolveOpFunc
- type Result
- type ResultBasedCacheFunc
- type SharedCachedResult
- type SharedResult
- type Solver
- type SolverOpt
- type Vertex
- type VertexOptions
Constants ¶
This section is empty.
Variables ¶
var ErrNotFound = errors.Errorf("not found")
Functions ¶
This section is empty.
Types ¶
type CacheExportMode ¶
type CacheExportMode int
CacheExportMode is the type for setting cache exporting modes
const ( // CacheExportModeMin exports a topmost allowed vertex and its dependencies // that already have transferable layers CacheExportModeMin CacheExportMode = iota // CacheExportModeMax exports all possible non-root vertexes CacheExportModeMax // CacheExportModeRemoteOnly only exports vertexes that already have // transferable layers CacheExportModeRemoteOnly )
type CacheExportOpt ¶
type CacheExportOpt struct { // Convert can convert a build result to transferable object Convert func(context.Context, Result) (*Remote, error) // Mode defines a cache export algorithm Mode CacheExportMode }
CacheExportOpt defines options for exporting build cache
type CacheExporter ¶
type CacheExporter interface {
ExportTo(ctx context.Context, t CacheExporterTarget, opt CacheExportOpt) ([]CacheExporterRecord, error)
}
CacheExporter can export the artifacts of the build chain
type CacheExporterRecord ¶
type CacheExporterRecord interface { AddResult(createdAt time.Time, result *Remote) LinkFrom(src CacheExporterRecord, index int, selector string) }
CacheExporterRecord is a single object being exported
type CacheExporterTarget ¶
type CacheExporterTarget interface { Add(dgst digest.Digest) CacheExporterRecord Visit(interface{}) Visited(interface{}) bool }
CacheExporterTarget defines object capable of receiving exports
type CacheInfoLink ¶
type CacheInfoLink struct { Input Index `json:"Input,omitempty"` Output Index `json:"Output,omitempty"` Digest digest.Digest `json:"Digest,omitempty"` Selector digest.Digest `json:"Selector,omitempty"` }
CacheInfoLink is a link between two cache keys
type CacheKey ¶
type CacheKey struct { ID string // contains filtered or unexported fields }
func NewCacheKey ¶
NewCacheKey creates a new cache key for a specific output index
func (*CacheKey) Deps ¶
func (ck *CacheKey) Deps() [][]CacheKeyWithSelector
type CacheKeyStorage ¶
type CacheKeyStorage interface { Exists(id string) bool Walk(fn func(id string) error) error WalkResults(id string, fn func(CacheResult) error) error Load(id string, resultID string) (CacheResult, error) AddResult(id string, res CacheResult) error Release(resultID string) error WalkIDsByResult(resultID string, fn func(string) error) error AddLink(id string, link CacheInfoLink, target string) error WalkLinks(id string, link CacheInfoLink, fn func(id string) error) error HasLink(id string, link CacheInfoLink, target string) bool WalkBacklinks(id string, fn func(id string, link CacheInfoLink) error) error }
CacheKeyStorage is interface for persisting cache metadata
func NewInMemoryCacheStorage ¶
func NewInMemoryCacheStorage() CacheKeyStorage
type CacheKeyWithSelector ¶
type CacheKeyWithSelector struct { Selector digest.Digest CacheKey ExportableCacheKey }
CacheKeyWithSelector combines a cache key with an optional selector digest. Used to limit the matches for dependency cache key.
type CacheLink ¶
type CacheLink struct { Source digest.Digest `json:",omitempty"` Input Index `json:",omitempty"` Output Index `json:",omitempty"` Base digest.Digest `json:",omitempty"` Selector digest.Digest `json:",omitempty"` }
CacheLink is a link between two cache records
type CacheManager ¶
type CacheManager interface { // ID is used to identify cache providers that are backed by same source // to avoid duplicate calls to the same provider ID() string // Query searches for cache paths from one cache key to the output of a // possible match. Query(inp []CacheKeyWithSelector, inputIndex Index, dgst digest.Digest, outputIndex Index) ([]*CacheKey, error) Records(ck *CacheKey) ([]*CacheRecord, error) // Load pulls and returns the cached result Load(ctx context.Context, rec *CacheRecord) (Result, error) // Save saves a result based on a cache key Save(key *CacheKey, s Result) (*ExportableCacheKey, error) }
CacheManager implements build cache backend
func NewCacheManager ¶
func NewCacheManager(id string, storage CacheKeyStorage, results CacheResultStorage) CacheManager
NewCacheManager creates a new cache manager with specific storage backend
func NewInMemoryCacheManager ¶
func NewInMemoryCacheManager() CacheManager
NewInMemoryCacheManager creates a new in-memory cache manager
type CacheMap ¶
type CacheMap struct { // Digest is a base digest for operation that needs to be combined with // inputs cache or selectors for dependencies. Digest digest.Digest Deps []struct { // Optional digest that is merged with the cache key of the input Selector digest.Digest // Optional function that returns a digest for the input based on its // return value ComputeDigestFunc ResultBasedCacheFunc } }
type CacheRecord ¶
type CacheRecord struct { ID string Size int CreatedAt time.Time Priority int // contains filtered or unexported fields }
CacheRecord is an identifier for loading in cache
type CacheResult ¶
CacheResult is a record for a single solve result
type CacheResultStorage ¶
type CacheResultStorage interface { Save(Result) (CacheResult, error) Load(ctx context.Context, res CacheResult) (Result, error) LoadRemote(ctx context.Context, res CacheResult) (*Remote, error) Exists(id string) bool }
CacheResultStorage is interface for converting cache metadata result to actual solve result
func NewInMemoryResultStorage ¶
func NewInMemoryResultStorage() CacheResultStorage
type CachedResult ¶
type CachedResult interface { Result CacheKeys() []ExportableCacheKey }
CachedResult is a result connected with its cache key
func NewCachedResult ¶
func NewCachedResult(res Result, k []ExportableCacheKey) CachedResult
NewCachedResult combines a result and cache key into cached result
type ExportableCacheKey ¶
type ExportableCacheKey struct { *CacheKey Exporter CacheExporter }
ExportableCacheKey is a cache key connected with an exporter that can export a chain of cacherecords pointing to that key
type Job ¶
type Job struct { SessionID string // contains filtered or unexported fields }
type Op ¶
type Op interface { // CacheMap returns structure describing how the operation is cached. // Currently only roots are allowed to return multiple cache maps per op. CacheMap(context.Context, int) (*CacheMap, bool, error) // Exec runs an operation given results from previous operations. Exec(ctx context.Context, inputs []Result) (outputs []Result, err error) }
Op is an implementation for running a vertex
type Remote ¶
type Remote struct { Descriptors []ocispec.Descriptor Provider content.Provider }
Remote is a descriptor or a list of stacked descriptors that can be pulled from a content provider TODO: add closer to keep referenced data from getting deleted
type ResolveOpFunc ¶
ResolveOpFunc finds an Op implementation for a Vertex
type ResultBasedCacheFunc ¶
type SharedCachedResult ¶
type SharedCachedResult struct {}
func NewSharedCachedResult ¶
func NewSharedCachedResult(res CachedResult) *SharedCachedResult
func (*SharedCachedResult) Clone ¶
func (r *SharedCachedResult) Clone() CachedResult
type SharedResult ¶
type SharedResult struct {
// contains filtered or unexported fields
}
SharedResult is a result that can be cloned
func NewSharedResult ¶
func NewSharedResult(main Result) *SharedResult
func (*SharedResult) Clone ¶
func (r *SharedResult) Clone() Result
type Solver ¶
type Solver struct {
// contains filtered or unexported fields
}
Solver provides a shared graph of all the vertexes currently being processed. Every vertex that is being solved needs to be loaded into job first. Vertex operations are invoked and progress tracking happens through jobs.
type SolverOpt ¶
type SolverOpt struct { ResolveOpFunc ResolveOpFunc DefaultCache CacheManager }
type Vertex ¶
type Vertex interface { // Digest is a content-addressable vertex identifier Digest() digest.Digest // Sys returns an internal value that is used to execute the vertex. Usually // this is capured by the operation resolver method during solve. Sys() interface{} Options() VertexOptions // Array of edges current vertex depends on. Inputs() []Edge Name() string }
Vertex is one node in the build graph
type VertexOptions ¶
type VertexOptions struct { IgnoreCache bool CacheSources []CacheManager Description map[string]string // text values with no special meaning for solver ExportCache *bool }
VertexOptions has optional metadata for the vertex that is not contained in digest