driver

package
v1.20.0-beta.14 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 2, 2026 License: MPL-2.0 Imports: 10 Imported by: 2

Documentation

Index

Constants

View Source
const (
	MountTypeBind   = "bind"
	MountTypeVolume = "volume"
	MountTypeTmpfs  = "tmpfs"
)
View Source
const NoAutoStartEnv = "DEVSY_NO_AUTOSTART"

NoAutoStartEnv disables preflight auto-starting a stopped backend.

Variables

This section is empty.

Functions

func AutoStartDisabledByEnv added in v1.11.0

func AutoStartDisabledByEnv() bool

AutoStartDisabledByEnv reports whether NoAutoStartEnv opts out of auto-start.

func DriverPreflight added in v1.11.0

func DriverPreflight(ctx context.Context, d Driver, opts PreflightOptions) error

DriverPreflight runs the driver's preflight check, or nothing if it has none.

func DriverProvisioningPreflight

func DriverProvisioningPreflight(ctx context.Context, d Driver) error

DriverProvisioningPreflight runs a driver's provisioning check when supported.

func DriverRequiresMountStreaming

func DriverRequiresMountStreaming(d Driver) bool

Drivers without an explicit mount policy retain streamed delivery.

func DriverRequiresWorkspaceChown

func DriverRequiresWorkspaceChown(d Driver) bool

Drivers without an explicit ownership policy retain workspace chown.

func DriverSupportsMountType added in v1.10.0

func DriverSupportsMountType(d Driver, mountType string) bool

DriverSupportsMountType reports whether the driver can honor mountType, defaulting to true for drivers that do not advertise the capability.

Types

type ArgvExecDriver

type ArgvExecDriver interface {
	Driver
	CommandContainerArgv(
		ctx context.Context,
		workspaceID string,
		argv []string,
		streams Streams,
	) error
}

type BuildRequest

type BuildRequest struct {
	PrebuildHash         string
	ParsedConfig         *config.SubstitutedConfig
	ExtendedBuildInfo    *feature.ExtendedBuildInfo
	DockerfilePath       string
	DockerfileContent    string
	LocalWorkspaceFolder string
	Options              provider.BuildOptions
}

type CommandParams added in v1.3.1

type CommandParams struct {
	WorkspaceID string
	User        string
	Command     string
	Stdin       io.Reader
	Stdout      io.Writer
	Stderr      io.Writer
	// RawStdout preserves protocol bytes; text commands keep stdout redacted.
	// Protocol consumers must not log the unredacted stream.
	RawStdout bool
}

CommandParams holds the parameters for running a command inside a devcontainer.

type ComposeDriver added in v1.10.0

type ComposeDriver interface {
	Driver

	// ComposeHelper returns the compose helper
	ComposeHelper() (*compose.ComposeHelper, error)
}

