Documentation
¶
Overview ¶
Package fetcher provides means for plugins and engines to fetch resources with generic references. Hence, the format for reference is consistent across plugins and engines, and we can re-use the download logic.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func IsBrokenReferenceError ¶ added in v0.1.3
IsBrokenReferenceError returns true, if err is a BrokenReferenceError error.
This auxiliary function helps ensure that we type cast correctly.
Types ¶
type BrokenReferenceError ¶ added in v0.1.3
type BrokenReferenceError struct {
// contains filtered or unexported fields
}
BrokenReferenceError is used to communicate references that are broken. Error message shall be some human-readable explanation of why fetching failed and is expected to fail consistently.
func (BrokenReferenceError) Error ¶ added in v0.1.3
func (e BrokenReferenceError) Error() string
type Context ¶
type Context interface {
context.Context // Context for aborting the fetch operation
Queue() client.Queue // Client with credentials covering Fetcher.Scopes()
// Print a progress report that looks somewhat like this:
// "Fetching <description> - <percent> %"
// The <percent> is given as a float between 0 and 1, when formatting
// consumers may wish to round to one decimal using "%.0f" formatting.
// Progress reports won't be sent more than once every 5 seconds.
Progress(description string, percent float64)
}
Context for fetching resource from a reference.
type Fetcher ¶
type Fetcher interface {
// Schema for references, should **only** match this type
Schema() schematypes.Schema
// NewReference returns a reference for options matching Schema.
//
// This method may fully or partially resolve the reference, in-order to be
// able to return a consistent HashKey. Hence, this method may also return
// a human-readable error message.
// If the referenced resource doesn't exist it returns a BrokenReferenceError.
NewReference(context Context, options interface{}) (Reference, error)
}
A Fetcher specifies a schema for references that it knows how to fetch. It also provides a method to generate a HashKey for each valid reference, as well as a list of scopes required for a task to use a reference.
var Artifact Fetcher = artifactFetcher{}
Artifact is a Fetcher for downloading from an (taskId, artifact) tuple
var Index Fetcher = indexFetcher{}
Index is a Fetcher for downloading from an (index, artifact) tuple
var URL Fetcher = urlFetcher{}
URL is Fetcher for downloading files from a URL.
var URLHash Fetcher = urlHashFetcher{}
URLHash is Fetcher for downloading files from a URL with a given hash
type FileReseter ¶
FileReseter implements WriteReseter for an *os.File instance
func (*FileReseter) Reset ¶
func (f *FileReseter) Reset() error
Reset will truncate the file and seek to the beginning.
type Reference ¶ added in v0.1.3
type Reference interface {
// Unique key for the reference.
//
// Useful for caching resources.
HashKey() string
// List of scope-sets that could grant access to the reference.
// Tasks using a cached instance of this resources should satisfy at-least
// one of these scope-sets.
//
// Returns [][]string{[]string{}} if no scopes are required.
Scopes() [][]string
// Fetch a reference to a target, sending progress to Context as well
// as returning a human readable error message, if fetching fails.
// If the referenced resource doesn't exist it returns a BrokenReferenceError.
Fetch(context Context, target WriteReseter) error
}
A Reference to a blob that can be fetched.
type WriteReseter ¶ added in v0.1.6
WriteReseter is a io.Writer with Reset() method that discards everything written and starts over from scratch.
This is easily implemented by wrapping os.File with FileReseter.