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); } message BuildRequest { string Ref = 1; BuildOptions Options = 2; } message BuildOptions { string ContextPath = 1; string DockerfileName = 2; string PrintFunc = 3; repeated string Allow = 4; repeated string Attests = 5; // TODO repeated string BuildArgs = 6; repeated string CacheFrom = 7; repeated string CacheTo = 8; string CgroupParent = 9; repeated string Contexts = 10; repeated string ExtraHosts = 11; string ImageIDFile = 12; repeated string Labels = 13; string NetworkMode = 14; repeated string NoCacheFilter = 15; repeated string Outputs = 16; repeated string Platforms = 17; bool Quiet = 18; repeated string Secrets = 19; int64 ShmSize = 20; repeated string SSH = 21; repeated string Tags = 22; string Target = 23; UlimitOpt Ulimits = 24; // string Invoke: provided via Invoke API CommonOptions Opts = 25; } message UlimitOpt { map values = 1; } message Ulimit { string Name = 1; int64 Hard = 2; int64 Soft = 3; } message CommonOptions { string Builder = 1; string MetadataFile = 2; bool NoCache = 3; // string Progress: no progress view on server side bool Pull = 4; bool ExportPush = 5; bool ExportLoad = 6; string SBOM = 7; // TODO string Provenance = 8; // TODO } message BuildResponse {} 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; ContainerConfig ContainerConfig = 2; } message ContainerConfig { 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; } 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; }