syntax = "proto3"; package buildx.controller.v1; import "github.com/moby/buildkit/api/services/control/control.proto"; option go_package = "pb"; service Controller { rpc Build(BuildRequest) returns (BuildResponse); rpc Status(StatusRequest) returns (stream StatusResponse); rpc Input(stream InputMessage) returns (InputResponse); rpc Invoke(stream Message) returns (stream Message); rpc List(ListRequest) returns (ListResponse); rpc Disconnect(DisconnectRequest) returns (DisconnectResponse); rpc Info(InfoRequest) returns (InfoResponse); rpc ListProcesses(ListProcessesRequest) returns (ListProcessesResponse); rpc DisconnectProcess(DisconnectProcessRequest) returns (DisconnectProcessResponse); } message ListProcessesRequest { string Ref = 1; } message ListProcessesResponse { repeated ProcessInfo Infos = 1; } message ProcessInfo { string ProcessID = 1; InvokeConfig InvokeConfig = 2; } message DisconnectProcessRequest { string Ref = 1; string ProcessID = 2; } message DisconnectProcessResponse { } message BuildRequest { string Ref = 1; BuildOptions Options = 2; } message BuildOptions { string ContextPath = 1; string DockerfileName = 2; string PrintFunc = 3; map NamedContexts = 4; repeated string Allow = 5; repeated Attest Attests = 6; map BuildArgs = 7; repeated CacheOptionsEntry CacheFrom = 8; repeated CacheOptionsEntry CacheTo = 9; string CgroupParent = 10; repeated ExportEntry Exports = 11; repeated string ExtraHosts = 12; map Labels = 13; string NetworkMode = 14; repeated string NoCacheFilter = 15; repeated string Platforms = 16; repeated Secret Secrets = 17; int64 ShmSize = 18; repeated SSH SSH = 19; repeated string Tags = 20; string Target = 21; UlimitOpt Ulimits = 22; string Builder = 23; string MetadataFile = 24; bool NoCache = 25; bool Pull = 26; bool ExportPush = 27; bool ExportLoad = 28; } message ExportEntry { string Type = 1; map Attrs = 2; string Destination = 3; } message CacheOptionsEntry { string Type = 1; map Attrs = 2; } message Attest { string Type = 1; bool Disabled = 2; string Attrs = 3; } message SSH { string ID = 1; repeated string Paths = 2; } message Secret { string ID = 1; string FilePath = 2; string Env = 3; } message UlimitOpt { map values = 1; } message Ulimit { string Name = 1; int64 Hard = 2; int64 Soft = 3; } message BuildResponse { map ExporterResponse = 1; } message DisconnectRequest { string Ref = 1; } message DisconnectResponse {} message ListRequest { string Ref = 1; } message ListResponse { repeated string keys = 1; } message InputMessage { oneof Input { InputInitMessage Init = 1; DataMessage Data = 2; } } message InputInitMessage { string Ref = 1; } message DataMessage { bool EOF = 1; // true if eof was reached bytes Data = 2; // should be chunked smaller than 4MB: // https://pkg.go.dev/google.golang.org/grpc#MaxRecvMsgSize } message InputResponse {} message Message { oneof Input { InitMessage Init = 1; // FdMessage used from client to server for input (stdin) and // from server to client for output (stdout, stderr) FdMessage File = 2; // ResizeMessage used from client to server for terminal resize events ResizeMessage Resize = 3; // SignalMessage is used from client to server to send signal events SignalMessage Signal = 4; } } message InitMessage { string Ref = 1; // If ProcessID already exists in the server, it tries to connect to it // instead of invoking the new one. In this case, InvokeConfig will be ignored. string ProcessID = 2; InvokeConfig InvokeConfig = 3; } message InvokeConfig { repeated string Entrypoint = 1; repeated string Cmd = 2; repeated string Env = 3; string User = 4; bool NoUser = 5; // Do not set user but use the image's default string Cwd = 6; bool NoCwd = 7; // Do not set cwd but use the image's default bool Tty = 8; bool Rollback = 9; // Kill all process in the container and recreate it. } message FdMessage { uint32 Fd = 1; // what fd the data was from bool EOF = 2; // true if eof was reached bytes Data = 3; // should be chunked smaller than 4MB: // https://pkg.go.dev/google.golang.org/grpc#MaxRecvMsgSize } message ResizeMessage { uint32 Rows = 1; uint32 Cols = 2; } message SignalMessage { // we only send name (ie HUP, INT) because the int values // are platform dependent. string Name = 1; } message StatusRequest { string Ref = 1; } message StatusResponse { repeated moby.buildkit.v1.Vertex vertexes = 1; repeated moby.buildkit.v1.VertexStatus statuses = 2; repeated moby.buildkit.v1.VertexLog logs = 3; repeated moby.buildkit.v1.VertexWarning warnings = 4; } message InfoRequest {} message InfoResponse { BuildxVersion buildxVersion = 1; } message BuildxVersion { string package = 1; string version = 2; string revision = 3; }