| 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 |
| 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 { |
| 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 |
| } |