# Packages

Package dockerengine implements a docker based engine for taskcluster-worker.
Package enginetest provides utilities for testing generic engine implementations.
Package mockengine implements a MockEngine that doesn't really do anything, but allows us to test plugins without having to run a real engine.
Package nativeengine provides an engine with minimal sandboxing relying on per-task user accounts, temporary folders and process isolation.
Package qemuengine implements a QEMU based engine for taskcluster-worker.
Package scriptengine provides an engine that can be configured with a script and a JSON schema, such that the worker executes declarative tasks.

# Functions

Engines returns a map of registered EngineProviders.
Register will register an EngineProvider, this is intended to be called from func init() {}, to register engines as an import side-effect.

# Variables

ErrEngineNotSupported is used to indicate that the engine isn't supported in the current configuration.
ErrFeatureNotSupported is a common error that may be returned from optional Engine methods to indicate the engine implementation doesn't support the given feature.
ErrHandlerInterrupt is returned when a handler that was given returns an error.
ErrImmutableMountNotSupported is returned when volume attachements are supported, but immutable mounts aren't supported.
ErrMaxConcurrencyExceeded is returned when the engine has limitation on how many sandboxes it can run in parallel and this limit is violated.
ErrMutableMountNotSupported is returned when volume attachments are supported, but mutable mounts aren't supported.
ErrNamingConflict is used to indicate that a name is already in use.
ErrNoSuchDisplay is used to indicate that a requested display doesn't exist.
ErrResourceNotFound is returned when trying to extract a file or folder that doesn't exist.
ErrSandboxAborted is used to indicate that a Sandbox has been aborted.
ErrSandboxBuilderDiscarded is returned when a SandboxBuilder was discarded while StartSandbox() was in the process of starting the sandbox.
ErrSandboxTerminated is used to indicate that a SandBox has already terminated and can't be aborted.
ErrShellAborted is used to indicate that a Shell has been aborted.
ErrShellTerminated is used to indicate that a shell has already terminated.

# Structs

The Capabilities structure defines the set of features supported by an engine.
The Display struct holds information about a display that exists inside a running sandbox.
EngineBase is a base implemenation of Engine.
EngineOptions is a wrapper for the set of options/arguments given to an EngineProvider when an Engine is created.
EngineProviderBase is a base struct that provides empty implementations of some methods for EngineProvider Implementors of EngineProvider should embed this struct to ensure forward compatibility when we add new optional method to EngineProvider.
ResultSetBase is a base implemenation of ResultSet.
SandboxBase is a base implemenation of Sandbox.
SandboxBuilderBase is a base implemenation of SandboxBuilder.
The SandboxOptions structure is a wrapper around the options/arguments for creating a NewSandboxBuilder.
VolumeBase is a base implemenation of Volume.
VolumeBuilderBase is a base implemenation of VolumeBuilder.

# Interfaces

An Engine implementation provides a backend upon which tasks can be executed.
EngineProvider is the interface engine implementors must implement and register with engines.RegisterEngine("EngineName", provider) This function must return an Engine implementation, generally this will only be called once in an application.
The ResultSet interface represents the results of a sandbox that has finished execution, but is hanging around while results are being extracted.
The Sandbox interface represents an active sandbox.
The SandboxBuilder interface wraps the state required to start a Sandbox.
The Shell interface opens an interactive sh or bash shell inside the Sandbox.
Volume that we can modify and mount on a Sandbox.
The VolumeBuilder interface wraps the process of building a volume.

# Type aliases

FileHandler is given as callback when iterating through a list of files.