Documentation
¶
Overview ¶
Package features implements backend-agnostic modeling, downloading, and ordering of Dev Container Features as described in https://containers.dev/implementors/features/.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Feature ¶
type Feature interface {
// ID returns the feature identifier as declared in the workspace config.
ID() string
// Download resolves the feature into destDir (fetching from a registry or
// copying from the local file tree) and returns the parsed metadata.
Download(ctx context.Context, destDir string) (FeatureMetadata, error)
}
Feature models a devcontainer feature that can be resolved to a local directory.
func FromMap ¶
func FromMap(m map[string]map[string]interface{}, workspaceConfigDir string) ([]Feature, map[string]map[string]interface{}, error)
FromMap converts the workspace Features map (feature ID → user options) to:
- a slice of Feature instances sorted by ID (deterministic, pre-ordering)
- the user-supplied options map, keyed by feature ID
workspaceConfigDir is the directory containing workspace.json; it is used to resolve relative paths for local features. Returns an error if any ID is an unsupported Tgz URI.
func NewOCIFeatureWithClient ¶
NewOCIFeatureWithClient returns an OCI Feature that uses the provided HTTP client. Intended for testing; production code uses the Feature instances returned by FromMap.
func Order ¶
func Order(feats []Feature, metadata map[string]FeatureMetadata) ([]Feature, error)
Order returns features in the correct installation order, respecting the installsAfter fields read from each feature's devcontainer-feature.json. metadata must contain an entry for every feature in feats; an error is returned if any entry is missing. Per the Dev Container spec, installsAfter is a hint: references to IDs not present in feats are silently ignored. Returns an error if a cycle is detected.
type FeatureMetadata ¶
type FeatureMetadata interface {
// ContainerEnv returns persistent environment variables to set in the image
// after the feature is installed. Values may use ${VAR} expansion.
ContainerEnv() map[string]string
// Options returns the feature's option specifications with merge/validation.
Options() FeatureOptions
// InstallsAfter returns the IDs of features that must be installed before this one.
InstallsAfter() []string
}
FeatureMetadata holds data parsed from devcontainer-feature.json.
type FeatureOptions ¶
type FeatureOptions interface {
// Merge merges user-supplied options with the spec defaults, validates
// user values (type, enum membership), and normalizes keys per spec:
// uppercased, non-alphanumeric chars replaced with '_'.
// (e.g. "install-tools" → "INSTALL_TOOLS", "go.version" → "GO_VERSION")
// Returns a map of normalized key → string value, or an error if any
// user-supplied value is invalid (wrong type, not in enum, etc.).
Merge(userOptions map[string]interface{}) (map[string]string, error)
}
FeatureOptions provides access to a feature's option specifications.