syntax = "proto3"; package moby.buildkit.v1; import "github.com/gogo/protobuf/gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; import "github.com/moby/buildkit/solver/pb/ops.proto"; option (gogoproto.sizer_all) = true; option (gogoproto.marshaler_all) = true; option (gogoproto.unmarshaler_all) = true; service Control { rpc DiskUsage(DiskUsageRequest) returns (DiskUsageResponse); rpc Prune(PruneRequest) returns (stream UsageRecord); rpc Solve(SolveRequest) returns (SolveResponse); rpc Status(StatusRequest) returns (stream StatusResponse); rpc Session(stream BytesMessage) returns (stream BytesMessage); rpc ListWorkers(ListWorkersRequest) returns (ListWorkersResponse); } message PruneRequest { // TODO: filter } message DiskUsageRequest { string filter = 1; // FIXME: this should be containerd-compatible repeated string? } message DiskUsageResponse { repeated UsageRecord record = 1; } message UsageRecord { string ID = 1; bool Mutable = 2; bool InUse = 3; int64 Size = 4; string Parent = 5; google.protobuf.Timestamp CreatedAt = 6 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; google.protobuf.Timestamp LastUsedAt = 7 [(gogoproto.stdtime) = true]; int64 UsageCount = 8; string Description = 9; } message SolveRequest { string Ref = 1; pb.Definition Definition = 2; string Exporter = 3; map ExporterAttrs = 4; string Session = 5; string Frontend = 6; map FrontendAttrs = 7; CacheOptions Cache = 8 [(gogoproto.nullable) = false]; } message CacheOptions { string ExportRef = 1; repeated string ImportRefs = 2; map ExportAttrs = 3; } message SolveResponse { map ExporterResponse = 1; } message StatusRequest { string Ref = 1; } message StatusResponse { repeated Vertex vertexes = 1; repeated VertexStatus statuses = 2; repeated VertexLog logs = 3; } message Vertex { string digest = 1 [(gogoproto.customtype) = "github.com/opencontainers/go-digest.Digest", (gogoproto.nullable) = false]; repeated string inputs = 2 [(gogoproto.customtype) = "github.com/opencontainers/go-digest.Digest", (gogoproto.nullable) = false]; string name = 3; bool cached = 4; google.protobuf.Timestamp started = 5 [(gogoproto.stdtime) = true ]; google.protobuf.Timestamp completed = 6 [(gogoproto.stdtime) = true ]; string error = 7; // typed errors? } message VertexStatus { string ID = 1; string vertex = 2 [(gogoproto.customtype) = "github.com/opencontainers/go-digest.Digest", (gogoproto.nullable) = false]; string name = 3; int64 current = 4; int64 total = 5; // TODO: add started, completed google.protobuf.Timestamp timestamp = 6 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; google.protobuf.Timestamp started = 7 [(gogoproto.stdtime) = true ]; google.protobuf.Timestamp completed = 8 [(gogoproto.stdtime) = true ]; } message VertexLog { string vertex = 1 [(gogoproto.customtype) = "github.com/opencontainers/go-digest.Digest", (gogoproto.nullable) = false]; google.protobuf.Timestamp timestamp = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; int64 stream = 3; bytes msg = 4; } message BytesMessage { bytes data = 1; } message ListWorkersRequest { repeated string filter = 1; // containerd style } message ListWorkersResponse { repeated WorkerRecord record = 1; } message WorkerRecord { string ID = 1; map Labels = 2; repeated pb.Platform platforms = 3 [(gogoproto.nullable) = false]; }