mirror of https://github.com/docker/cli.git
135 lines
3.3 KiB
Go
135 lines
3.3 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
|
|
"github.com/moby/buildkit/client/llb"
|
|
"github.com/moby/buildkit/solver/pb"
|
|
"github.com/moby/buildkit/util/apicaps"
|
|
digest "github.com/opencontainers/go-digest"
|
|
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
|
fstypes "github.com/tonistiigi/fsutil/types"
|
|
)
|
|
|
|
type Client interface {
|
|
Solve(ctx context.Context, req SolveRequest) (*Result, error)
|
|
ResolveImageConfig(ctx context.Context, ref string, opt llb.ResolveImageConfigOpt) (digest.Digest, []byte, error)
|
|
BuildOpts() BuildOpts
|
|
Inputs(ctx context.Context) (map[string]llb.State, error)
|
|
NewContainer(ctx context.Context, req NewContainerRequest) (Container, error)
|
|
}
|
|
|
|
// NewContainerRequest encapsulates the requirements for a client to define a
|
|
// new container, without defining the initial process.
|
|
type NewContainerRequest struct {
|
|
Mounts []Mount
|
|
NetMode pb.NetMode
|
|
Platform *pb.Platform
|
|
Constraints *pb.WorkerConstraints
|
|
}
|
|
|
|
// Mount allows clients to specify a filesystem mount. A Reference to a
|
|
// previously solved Result is required.
|
|
type Mount struct {
|
|
Selector string
|
|
Dest string
|
|
ResultID string
|
|
Ref Reference
|
|
Readonly bool
|
|
MountType pb.MountType
|
|
CacheOpt *pb.CacheOpt
|
|
SecretOpt *pb.SecretOpt
|
|
SSHOpt *pb.SSHOpt
|
|
}
|
|
|
|
// Container is used to start new processes inside a container and release the
|
|
// container resources when done.
|
|
type Container interface {
|
|
Start(context.Context, StartRequest) (ContainerProcess, error)
|
|
Release(context.Context) error
|
|
}
|
|
|
|
// StartRequest encapsulates the arguments to define a process within a
|
|
// container.
|
|
type StartRequest struct {
|
|
Args []string
|
|
Env []string
|
|
User string
|
|
Cwd string
|
|
Tty bool
|
|
Stdin io.ReadCloser
|
|
Stdout, Stderr io.WriteCloser
|
|
SecurityMode pb.SecurityMode
|
|
}
|
|
|
|
// WinSize is same as executor.WinSize, copied here to prevent circular package
|
|
// dependencies.
|
|
type WinSize struct {
|
|
Rows uint32
|
|
Cols uint32
|
|
}
|
|
|
|
// ContainerProcess represents a process within a container.
|
|
type ContainerProcess interface {
|
|
Wait() error
|
|
Resize(ctx context.Context, size WinSize) error
|
|
// TODO Signal(ctx context.Context, sig os.Signal)
|
|
}
|
|
|
|
type Reference interface {
|
|
ToState() (llb.State, error)
|
|
ReadFile(ctx context.Context, req ReadRequest) ([]byte, error)
|
|
StatFile(ctx context.Context, req StatRequest) (*fstypes.Stat, error)
|
|
ReadDir(ctx context.Context, req ReadDirRequest) ([]*fstypes.Stat, error)
|
|
}
|
|
|
|
type ReadRequest struct {
|
|
Filename string
|
|
Range *FileRange
|
|
}
|
|
|
|
type FileRange struct {
|
|
Offset int
|
|
Length int
|
|
}
|
|
|
|
type ReadDirRequest struct {
|
|
Path string
|
|
IncludePattern string
|
|
}
|
|
|
|
type StatRequest struct {
|
|
Path string
|
|
}
|
|
|
|
// SolveRequest is same as frontend.SolveRequest but avoiding dependency
|
|
type SolveRequest struct {
|
|
Evaluate bool
|
|
Definition *pb.Definition
|
|
Frontend string
|
|
FrontendOpt map[string]string
|
|
FrontendInputs map[string]*pb.Definition
|
|
CacheImports []CacheOptionsEntry
|
|
}
|
|
|
|
type CacheOptionsEntry struct {
|
|
Type string
|
|
Attrs map[string]string
|
|
}
|
|
|
|
type WorkerInfo struct {
|
|
ID string
|
|
Labels map[string]string
|
|
Platforms []specs.Platform
|
|
}
|
|
|
|
type BuildOpts struct {
|
|
Opts map[string]string
|
|
SessionID string
|
|
Workers []WorkerInfo
|
|
Product string
|
|
LLBCaps apicaps.CapSet
|
|
Caps apicaps.CapSet
|
|
}
|