ComposeDriver is a capability interface implemented by drivers that can run docker-compose based devcontainers. Not every container runtime has a compose engine (e.g. Apple's `container`), so callers detect support via a type assertion rather than forcing every driver to stub the method.

type ContainerUserUpdater

type ContainerUserUpdater interface {
	UpdateContainerUserUID(
		ctx context.Context,
		workspaceID string,
		parsedConfig *config.DevContainerConfig,
		writer io.Writer,
	) error
}

type DockerHelperProvider added in v1.10.0

type DockerHelperProvider interface {
	Driver

	// DockerHelper returns the docker helper
	DockerHelper() (*docker.DockerHelper, error)
}

DockerHelperProvider is a capability interface implemented by drivers backed by a Docker-compatible CLI that can expose the low-level *docker.DockerHelper. Runtimes without one (e.g. the Apple driver) simply do not implement it.

type Driver

type Driver interface {
	// FindDevContainer returns a running devcontainer details
	FindDevContainer(ctx context.Context, workspaceID string) (*config.ContainerDetails, error)

	// CommandDevContainer runs the given command inside the devcontainer
	CommandDevContainer(ctx context.Context, params *CommandParams) error

	// TargetArchitecture returns the architecture of the container runtime. e.g. amd64 or arm64
	TargetArchitecture(ctx context.Context, workspaceID string) (string, error)

	// DeleteDevContainer deletes the devcontainer
	DeleteDevContainer(ctx context.Context, workspaceID string) error

	// StartDevContainer starts the devcontainer
	StartDevContainer(ctx context.Context, workspaceID string) error

	// StopDevContainer stops the devcontainer
	StopDevContainer(ctx context.Context, workspaceID string) error

	// GetContainerLogs returns the logs of the devcontainer
	GetDevContainerLogs(
		ctx context.Context,
		workspaceID string,
		stdout io.Writer,
		stderr io.Writer,
	) error
}

Driver is the default interface for Devsy drivers.

type ImageBackend

type ImageBackend interface {
	ImageInspector
	ImageBuilder
	ImagePublisher
}

ImageBackend prepares and publishes images independently of runtime lifecycle.

type ImageBuilder

type ImageBuilder interface {
	BuildDevContainer(ctx context.Context, req BuildRequest) (*config.BuildInfo, error)
}

type ImageDriver added in v1.10.0

type ImageDriver interface {
	ImageRunner
	ImageBackend
	ContainerUserUpdater
}

ImageDriver is the legacy aggregate of runtime and image capabilities. New callers should use the individual capabilities or an ImageBackend.

type ImageInspector

type ImageInspector interface {
	InspectImage(ctx context.Context, imageName string) (*config.ImageDetails, error)
	GetImageTag(ctx context.Context, imageName string) (string, error)
}

type ImagePublisher

type ImagePublisher interface {
	PushDevContainer(ctx context.Context, image string) error
	TagDevContainer(ctx context.Context, image, tag string) error
}

type ImageRunner

type ImageRunner interface {
	Driver
	RunImageDevContainer(ctx context.Context, params *RunImageDevContainerParams) error
}

type MountCapableDriver added in v1.10.0

type MountCapableDriver interface {
	Driver

	SupportsMountType(mountType string) bool
}

MountCapableDriver is implemented by drivers that can report which mount types they support. Drivers that do not implement it are assumed to support the bind/volume/tmpfs types the docker driver has always handled.

type MountDeliveryDriver

type MountDeliveryDriver interface {
	Driver
	RequiresMountStreaming() bool
}

type PreflightError added in v1.11.0

type PreflightError struct {
	Provider string
	Err      error
}

PreflightError lets callers recognize a backend-readiness failure (errors.As) and surface the runtime's own message rather than wrapping it. Provider holds the runtime or driver identifier (e.g. "podman", "kubernetes") for grouping.

func (*PreflightError) Error added in v1.11.0

func (e *PreflightError) Error() string

func (*PreflightError) Unwrap added in v1.11.0

func (e *PreflightError) Unwrap() error

type PreflightOptions added in v1.11.0

type PreflightOptions struct {
	// DisableAutoStart reports whether a stopped backend should be left as-is
	// (reported) rather than started.
	DisableAutoStart bool
}

PreflightOptions carries per-invocation preflight settings, passed explicitly so behavior is not coupled to process-global state.

type Preflighter added in v1.11.0

type Preflighter interface {
	Driver

	Preflight(ctx context.Context, opts PreflightOptions) error
}

Preflighter is implemented by drivers that can validate their backend before use and optionally start it. Callers reach it via DriverPreflight.

type ProvisioningPreflighter

type ProvisioningPreflighter interface {
	Driver

	ProvisioningPreflight(ctx context.Context) error
}

ProvisioningPreflighter is implemented by drivers that need a compatibility check before Devsy creates or recreates a devcontainer. It is separate from Preflighter because ordinary preflight also runs for lifecycle operations.

type RecreateMode

type RecreateMode string
const (
	RecreateDelete RecreateMode = "delete"
	RecreateStop   RecreateMode = "stop"
)

func DriverRecreateMode

func DriverRecreateMode(d Driver) RecreateMode

type RecreatePolicyDriver

type RecreatePolicyDriver interface {
	Driver
	RecreateMode() RecreateMode
}

type ReprovisioningDriver

type ReprovisioningDriver interface {
	RunOptionsDriver

	// CanReprovision returns true if the driver can reprovision the devcontainer
	CanReprovision() bool
}

ReprovisioningDriver is a capability interface for drivers that can reprovision an existing devcontainer in place. Reprovisioning re-runs the container, so it embeds RunOptionsDriver.

type RunImageDevContainerParams added in v1.10.0

type RunImageDevContainerParams struct {
	WorkspaceID          string
	Options              *RunOptions
	ParsedConfig         *config.DevContainerConfig
	IDE                  string
	IDEOptions           map[string]config2.OptionValue
	LocalWorkspaceFolder string
	GPUAvailability      string
}

type RunOptions

type RunOptions struct {
	// UID is a unique identifier for this workspace
	UID string `json:"uid,omitempty"`

	// Image is the image to run
	Image string `json:"image,omitempty"`

	// User is the user to run the container as
	User string `json:"user,omitempty"`

	// Entrypoint is the entrypoint of the container
	Entrypoint string `json:"entrypoint,omitempty"`

	// Cmd are the cmd for the entrypoint
	Cmd []string `json:"cmd,omitempty"`

	// Env are additional environment variables to set
	Env map[string]string `json:"env,omitempty"`

	// CapAdd are additional capabilities for the container
	CapAdd []string `json:"capAdd,omitempty"`

	// SecurityOpt are additional security options
	SecurityOpt []string `json:"securityOpt,omitempty"`

	// Labels are labels to set on the container
	Labels []string `json:"labels,omitempty"`

	// Privileged indicates if the container should run with elevated permissions
	Privileged *bool `json:"privileged,omitempty"`

	// Init passes the --init flag when creating the container
	Init *bool `json:"init,omitempty"`

	// WorkspaceMount is the mount where the workspace should get mounted
	WorkspaceMount *config.Mount `json:"workspaceMount,omitempty"`

	// Mounts are additional mounts on the container. Supported are volume and bind mounts.
	// Bind mounts are expected to get copied from local to remote once. Volume mounts are expected
	// to be persisted for the lifetime of the container.
	Mounts []*config.Mount `json:"mounts,omitempty"`

	// Userns is the user namespace to use for the container
	Userns string `json:"userns,omitempty"`

	// UidMap are UID mappings for user namespace
	UidMap []string `json:"uidMap,omitempty"`

	// GidMap are GID mappings for user namespace
	GidMap []string `json:"gidMap,omitempty"`

	// Platform is the target platform (os/arch) to run the container under,
	// e.g. "linux/amd64". Empty means use the host's native platform.
	Platform string `json:"platform,omitempty"`

	// ImageBuilt is true if the image was built locally and is not expected to be
	// pullable from a registry. False for a devcontainer.json "image:" reference.
	ImageBuilt bool `json:"imageBuilt,omitempty"`
}

RunOptions are the options for running a container.

type RunOptionsDriver added in v1.10.0

type RunOptionsDriver interface {
	Driver

	// RunDevContainer runs a devcontainer
	RunDevContainer(ctx context.Context, workspaceID string, options *RunOptions) error
}

RunOptionsDriver is a capability interface for drivers that run a devcontainer directly from RunOptions. These drivers delegate container management to an external orchestrator (e.g. a Kubernetes pod or a custom command) rather than building and running a local OCI image; image runtimes use ImageRunner instead.

type SnapshotCapableDriver added in v1.14.0

type SnapshotCapableDriver interface {
	Driver

	// CommitContainer commits the running devcontainer's filesystem to a new
	// image, tagged as tag, to capture apt installs, global packages, and
	// other filesystem drift for workspace snapshots.
	CommitContainer(ctx context.Context, workspaceID, tag string) error
}

SnapshotCapableDriver is a capability interface implemented by drivers that can commit a running container's filesystem to a new image. Not every ImageDriver can do this (e.g. Apple's `container`), so callers detect support via a type assertion rather than forcing every ImageDriver to stub the method - the same pattern ComposeDriver and DockerHelperProvider already establish in this file.

type Streams added in v1.3.1

type Streams struct {
	Stdin  io.Reader
	Stdout io.Writer
	Stderr io.Writer
}

Streams bundles the standard IO streams for an exec.

type WorkspaceChowner added in v1.11.0

type WorkspaceChowner interface {
	RequiresWorkspaceChown() bool
}

WorkspaceChowner is a capability interface for drivers whose workspace bind mount is root-owned in the guest, so the agent must chown it to the remote user during setup rather than relying on a UID remap.

Directories

Path Synopsis
Package apple implements a Devsy driver for Apple's `container` CLI, which runs Linux containers as lightweight VMs on Apple silicon (macOS 26+).
Package apple implements a Devsy driver for Apple's `container` CLI, which runs Linux containers as lightweight VMs on Apple silicon (macOS 26+).
Package microsandbox is a Devsy driver that runs devcontainers as microVMs.
Package microsandbox is a Devsy driver that runs devcontainers as microVMs.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL