From afa6acdd04c78340fd40f52433e264a702297f1c Mon Sep 17 00:00:00 2001 From: "Cornelius A. Ludmann" Date: Mon, 25 Oct 2021 13:55:26 +0000 Subject: [PATCH] [ws-manager] Make IDE image API field composite --- .../ee/ws-scheduler/pkg/scaler/driver.go | 4 +- .../pkg/orchestrator/orchestrator.go | 12 +- .../server/src/workspace/workspace-starter.ts | 4 +- components/ws-manager-api/core.proto | 34 +- components/ws-manager-api/go/core.pb.go | 794 +++++++++++------- .../typescript/src/core_pb.d.ts | 80 +- .../ws-manager-api/typescript/src/core_pb.js | 478 ++++++++++- components/ws-manager/pkg/manager/create.go | 9 +- .../pkg/manager/integration_test.go | 2 +- components/ws-manager/pkg/manager/status.go | 16 +- .../ws-manager/pkg/manager/testing_test.go | 2 +- components/ws-proxy/pkg/proxy/infoprovider.go | 7 +- .../ws-proxy/pkg/proxy/infoprovider_test.go | 48 +- dev/loadgen/cmd/benchmark.go | 4 +- dev/loadgen/cmd/run.go | 4 +- test/pkg/integration/workspace.go | 6 +- 16 files changed, 1084 insertions(+), 420 deletions(-) diff --git a/components/ee/ws-scheduler/pkg/scaler/driver.go b/components/ee/ws-scheduler/pkg/scaler/driver.go index a639416dae8f78..94e71b7454a792 100644 --- a/components/ee/ws-scheduler/pkg/scaler/driver.go +++ b/components/ee/ws-scheduler/pkg/scaler/driver.go @@ -289,7 +289,9 @@ func (wspd *WorkspaceManagerPrescaleDriver) startGhostWorkspaces(ctx context.Con Email: "none@gitpod.io", Username: "gitpod-ghost", }, - IdeImage: wspd.Config.IDEImage, + IdeImage: &api.StartWorkspaceSpec_IDEImage{ + WebRef: wspd.Config.IDEImage, + }, Initializer: &csapi.WorkspaceInitializer{ Spec: &csapi.WorkspaceInitializer_Empty{ Empty: &csapi.EmptyInitializer{}, diff --git a/components/image-builder-mk3/pkg/orchestrator/orchestrator.go b/components/image-builder-mk3/pkg/orchestrator/orchestrator.go index df6ab45024d13b..a691ac4cf69eda 100644 --- a/components/image-builder-mk3/pkg/orchestrator/orchestrator.go +++ b/components/image-builder-mk3/pkg/orchestrator/orchestrator.go @@ -357,11 +357,13 @@ func (o *Orchestrator) Build(req *protocol.BuildRequest, resp protocol.ImageBuil Owner: buildWorkspaceOwnerID, }, Spec: &wsmanapi.StartWorkspaceSpec{ - CheckoutLocation: ".", - Initializer: initializer, - Timeout: maxBuildRuntime.String(), - WorkspaceImage: o.Config.BuilderImage, - IdeImage: o.Config.BuilderImage, + CheckoutLocation: ".", + Initializer: initializer, + Timeout: maxBuildRuntime.String(), + WorkspaceImage: o.Config.BuilderImage, + IdeImage: &wsmanapi.StartWorkspaceSpec_IDEImage{ + WebRef: o.Config.BuilderImage, + }, WorkspaceLocation: contextPath, Envvars: []*wsmanapi.EnvironmentVariable{ {Name: "BOB_TARGET_REF", Value: wsrefstr}, diff --git a/components/server/src/workspace/workspace-starter.ts b/components/server/src/workspace/workspace-starter.ts index 4b3e7da148706c..7e80130bd78a1b 100644 --- a/components/server/src/workspace/workspace-starter.ts +++ b/components/server/src/workspace/workspace-starter.ts @@ -723,7 +723,9 @@ export class WorkspaceStarter { spec.setGit(this.createGitSpec(workspace, user)); spec.setPortsList(ports); spec.setInitializer((await initializerPromise).initializer); - spec.setIdeImage(ideImage); + const startWorkspaceSpecIDEImage = new StartWorkspaceSpec.IDEImage(); + startWorkspaceSpecIDEImage.setWebRef(ideImage); + spec.setIdeImage(startWorkspaceSpecIDEImage); spec.setWorkspaceImage(instance.workspaceImage); spec.setWorkspaceLocation(workspace.config.workspaceLocation || spec.getCheckoutLocation()); spec.setFeatureFlagsList(this.toWorkspaceFeatureFlags(featureFlags)); diff --git a/components/ws-manager-api/core.proto b/components/ws-manager-api/core.proto index 20ed851262df33..bf4c584e0d3d26 100644 --- a/components/ws-manager-api/core.proto +++ b/components/ws-manager-api/core.proto @@ -270,11 +270,20 @@ message WorkspaceStatus { // WorkspaceSpec is the specification of a workspace at runtime message WorkspaceSpec { + // IDEImage configures the IDE images a workspace will use + message IDEImage { + // web_ref is a reference to an OCI image used for serving the web-based IDE + string web_ref = 1; + // desktop_ref is an optional reference to an OCI image used for serving desktop IDEs + string desktop_ref = 2; + } + // workspace_image is the name of the Docker image this workspace runs string workspace_image = 1; - // ide_image is the name of the Docker image used as IDE - string ide_image = 2; + // deprecated_ide_image is a field present for backwards compatibility and the same + // as IDEImage.web_ref. If both fields are present, IDEImage.web_ref takes precedence. + string deprecated_ide_image = 2; // headless marks this workspace a headless one - headless workspaces are not intended for users but for automation bool headless = 3; @@ -291,8 +300,8 @@ message WorkspaceSpec { // The intervals in which a heartbeat must be received for the workspace not to time out string timeout = 7; - // desktop_ide_image is the name of the Docker image used as desktop IDE - string desktop_ide_image = 8; + // ide_image is the name of the Docker image used as IDE + IDEImage ide_image = 8; } // PortSpec describes a networking port exposed on a workspace @@ -443,11 +452,20 @@ message WorkspaceAuthentication { // StartWorkspaceSpec specifies the configuration of a workspace for a workspace start message StartWorkspaceSpec { + // IDEImage configures the IDE images a workspace will use + message IDEImage { + // web_ref is a reference to an OCI image used for serving the web-based IDE + string web_ref = 1; + // desktop_ref is an optional reference to an OCI image used for serving desktop IDEs + string desktop_ref = 2; + } + // workspace_image is the Docker image name of the workspace container string workspace_image = 1; - // ide_image is the Docker image name of the IDE image - string ide_image = 2; + // deprecated_ide_image is a field present for backwards compatibility and the same + // as IDEImage.web_ref. If both fields are present, IDEImage.web_ref takes precedence. + string deprecated_ide_image = 2; // feature_flags provide a means for starting variants of workspaces (e.g. a privileged one) repeated WorkspaceFeatureFlag feature_flags = 3; @@ -476,8 +494,8 @@ message StartWorkspaceSpec { // admission controlls who can access the workspace and its ports. AdmissionLevel admission = 11; - // desktop_ide_image is the Docker image name of the desktop IDE image - string desktop_ide_image = 12; + // ide_image is the Docker image name of the IDE image + IDEImage ide_image = 12; } // WorkspaceFeatureFlag enable non-standard behaviour in workspaces diff --git a/components/ws-manager-api/go/core.pb.go b/components/ws-manager-api/go/core.pb.go index 99a21c4e32378f..a283378c48a0d6 100644 --- a/components/ws-manager-api/go/core.pb.go +++ b/components/ws-manager-api/go/core.pb.go @@ -1780,8 +1780,9 @@ type WorkspaceSpec struct { // workspace_image is the name of the Docker image this workspace runs WorkspaceImage string `protobuf:"bytes,1,opt,name=workspace_image,json=workspaceImage,proto3" json:"workspace_image,omitempty"` - // ide_image is the name of the Docker image used as IDE - IdeImage string `protobuf:"bytes,2,opt,name=ide_image,json=ideImage,proto3" json:"ide_image,omitempty"` + // deprecated_ide_image is a field present for backwards compatibility and the same + // as IDEImage.web_ref. If both fields are present, IDEImage.web_ref takes precedence. + DeprecatedIdeImage string `protobuf:"bytes,2,opt,name=deprecated_ide_image,json=deprecatedIdeImage,proto3" json:"deprecated_ide_image,omitempty"` // headless marks this workspace a headless one - headless workspaces are not intended for users but for automation Headless bool `protobuf:"varint,3,opt,name=headless,proto3" json:"headless,omitempty"` // URL is the external URL of the workspace @@ -1792,8 +1793,8 @@ type WorkspaceSpec struct { Type WorkspaceType `protobuf:"varint,6,opt,name=type,proto3,enum=wsman.WorkspaceType" json:"type,omitempty"` // The intervals in which a heartbeat must be received for the workspace not to time out Timeout string `protobuf:"bytes,7,opt,name=timeout,proto3" json:"timeout,omitempty"` - // desktop_ide_image is the name of the Docker image used as desktop IDE - DesktopIdeImage string `protobuf:"bytes,8,opt,name=desktop_ide_image,json=desktopIdeImage,proto3" json:"desktop_ide_image,omitempty"` + // ide_image is the name of the Docker image used as IDE + IdeImage *WorkspaceSpec_IDEImage `protobuf:"bytes,8,opt,name=ide_image,json=ideImage,proto3" json:"ide_image,omitempty"` } func (x *WorkspaceSpec) Reset() { @@ -1835,9 +1836,9 @@ func (x *WorkspaceSpec) GetWorkspaceImage() string { return "" } -func (x *WorkspaceSpec) GetIdeImage() string { +func (x *WorkspaceSpec) GetDeprecatedIdeImage() string { if x != nil { - return x.IdeImage + return x.DeprecatedIdeImage } return "" } @@ -1877,11 +1878,11 @@ func (x *WorkspaceSpec) GetTimeout() string { return "" } -func (x *WorkspaceSpec) GetDesktopIdeImage() string { +func (x *WorkspaceSpec) GetIdeImage() *WorkspaceSpec_IDEImage { if x != nil { - return x.DesktopIdeImage + return x.IdeImage } - return "" + return nil } // PortSpec describes a networking port exposed on a workspace @@ -2314,8 +2315,9 @@ type StartWorkspaceSpec struct { // workspace_image is the Docker image name of the workspace container WorkspaceImage string `protobuf:"bytes,1,opt,name=workspace_image,json=workspaceImage,proto3" json:"workspace_image,omitempty"` - // ide_image is the Docker image name of the IDE image - IdeImage string `protobuf:"bytes,2,opt,name=ide_image,json=ideImage,proto3" json:"ide_image,omitempty"` + // deprecated_ide_image is a field present for backwards compatibility and the same + // as IDEImage.web_ref. If both fields are present, IDEImage.web_ref takes precedence. + DeprecatedIdeImage string `protobuf:"bytes,2,opt,name=deprecated_ide_image,json=deprecatedIdeImage,proto3" json:"deprecated_ide_image,omitempty"` // feature_flags provide a means for starting variants of workspaces (e.g. a privileged one) FeatureFlags []WorkspaceFeatureFlag `protobuf:"varint,3,rep,packed,name=feature_flags,json=featureFlags,proto3,enum=wsman.WorkspaceFeatureFlag" json:"feature_flags,omitempty"` // initializer configures how the workspace is to be initialized @@ -2334,8 +2336,8 @@ type StartWorkspaceSpec struct { Timeout string `protobuf:"bytes,10,opt,name=timeout,proto3" json:"timeout,omitempty"` // admission controlls who can access the workspace and its ports. Admission AdmissionLevel `protobuf:"varint,11,opt,name=admission,proto3,enum=wsman.AdmissionLevel" json:"admission,omitempty"` - // desktop_ide_image is the Docker image name of the desktop IDE image - DesktopIdeImage string `protobuf:"bytes,12,opt,name=desktop_ide_image,json=desktopIdeImage,proto3" json:"desktop_ide_image,omitempty"` + // ide_image is the Docker image name of the IDE image + IdeImage *StartWorkspaceSpec_IDEImage `protobuf:"bytes,12,opt,name=ide_image,json=ideImage,proto3" json:"ide_image,omitempty"` } func (x *StartWorkspaceSpec) Reset() { @@ -2377,9 +2379,9 @@ func (x *StartWorkspaceSpec) GetWorkspaceImage() string { return "" } -func (x *StartWorkspaceSpec) GetIdeImage() string { +func (x *StartWorkspaceSpec) GetDeprecatedIdeImage() string { if x != nil { - return x.IdeImage + return x.DeprecatedIdeImage } return "" } @@ -2447,11 +2449,11 @@ func (x *StartWorkspaceSpec) GetAdmission() AdmissionLevel { return AdmissionLevel_ADMIT_OWNER_ONLY } -func (x *StartWorkspaceSpec) GetDesktopIdeImage() string { +func (x *StartWorkspaceSpec) GetIdeImage() *StartWorkspaceSpec_IDEImage { if x != nil { - return x.DesktopIdeImage + return x.IdeImage } - return "" + return nil } // GitSpec configures the Git available within the workspace @@ -2568,6 +2570,122 @@ func (x *EnvironmentVariable) GetValue() string { return "" } +// IDEImage configures the IDE images a workspace will use +type WorkspaceSpec_IDEImage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // web_ref is a reference to an OCI image used for serving the web-based IDE + WebRef string `protobuf:"bytes,1,opt,name=web_ref,json=webRef,proto3" json:"web_ref,omitempty"` + // desktop_ref is an optional reference to an OCI image used for serving desktop IDEs + DesktopRef string `protobuf:"bytes,2,opt,name=desktop_ref,json=desktopRef,proto3" json:"desktop_ref,omitempty"` +} + +func (x *WorkspaceSpec_IDEImage) Reset() { + *x = WorkspaceSpec_IDEImage{} + if protoimpl.UnsafeEnabled { + mi := &file_core_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkspaceSpec_IDEImage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkspaceSpec_IDEImage) ProtoMessage() {} + +func (x *WorkspaceSpec_IDEImage) ProtoReflect() protoreflect.Message { + mi := &file_core_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkspaceSpec_IDEImage.ProtoReflect.Descriptor instead. +func (*WorkspaceSpec_IDEImage) Descriptor() ([]byte, []int) { + return file_core_proto_rawDescGZIP(), []int{24, 0} +} + +func (x *WorkspaceSpec_IDEImage) GetWebRef() string { + if x != nil { + return x.WebRef + } + return "" +} + +func (x *WorkspaceSpec_IDEImage) GetDesktopRef() string { + if x != nil { + return x.DesktopRef + } + return "" +} + +// IDEImage configures the IDE images a workspace will use +type StartWorkspaceSpec_IDEImage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // web_ref is a reference to an OCI image used for serving the web-based IDE + WebRef string `protobuf:"bytes,1,opt,name=web_ref,json=webRef,proto3" json:"web_ref,omitempty"` + // desktop_ref is an optional reference to an OCI image used for serving desktop IDEs + DesktopRef string `protobuf:"bytes,2,opt,name=desktop_ref,json=desktopRef,proto3" json:"desktop_ref,omitempty"` +} + +func (x *StartWorkspaceSpec_IDEImage) Reset() { + *x = StartWorkspaceSpec_IDEImage{} + if protoimpl.UnsafeEnabled { + mi := &file_core_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartWorkspaceSpec_IDEImage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartWorkspaceSpec_IDEImage) ProtoMessage() {} + +func (x *StartWorkspaceSpec_IDEImage) ProtoReflect() protoreflect.Message { + mi := &file_core_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartWorkspaceSpec_IDEImage.ProtoReflect.Descriptor instead. +func (*StartWorkspaceSpec_IDEImage) Descriptor() ([]byte, []int) { + return file_core_proto_rawDescGZIP(), []int{30, 0} +} + +func (x *StartWorkspaceSpec_IDEImage) GetWebRef() string { + if x != nil { + return x.WebRef + } + return "" +} + +func (x *StartWorkspaceSpec_IDEImage) GetDesktopRef() string { + if x != nil { + return x.DesktopRef + } + return "" +} + var File_core_proto protoreflect.FileDescriptor var file_core_proto_rawDesc = []byte{ @@ -2716,111 +2834,119 @@ var file_core_proto_rawDesc = []byte{ 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x61, 0x75, 0x74, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x61, 0x75, 0x74, 0x68, 0x22, 0xa9, 0x02, 0x0a, 0x0d, 0x57, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x61, 0x75, 0x74, 0x68, 0x22, 0x94, 0x03, 0x0a, 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x64, 0x65, 0x5f, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x12, 0x10, - 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, - 0x12, 0x34, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, - 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, - 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x65, - 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x69, 0x64, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x49, 0x64, - 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x7f, 0x0a, 0x08, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x35, - 0x0a, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x56, - 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x93, 0x05, 0x0a, 0x13, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x12, 0x44, 0x0a, 0x0e, 0x70, 0x75, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x49, + 0x64, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x65, 0x61, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x65, 0x61, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x34, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, + 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, 0x65, + 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x77, 0x73, 0x6d, 0x61, + 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, + 0x3a, 0x0a, 0x09, 0x69, 0x64, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x49, 0x44, 0x45, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x52, 0x08, 0x69, 0x64, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x1a, 0x44, 0x0a, 0x08, 0x49, + 0x44, 0x45, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x5f, 0x72, + 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x65, 0x62, 0x52, 0x65, 0x66, + 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x66, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x52, 0x65, + 0x66, 0x22, 0x7f, 0x0a, 0x08, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x35, 0x0a, 0x0a, 0x76, 0x69, 0x73, + 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, + 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, + 0x72, 0x6c, 0x22, 0x93, 0x05, 0x0a, 0x13, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x61, + 0x69, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x0e, + 0x70, 0x75, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x6f, 0x6f, 0x6c, 0x52, 0x0d, 0x70, 0x75, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x73, 0x12, 0x44, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x78, + 0x69, 0x73, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, + 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x12, 0x51, 0x0a, 0x15, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, + 0x6f, 0x6c, 0x52, 0x13, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0d, 0x70, 0x75, 0x6c, 0x6c, 0x69, 0x6e, - 0x67, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0d, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x1a, 0x0a, - 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x51, 0x0a, 0x15, 0x66, 0x69, 0x6e, - 0x61, 0x6c, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, - 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x13, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x08, - 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, - 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x08, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, - 0x6c, 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x6f, 0x74, 0x52, 0x65, 0x61, - 0x64, 0x79, 0x12, 0x4a, 0x0a, 0x13, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x11, 0x66, 0x69, 0x72, - 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x30, - 0x0a, 0x14, 0x68, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, - 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x68, 0x65, - 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x54, 0x61, 0x73, 0x6b, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x12, 0x4b, 0x0a, 0x12, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, - 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x10, 0x73, 0x74, 0x6f, - 0x70, 0x70, 0x65, 0x64, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x8a, 0x02, - 0x0a, 0x11, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x65, 0x74, - 0x61, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x61, - 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x4b, 0x0a, - 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x67, 0x0a, 0x14, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x70, 0x6f, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, - 0x64, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, - 0x65, 0x49, 0x70, 0x22, 0x6f, 0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, - 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xba, 0x04, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x27, 0x0a, 0x0f, 0x77, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x64, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x49, 0x6d, 0x61, 0x67, + 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x08, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x65, 0x64, 0x12, 0x49, 0x0a, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x6f, + 0x74, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, + 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0f, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x6f, 0x74, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x4a, 0x0a, + 0x13, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x11, 0x66, 0x69, 0x72, 0x73, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x30, 0x0a, 0x14, 0x68, 0x65, 0x61, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x68, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x54, 0x61, 0x73, 0x6b, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x4b, 0x0a, 0x12, 0x73, + 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x10, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x42, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x8a, 0x02, 0x0a, 0x11, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, + 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x61, 0x49, 0x64, 0x12, 0x39, 0x0a, + 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x4b, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x67, 0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, + 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x6f, + 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, + 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x70, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x70, 0x22, 0x6f, + 0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, + 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x09, 0x61, 0x64, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, + 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, + 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, + 0xaa, 0x05, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, + 0x30, 0x0a, 0x14, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x64, + 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x64, + 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x49, 0x64, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x0d, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, @@ -2848,111 +2974,117 @@ var file_core_proto_rawDesc = []byte{ 0x12, 0x33, 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, - 0x5f, 0x69, 0x64, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x65, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x22, 0x3b, 0x0a, 0x07, 0x47, 0x69, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, - 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x3f, - 0x0a, 0x13, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, - 0x34, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, - 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4d, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x54, - 0x45, 0x4c, 0x59, 0x10, 0x01, 0x2a, 0x3a, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x44, 0x4d, 0x49, 0x54, - 0x5f, 0x4f, 0x57, 0x4e, 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x12, 0x0a, - 0x0e, 0x41, 0x44, 0x4d, 0x49, 0x54, 0x5f, 0x45, 0x56, 0x45, 0x52, 0x59, 0x4f, 0x4e, 0x45, 0x10, - 0x01, 0x2a, 0x49, 0x0a, 0x0e, 0x50, 0x6f, 0x72, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x56, 0x49, 0x53, 0x49, - 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x00, - 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, - 0x49, 0x54, 0x59, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x01, 0x2a, 0x38, 0x0a, 0x16, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, - 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, - 0x4d, 0x50, 0x54, 0x59, 0x10, 0x02, 0x2a, 0x83, 0x01, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, - 0x47, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, - 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, - 0x47, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x04, - 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x55, 0x50, 0x54, 0x45, 0x44, 0x10, - 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, - 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x68, 0x0a, 0x14, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4f, 0x50, 0x10, 0x00, 0x12, 0x19, - 0x0a, 0x15, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, - 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x49, 0x58, - 0x45, 0x44, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x53, 0x10, 0x05, 0x22, 0x04, - 0x08, 0x01, 0x10, 0x01, 0x22, 0x04, 0x08, 0x02, 0x10, 0x02, 0x22, 0x04, 0x08, 0x03, 0x10, 0x03, - 0x22, 0x04, 0x08, 0x06, 0x10, 0x06, 0x2a, 0x50, 0x0a, 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x47, 0x55, 0x4c, - 0x41, 0x52, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, - 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x52, 0x4f, 0x42, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, - 0x05, 0x47, 0x48, 0x4f, 0x53, 0x54, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4d, 0x41, 0x47, - 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x04, 0x32, 0xe5, 0x06, 0x0a, 0x10, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x4c, 0x0a, - 0x0d, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1b, - 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x77, 0x73, - 0x6d, 0x61, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, - 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x77, 0x73, - 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0d, - 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x2e, - 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x77, 0x73, 0x6d, - 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x11, 0x44, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x1f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x20, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0f, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x17, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, - 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x43, 0x0a, 0x0a, - 0x4d, 0x61, 0x72, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x18, 0x2e, 0x77, 0x73, 0x6d, - 0x61, 0x6e, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x4d, 0x61, 0x72, - 0x6b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, - 0x18, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x73, 0x6d, 0x61, - 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, - 0x0a, 0x0c, 0x54, 0x61, 0x6b, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1a, - 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x54, 0x61, 0x6b, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x77, 0x73, 0x6d, - 0x61, 0x6e, 0x2e, 0x54, 0x61, 0x6b, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x10, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, - 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, - 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, - 0x77, 0x73, 0x2d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x09, 0x69, 0x64, 0x65, 0x5f, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, + 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, + 0x70, 0x65, 0x63, 0x2e, 0x49, 0x44, 0x45, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x08, 0x69, 0x64, + 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x1a, 0x44, 0x0a, 0x08, 0x49, 0x44, 0x45, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x65, 0x62, 0x52, 0x65, 0x66, 0x12, 0x1f, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x66, 0x22, 0x3b, 0x0a, 0x07, + 0x47, 0x69, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x3f, 0x0a, 0x13, 0x45, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x34, 0x0a, 0x13, 0x53, 0x74, + 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x4c, 0x59, 0x10, 0x00, 0x12, + 0x0f, 0x0a, 0x0b, 0x49, 0x4d, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x10, 0x01, + 0x2a, 0x3a, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x44, 0x4d, 0x49, 0x54, 0x5f, 0x4f, 0x57, 0x4e, 0x45, + 0x52, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x44, 0x4d, 0x49, + 0x54, 0x5f, 0x45, 0x56, 0x45, 0x52, 0x59, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x49, 0x0a, 0x0e, + 0x50, 0x6f, 0x72, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1b, + 0x0a, 0x17, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, + 0x59, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x50, + 0x4f, 0x52, 0x54, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x50, + 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x01, 0x2a, 0x38, 0x0a, 0x16, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, + 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, + 0x02, 0x2a, 0x83, 0x01, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, + 0x68, 0x61, 0x73, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0c, + 0x0a, 0x08, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, + 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0b, + 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x49, + 0x4e, 0x54, 0x45, 0x52, 0x52, 0x55, 0x50, 0x54, 0x45, 0x44, 0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, + 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, + 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x68, 0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, + 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4f, 0x50, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x55, 0x4c, + 0x4c, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x42, 0x41, 0x43, 0x4b, + 0x55, 0x50, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x49, 0x58, 0x45, 0x44, 0x5f, 0x52, 0x45, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x53, 0x10, 0x05, 0x22, 0x04, 0x08, 0x01, 0x10, 0x01, 0x22, + 0x04, 0x08, 0x02, 0x10, 0x02, 0x22, 0x04, 0x08, 0x03, 0x10, 0x03, 0x22, 0x04, 0x08, 0x06, 0x10, + 0x06, 0x2a, 0x50, 0x0a, 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x47, 0x55, 0x4c, 0x41, 0x52, 0x10, 0x00, 0x12, + 0x0c, 0x0a, 0x08, 0x50, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x01, 0x12, 0x09, 0x0a, + 0x05, 0x50, 0x52, 0x4f, 0x42, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x48, 0x4f, 0x53, + 0x54, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x42, 0x55, 0x49, 0x4c, + 0x44, 0x10, 0x04, 0x32, 0xe5, 0x06, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, + 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x47, + 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, + 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, + 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, + 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x11, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x77, 0x73, 0x6d, + 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x73, + 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x52, 0x0a, 0x0f, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x12, 0x17, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x77, 0x73, 0x6d, 0x61, + 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x43, 0x0a, 0x0a, 0x4d, 0x61, 0x72, 0x6b, 0x41, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x18, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x4d, 0x61, + 0x72, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x19, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, + 0x53, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x2e, 0x77, 0x73, 0x6d, + 0x61, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x65, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6f, 0x72, 0x74, + 0x12, 0x19, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x73, + 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0c, 0x54, 0x61, 0x6b, + 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, + 0x6e, 0x2e, 0x54, 0x61, 0x6b, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x54, 0x61, + 0x6b, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x41, + 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, + 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, + 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2c, 0x5a, 0x2a, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, + 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x77, 0x73, 0x2d, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -2968,54 +3100,56 @@ func file_core_proto_rawDescGZIP() []byte { } var file_core_proto_enumTypes = make([]protoimpl.EnumInfo, 7) -var file_core_proto_msgTypes = make([]protoimpl.MessageInfo, 36) +var file_core_proto_msgTypes = make([]protoimpl.MessageInfo, 38) var file_core_proto_goTypes = []interface{}{ - (StopWorkspacePolicy)(0), // 0: wsman.StopWorkspacePolicy - (AdmissionLevel)(0), // 1: wsman.AdmissionLevel - (PortVisibility)(0), // 2: wsman.PortVisibility - (WorkspaceConditionBool)(0), // 3: wsman.WorkspaceConditionBool - (WorkspacePhase)(0), // 4: wsman.WorkspacePhase - (WorkspaceFeatureFlag)(0), // 5: wsman.WorkspaceFeatureFlag - (WorkspaceType)(0), // 6: wsman.WorkspaceType - (*MetadataFilter)(nil), // 7: wsman.MetadataFilter - (*GetWorkspacesRequest)(nil), // 8: wsman.GetWorkspacesRequest - (*GetWorkspacesResponse)(nil), // 9: wsman.GetWorkspacesResponse - (*StartWorkspaceRequest)(nil), // 10: wsman.StartWorkspaceRequest - (*StartWorkspaceResponse)(nil), // 11: wsman.StartWorkspaceResponse - (*StopWorkspaceRequest)(nil), // 12: wsman.StopWorkspaceRequest - (*StopWorkspaceResponse)(nil), // 13: wsman.StopWorkspaceResponse - (*DescribeWorkspaceRequest)(nil), // 14: wsman.DescribeWorkspaceRequest - (*DescribeWorkspaceResponse)(nil), // 15: wsman.DescribeWorkspaceResponse - (*SubscribeRequest)(nil), // 16: wsman.SubscribeRequest - (*SubscribeResponse)(nil), // 17: wsman.SubscribeResponse - (*MarkActiveRequest)(nil), // 18: wsman.MarkActiveRequest - (*MarkActiveResponse)(nil), // 19: wsman.MarkActiveResponse - (*SetTimeoutRequest)(nil), // 20: wsman.SetTimeoutRequest - (*SetTimeoutResponse)(nil), // 21: wsman.SetTimeoutResponse - (*ControlPortRequest)(nil), // 22: wsman.ControlPortRequest - (*ControlPortResponse)(nil), // 23: wsman.ControlPortResponse - (*TakeSnapshotRequest)(nil), // 24: wsman.TakeSnapshotRequest - (*TakeSnapshotResponse)(nil), // 25: wsman.TakeSnapshotResponse - (*ControlAdmissionRequest)(nil), // 26: wsman.ControlAdmissionRequest - (*ControlAdmissionResponse)(nil), // 27: wsman.ControlAdmissionResponse - (*BackupWorkspaceRequest)(nil), // 28: wsman.BackupWorkspaceRequest - (*BackupWorkspaceResponse)(nil), // 29: wsman.BackupWorkspaceResponse - (*WorkspaceStatus)(nil), // 30: wsman.WorkspaceStatus - (*WorkspaceSpec)(nil), // 31: wsman.WorkspaceSpec - (*PortSpec)(nil), // 32: wsman.PortSpec - (*WorkspaceConditions)(nil), // 33: wsman.WorkspaceConditions - (*WorkspaceMetadata)(nil), // 34: wsman.WorkspaceMetadata - (*WorkspaceRuntimeInfo)(nil), // 35: wsman.WorkspaceRuntimeInfo - (*WorkspaceAuthentication)(nil), // 36: wsman.WorkspaceAuthentication - (*StartWorkspaceSpec)(nil), // 37: wsman.StartWorkspaceSpec - (*GitSpec)(nil), // 38: wsman.GitSpec - (*EnvironmentVariable)(nil), // 39: wsman.EnvironmentVariable - nil, // 40: wsman.MetadataFilter.AnnotationsEntry - nil, // 41: wsman.SubscribeResponse.HeaderEntry - nil, // 42: wsman.WorkspaceMetadata.AnnotationsEntry - (*api.GitStatus)(nil), // 43: contentservice.GitStatus - (*timestamppb.Timestamp)(nil), // 44: google.protobuf.Timestamp - (*api.WorkspaceInitializer)(nil), // 45: contentservice.WorkspaceInitializer + (StopWorkspacePolicy)(0), // 0: wsman.StopWorkspacePolicy + (AdmissionLevel)(0), // 1: wsman.AdmissionLevel + (PortVisibility)(0), // 2: wsman.PortVisibility + (WorkspaceConditionBool)(0), // 3: wsman.WorkspaceConditionBool + (WorkspacePhase)(0), // 4: wsman.WorkspacePhase + (WorkspaceFeatureFlag)(0), // 5: wsman.WorkspaceFeatureFlag + (WorkspaceType)(0), // 6: wsman.WorkspaceType + (*MetadataFilter)(nil), // 7: wsman.MetadataFilter + (*GetWorkspacesRequest)(nil), // 8: wsman.GetWorkspacesRequest + (*GetWorkspacesResponse)(nil), // 9: wsman.GetWorkspacesResponse + (*StartWorkspaceRequest)(nil), // 10: wsman.StartWorkspaceRequest + (*StartWorkspaceResponse)(nil), // 11: wsman.StartWorkspaceResponse + (*StopWorkspaceRequest)(nil), // 12: wsman.StopWorkspaceRequest + (*StopWorkspaceResponse)(nil), // 13: wsman.StopWorkspaceResponse + (*DescribeWorkspaceRequest)(nil), // 14: wsman.DescribeWorkspaceRequest + (*DescribeWorkspaceResponse)(nil), // 15: wsman.DescribeWorkspaceResponse + (*SubscribeRequest)(nil), // 16: wsman.SubscribeRequest + (*SubscribeResponse)(nil), // 17: wsman.SubscribeResponse + (*MarkActiveRequest)(nil), // 18: wsman.MarkActiveRequest + (*MarkActiveResponse)(nil), // 19: wsman.MarkActiveResponse + (*SetTimeoutRequest)(nil), // 20: wsman.SetTimeoutRequest + (*SetTimeoutResponse)(nil), // 21: wsman.SetTimeoutResponse + (*ControlPortRequest)(nil), // 22: wsman.ControlPortRequest + (*ControlPortResponse)(nil), // 23: wsman.ControlPortResponse + (*TakeSnapshotRequest)(nil), // 24: wsman.TakeSnapshotRequest + (*TakeSnapshotResponse)(nil), // 25: wsman.TakeSnapshotResponse + (*ControlAdmissionRequest)(nil), // 26: wsman.ControlAdmissionRequest + (*ControlAdmissionResponse)(nil), // 27: wsman.ControlAdmissionResponse + (*BackupWorkspaceRequest)(nil), // 28: wsman.BackupWorkspaceRequest + (*BackupWorkspaceResponse)(nil), // 29: wsman.BackupWorkspaceResponse + (*WorkspaceStatus)(nil), // 30: wsman.WorkspaceStatus + (*WorkspaceSpec)(nil), // 31: wsman.WorkspaceSpec + (*PortSpec)(nil), // 32: wsman.PortSpec + (*WorkspaceConditions)(nil), // 33: wsman.WorkspaceConditions + (*WorkspaceMetadata)(nil), // 34: wsman.WorkspaceMetadata + (*WorkspaceRuntimeInfo)(nil), // 35: wsman.WorkspaceRuntimeInfo + (*WorkspaceAuthentication)(nil), // 36: wsman.WorkspaceAuthentication + (*StartWorkspaceSpec)(nil), // 37: wsman.StartWorkspaceSpec + (*GitSpec)(nil), // 38: wsman.GitSpec + (*EnvironmentVariable)(nil), // 39: wsman.EnvironmentVariable + nil, // 40: wsman.MetadataFilter.AnnotationsEntry + nil, // 41: wsman.SubscribeResponse.HeaderEntry + (*WorkspaceSpec_IDEImage)(nil), // 42: wsman.WorkspaceSpec.IDEImage + nil, // 43: wsman.WorkspaceMetadata.AnnotationsEntry + (*StartWorkspaceSpec_IDEImage)(nil), // 44: wsman.StartWorkspaceSpec.IDEImage + (*api.GitStatus)(nil), // 45: contentservice.GitStatus + (*timestamppb.Timestamp)(nil), // 46: google.protobuf.Timestamp + (*api.WorkspaceInitializer)(nil), // 47: contentservice.WorkspaceInitializer } var file_core_proto_depIdxs = []int32{ 40, // 0: wsman.MetadataFilter.annotations:type_name -> wsman.MetadataFilter.AnnotationsEntry @@ -3035,55 +3169,57 @@ var file_core_proto_depIdxs = []int32{ 31, // 14: wsman.WorkspaceStatus.spec:type_name -> wsman.WorkspaceSpec 4, // 15: wsman.WorkspaceStatus.phase:type_name -> wsman.WorkspacePhase 33, // 16: wsman.WorkspaceStatus.conditions:type_name -> wsman.WorkspaceConditions - 43, // 17: wsman.WorkspaceStatus.repo:type_name -> contentservice.GitStatus + 45, // 17: wsman.WorkspaceStatus.repo:type_name -> contentservice.GitStatus 35, // 18: wsman.WorkspaceStatus.runtime:type_name -> wsman.WorkspaceRuntimeInfo 36, // 19: wsman.WorkspaceStatus.auth:type_name -> wsman.WorkspaceAuthentication 32, // 20: wsman.WorkspaceSpec.exposed_ports:type_name -> wsman.PortSpec 6, // 21: wsman.WorkspaceSpec.type:type_name -> wsman.WorkspaceType - 2, // 22: wsman.PortSpec.visibility:type_name -> wsman.PortVisibility - 3, // 23: wsman.WorkspaceConditions.pulling_images:type_name -> wsman.WorkspaceConditionBool - 3, // 24: wsman.WorkspaceConditions.service_exists:type_name -> wsman.WorkspaceConditionBool - 3, // 25: wsman.WorkspaceConditions.final_backup_complete:type_name -> wsman.WorkspaceConditionBool - 3, // 26: wsman.WorkspaceConditions.deployed:type_name -> wsman.WorkspaceConditionBool - 3, // 27: wsman.WorkspaceConditions.network_not_ready:type_name -> wsman.WorkspaceConditionBool - 44, // 28: wsman.WorkspaceConditions.first_user_activity:type_name -> google.protobuf.Timestamp - 3, // 29: wsman.WorkspaceConditions.stopped_by_request:type_name -> wsman.WorkspaceConditionBool - 44, // 30: wsman.WorkspaceMetadata.started_at:type_name -> google.protobuf.Timestamp - 42, // 31: wsman.WorkspaceMetadata.annotations:type_name -> wsman.WorkspaceMetadata.AnnotationsEntry - 1, // 32: wsman.WorkspaceAuthentication.admission:type_name -> wsman.AdmissionLevel - 5, // 33: wsman.StartWorkspaceSpec.feature_flags:type_name -> wsman.WorkspaceFeatureFlag - 45, // 34: wsman.StartWorkspaceSpec.initializer:type_name -> contentservice.WorkspaceInitializer - 32, // 35: wsman.StartWorkspaceSpec.ports:type_name -> wsman.PortSpec - 39, // 36: wsman.StartWorkspaceSpec.envvars:type_name -> wsman.EnvironmentVariable - 38, // 37: wsman.StartWorkspaceSpec.git:type_name -> wsman.GitSpec - 1, // 38: wsman.StartWorkspaceSpec.admission:type_name -> wsman.AdmissionLevel - 8, // 39: wsman.WorkspaceManager.GetWorkspaces:input_type -> wsman.GetWorkspacesRequest - 10, // 40: wsman.WorkspaceManager.StartWorkspace:input_type -> wsman.StartWorkspaceRequest - 12, // 41: wsman.WorkspaceManager.StopWorkspace:input_type -> wsman.StopWorkspaceRequest - 14, // 42: wsman.WorkspaceManager.DescribeWorkspace:input_type -> wsman.DescribeWorkspaceRequest - 28, // 43: wsman.WorkspaceManager.BackupWorkspace:input_type -> wsman.BackupWorkspaceRequest - 16, // 44: wsman.WorkspaceManager.Subscribe:input_type -> wsman.SubscribeRequest - 18, // 45: wsman.WorkspaceManager.MarkActive:input_type -> wsman.MarkActiveRequest - 20, // 46: wsman.WorkspaceManager.SetTimeout:input_type -> wsman.SetTimeoutRequest - 22, // 47: wsman.WorkspaceManager.ControlPort:input_type -> wsman.ControlPortRequest - 24, // 48: wsman.WorkspaceManager.TakeSnapshot:input_type -> wsman.TakeSnapshotRequest - 26, // 49: wsman.WorkspaceManager.ControlAdmission:input_type -> wsman.ControlAdmissionRequest - 9, // 50: wsman.WorkspaceManager.GetWorkspaces:output_type -> wsman.GetWorkspacesResponse - 11, // 51: wsman.WorkspaceManager.StartWorkspace:output_type -> wsman.StartWorkspaceResponse - 13, // 52: wsman.WorkspaceManager.StopWorkspace:output_type -> wsman.StopWorkspaceResponse - 15, // 53: wsman.WorkspaceManager.DescribeWorkspace:output_type -> wsman.DescribeWorkspaceResponse - 29, // 54: wsman.WorkspaceManager.BackupWorkspace:output_type -> wsman.BackupWorkspaceResponse - 17, // 55: wsman.WorkspaceManager.Subscribe:output_type -> wsman.SubscribeResponse - 19, // 56: wsman.WorkspaceManager.MarkActive:output_type -> wsman.MarkActiveResponse - 21, // 57: wsman.WorkspaceManager.SetTimeout:output_type -> wsman.SetTimeoutResponse - 23, // 58: wsman.WorkspaceManager.ControlPort:output_type -> wsman.ControlPortResponse - 25, // 59: wsman.WorkspaceManager.TakeSnapshot:output_type -> wsman.TakeSnapshotResponse - 27, // 60: wsman.WorkspaceManager.ControlAdmission:output_type -> wsman.ControlAdmissionResponse - 50, // [50:61] is the sub-list for method output_type - 39, // [39:50] is the sub-list for method input_type - 39, // [39:39] is the sub-list for extension type_name - 39, // [39:39] is the sub-list for extension extendee - 0, // [0:39] is the sub-list for field type_name + 42, // 22: wsman.WorkspaceSpec.ide_image:type_name -> wsman.WorkspaceSpec.IDEImage + 2, // 23: wsman.PortSpec.visibility:type_name -> wsman.PortVisibility + 3, // 24: wsman.WorkspaceConditions.pulling_images:type_name -> wsman.WorkspaceConditionBool + 3, // 25: wsman.WorkspaceConditions.service_exists:type_name -> wsman.WorkspaceConditionBool + 3, // 26: wsman.WorkspaceConditions.final_backup_complete:type_name -> wsman.WorkspaceConditionBool + 3, // 27: wsman.WorkspaceConditions.deployed:type_name -> wsman.WorkspaceConditionBool + 3, // 28: wsman.WorkspaceConditions.network_not_ready:type_name -> wsman.WorkspaceConditionBool + 46, // 29: wsman.WorkspaceConditions.first_user_activity:type_name -> google.protobuf.Timestamp + 3, // 30: wsman.WorkspaceConditions.stopped_by_request:type_name -> wsman.WorkspaceConditionBool + 46, // 31: wsman.WorkspaceMetadata.started_at:type_name -> google.protobuf.Timestamp + 43, // 32: wsman.WorkspaceMetadata.annotations:type_name -> wsman.WorkspaceMetadata.AnnotationsEntry + 1, // 33: wsman.WorkspaceAuthentication.admission:type_name -> wsman.AdmissionLevel + 5, // 34: wsman.StartWorkspaceSpec.feature_flags:type_name -> wsman.WorkspaceFeatureFlag + 47, // 35: wsman.StartWorkspaceSpec.initializer:type_name -> contentservice.WorkspaceInitializer + 32, // 36: wsman.StartWorkspaceSpec.ports:type_name -> wsman.PortSpec + 39, // 37: wsman.StartWorkspaceSpec.envvars:type_name -> wsman.EnvironmentVariable + 38, // 38: wsman.StartWorkspaceSpec.git:type_name -> wsman.GitSpec + 1, // 39: wsman.StartWorkspaceSpec.admission:type_name -> wsman.AdmissionLevel + 44, // 40: wsman.StartWorkspaceSpec.ide_image:type_name -> wsman.StartWorkspaceSpec.IDEImage + 8, // 41: wsman.WorkspaceManager.GetWorkspaces:input_type -> wsman.GetWorkspacesRequest + 10, // 42: wsman.WorkspaceManager.StartWorkspace:input_type -> wsman.StartWorkspaceRequest + 12, // 43: wsman.WorkspaceManager.StopWorkspace:input_type -> wsman.StopWorkspaceRequest + 14, // 44: wsman.WorkspaceManager.DescribeWorkspace:input_type -> wsman.DescribeWorkspaceRequest + 28, // 45: wsman.WorkspaceManager.BackupWorkspace:input_type -> wsman.BackupWorkspaceRequest + 16, // 46: wsman.WorkspaceManager.Subscribe:input_type -> wsman.SubscribeRequest + 18, // 47: wsman.WorkspaceManager.MarkActive:input_type -> wsman.MarkActiveRequest + 20, // 48: wsman.WorkspaceManager.SetTimeout:input_type -> wsman.SetTimeoutRequest + 22, // 49: wsman.WorkspaceManager.ControlPort:input_type -> wsman.ControlPortRequest + 24, // 50: wsman.WorkspaceManager.TakeSnapshot:input_type -> wsman.TakeSnapshotRequest + 26, // 51: wsman.WorkspaceManager.ControlAdmission:input_type -> wsman.ControlAdmissionRequest + 9, // 52: wsman.WorkspaceManager.GetWorkspaces:output_type -> wsman.GetWorkspacesResponse + 11, // 53: wsman.WorkspaceManager.StartWorkspace:output_type -> wsman.StartWorkspaceResponse + 13, // 54: wsman.WorkspaceManager.StopWorkspace:output_type -> wsman.StopWorkspaceResponse + 15, // 55: wsman.WorkspaceManager.DescribeWorkspace:output_type -> wsman.DescribeWorkspaceResponse + 29, // 56: wsman.WorkspaceManager.BackupWorkspace:output_type -> wsman.BackupWorkspaceResponse + 17, // 57: wsman.WorkspaceManager.Subscribe:output_type -> wsman.SubscribeResponse + 19, // 58: wsman.WorkspaceManager.MarkActive:output_type -> wsman.MarkActiveResponse + 21, // 59: wsman.WorkspaceManager.SetTimeout:output_type -> wsman.SetTimeoutResponse + 23, // 60: wsman.WorkspaceManager.ControlPort:output_type -> wsman.ControlPortResponse + 25, // 61: wsman.WorkspaceManager.TakeSnapshot:output_type -> wsman.TakeSnapshotResponse + 27, // 62: wsman.WorkspaceManager.ControlAdmission:output_type -> wsman.ControlAdmissionResponse + 52, // [52:63] is the sub-list for method output_type + 41, // [41:52] is the sub-list for method input_type + 41, // [41:41] is the sub-list for extension type_name + 41, // [41:41] is the sub-list for extension extendee + 0, // [0:41] is the sub-list for field type_name } func init() { file_core_proto_init() } @@ -3488,6 +3624,30 @@ func file_core_proto_init() { return nil } } + file_core_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkspaceSpec_IDEImage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_core_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartWorkspaceSpec_IDEImage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -3495,7 +3655,7 @@ func file_core_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_core_proto_rawDesc, NumEnums: 7, - NumMessages: 36, + NumMessages: 38, NumExtensions: 0, NumServices: 1, }, diff --git a/components/ws-manager-api/typescript/src/core_pb.d.ts b/components/ws-manager-api/typescript/src/core_pb.d.ts index 2d7e8e185f38bc..769b5f63d3cbe8 100644 --- a/components/ws-manager-api/typescript/src/core_pb.d.ts +++ b/components/ws-manager-api/typescript/src/core_pb.d.ts @@ -599,8 +599,8 @@ export namespace WorkspaceStatus { export class WorkspaceSpec extends jspb.Message { getWorkspaceImage(): string; setWorkspaceImage(value: string): WorkspaceSpec; - getIdeImage(): string; - setIdeImage(value: string): WorkspaceSpec; + getDeprecatedIdeImage(): string; + setDeprecatedIdeImage(value: string): WorkspaceSpec; getHeadless(): boolean; setHeadless(value: boolean): WorkspaceSpec; getUrl(): string; @@ -613,8 +613,11 @@ export class WorkspaceSpec extends jspb.Message { setType(value: WorkspaceType): WorkspaceSpec; getTimeout(): string; setTimeout(value: string): WorkspaceSpec; - getDesktopIdeImage(): string; - setDesktopIdeImage(value: string): WorkspaceSpec; + + hasIdeImage(): boolean; + clearIdeImage(): void; + getIdeImage(): WorkspaceSpec.IDEImage | undefined; + setIdeImage(value?: WorkspaceSpec.IDEImage): WorkspaceSpec; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): WorkspaceSpec.AsObject; @@ -629,14 +632,39 @@ export class WorkspaceSpec extends jspb.Message { export namespace WorkspaceSpec { export type AsObject = { workspaceImage: string, - ideImage: string, + deprecatedIdeImage: string, headless: boolean, url: string, exposedPortsList: Array, type: WorkspaceType, timeout: string, - desktopIdeImage: string, + ideImage?: WorkspaceSpec.IDEImage.AsObject, + } + + + export class IDEImage extends jspb.Message { + getWebRef(): string; + setWebRef(value: string): IDEImage; + getDesktopRef(): string; + setDesktopRef(value: string): IDEImage; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): IDEImage.AsObject; + static toObject(includeInstance: boolean, msg: IDEImage): IDEImage.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: IDEImage, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): IDEImage; + static deserializeBinaryFromReader(message: IDEImage, reader: jspb.BinaryReader): IDEImage; + } + + export namespace IDEImage { + export type AsObject = { + webRef: string, + desktopRef: string, + } } + } export class PortSpec extends jspb.Message { @@ -807,8 +835,8 @@ export namespace WorkspaceAuthentication { export class StartWorkspaceSpec extends jspb.Message { getWorkspaceImage(): string; setWorkspaceImage(value: string): StartWorkspaceSpec; - getIdeImage(): string; - setIdeImage(value: string): StartWorkspaceSpec; + getDeprecatedIdeImage(): string; + setDeprecatedIdeImage(value: string): StartWorkspaceSpec; clearFeatureFlagsList(): void; getFeatureFlagsList(): Array; setFeatureFlagsList(value: Array): StartWorkspaceSpec; @@ -839,8 +867,11 @@ export class StartWorkspaceSpec extends jspb.Message { setTimeout(value: string): StartWorkspaceSpec; getAdmission(): AdmissionLevel; setAdmission(value: AdmissionLevel): StartWorkspaceSpec; - getDesktopIdeImage(): string; - setDesktopIdeImage(value: string): StartWorkspaceSpec; + + hasIdeImage(): boolean; + clearIdeImage(): void; + getIdeImage(): StartWorkspaceSpec.IDEImage | undefined; + setIdeImage(value?: StartWorkspaceSpec.IDEImage): StartWorkspaceSpec; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): StartWorkspaceSpec.AsObject; @@ -855,7 +886,7 @@ export class StartWorkspaceSpec extends jspb.Message { export namespace StartWorkspaceSpec { export type AsObject = { workspaceImage: string, - ideImage: string, + deprecatedIdeImage: string, featureFlagsList: Array, initializer?: content_service_api_initializer_pb.WorkspaceInitializer.AsObject, portsList: Array, @@ -865,8 +896,33 @@ export namespace StartWorkspaceSpec { git?: GitSpec.AsObject, timeout: string, admission: AdmissionLevel, - desktopIdeImage: string, + ideImage?: StartWorkspaceSpec.IDEImage.AsObject, + } + + + export class IDEImage extends jspb.Message { + getWebRef(): string; + setWebRef(value: string): IDEImage; + getDesktopRef(): string; + setDesktopRef(value: string): IDEImage; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): IDEImage.AsObject; + static toObject(includeInstance: boolean, msg: IDEImage): IDEImage.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: IDEImage, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): IDEImage; + static deserializeBinaryFromReader(message: IDEImage, reader: jspb.BinaryReader): IDEImage; + } + + export namespace IDEImage { + export type AsObject = { + webRef: string, + desktopRef: string, + } } + } export class GitSpec extends jspb.Message { diff --git a/components/ws-manager-api/typescript/src/core_pb.js b/components/ws-manager-api/typescript/src/core_pb.js index c27948b55d10fc..7c5ac4a6484a19 100644 --- a/components/ws-manager-api/typescript/src/core_pb.js +++ b/components/ws-manager-api/typescript/src/core_pb.js @@ -48,6 +48,7 @@ goog.exportSymbol('proto.wsman.SetTimeoutResponse', null, global); goog.exportSymbol('proto.wsman.StartWorkspaceRequest', null, global); goog.exportSymbol('proto.wsman.StartWorkspaceResponse', null, global); goog.exportSymbol('proto.wsman.StartWorkspaceSpec', null, global); +goog.exportSymbol('proto.wsman.StartWorkspaceSpec.IDEImage', null, global); goog.exportSymbol('proto.wsman.StopWorkspacePolicy', null, global); goog.exportSymbol('proto.wsman.StopWorkspaceRequest', null, global); goog.exportSymbol('proto.wsman.StopWorkspaceResponse', null, global); @@ -63,6 +64,7 @@ goog.exportSymbol('proto.wsman.WorkspaceMetadata', null, global); goog.exportSymbol('proto.wsman.WorkspacePhase', null, global); goog.exportSymbol('proto.wsman.WorkspaceRuntimeInfo', null, global); goog.exportSymbol('proto.wsman.WorkspaceSpec', null, global); +goog.exportSymbol('proto.wsman.WorkspaceSpec.IDEImage', null, global); goog.exportSymbol('proto.wsman.WorkspaceStatus', null, global); goog.exportSymbol('proto.wsman.WorkspaceType', null, global); /** @@ -590,6 +592,27 @@ if (goog.DEBUG && !COMPILED) { */ proto.wsman.WorkspaceSpec.displayName = 'proto.wsman.WorkspaceSpec'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.wsman.WorkspaceSpec.IDEImage = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.wsman.WorkspaceSpec.IDEImage, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.wsman.WorkspaceSpec.IDEImage.displayName = 'proto.wsman.WorkspaceSpec.IDEImage'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -716,6 +739,27 @@ if (goog.DEBUG && !COMPILED) { */ proto.wsman.StartWorkspaceSpec.displayName = 'proto.wsman.StartWorkspaceSpec'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.wsman.StartWorkspaceSpec.IDEImage = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.wsman.StartWorkspaceSpec.IDEImage, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.wsman.StartWorkspaceSpec.IDEImage.displayName = 'proto.wsman.StartWorkspaceSpec.IDEImage'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -4802,14 +4846,14 @@ proto.wsman.WorkspaceSpec.prototype.toObject = function(opt_includeInstance) { proto.wsman.WorkspaceSpec.toObject = function(includeInstance, msg) { var f, obj = { workspaceImage: jspb.Message.getFieldWithDefault(msg, 1, ""), - ideImage: jspb.Message.getFieldWithDefault(msg, 2, ""), + deprecatedIdeImage: jspb.Message.getFieldWithDefault(msg, 2, ""), headless: jspb.Message.getBooleanFieldWithDefault(msg, 3, false), url: jspb.Message.getFieldWithDefault(msg, 4, ""), exposedPortsList: jspb.Message.toObjectList(msg.getExposedPortsList(), proto.wsman.PortSpec.toObject, includeInstance), type: jspb.Message.getFieldWithDefault(msg, 6, 0), timeout: jspb.Message.getFieldWithDefault(msg, 7, ""), - desktopIdeImage: jspb.Message.getFieldWithDefault(msg, 8, "") + ideImage: (f = msg.getIdeImage()) && proto.wsman.WorkspaceSpec.IDEImage.toObject(includeInstance, f) }; if (includeInstance) { @@ -4852,7 +4896,7 @@ proto.wsman.WorkspaceSpec.deserializeBinaryFromReader = function(msg, reader) { break; case 2: var value = /** @type {string} */ (reader.readString()); - msg.setIdeImage(value); + msg.setDeprecatedIdeImage(value); break; case 3: var value = /** @type {boolean} */ (reader.readBool()); @@ -4876,8 +4920,9 @@ proto.wsman.WorkspaceSpec.deserializeBinaryFromReader = function(msg, reader) { msg.setTimeout(value); break; case 8: - var value = /** @type {string} */ (reader.readString()); - msg.setDesktopIdeImage(value); + var value = new proto.wsman.WorkspaceSpec.IDEImage; + reader.readMessage(value,proto.wsman.WorkspaceSpec.IDEImage.deserializeBinaryFromReader); + msg.setIdeImage(value); break; default: reader.skipField(); @@ -4915,7 +4960,7 @@ proto.wsman.WorkspaceSpec.serializeBinaryToWriter = function(message, writer) { f ); } - f = message.getIdeImage(); + f = message.getDeprecatedIdeImage(); if (f.length > 0) { writer.writeString( 2, @@ -4958,16 +5003,177 @@ proto.wsman.WorkspaceSpec.serializeBinaryToWriter = function(message, writer) { f ); } - f = message.getDesktopIdeImage(); + f = message.getIdeImage(); + if (f != null) { + writer.writeMessage( + 8, + f, + proto.wsman.WorkspaceSpec.IDEImage.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.wsman.WorkspaceSpec.IDEImage.prototype.toObject = function(opt_includeInstance) { + return proto.wsman.WorkspaceSpec.IDEImage.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.wsman.WorkspaceSpec.IDEImage} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.wsman.WorkspaceSpec.IDEImage.toObject = function(includeInstance, msg) { + var f, obj = { + webRef: jspb.Message.getFieldWithDefault(msg, 1, ""), + desktopRef: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.wsman.WorkspaceSpec.IDEImage} + */ +proto.wsman.WorkspaceSpec.IDEImage.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.wsman.WorkspaceSpec.IDEImage; + return proto.wsman.WorkspaceSpec.IDEImage.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.wsman.WorkspaceSpec.IDEImage} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.wsman.WorkspaceSpec.IDEImage} + */ +proto.wsman.WorkspaceSpec.IDEImage.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setWebRef(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setDesktopRef(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.wsman.WorkspaceSpec.IDEImage.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.wsman.WorkspaceSpec.IDEImage.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.wsman.WorkspaceSpec.IDEImage} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.wsman.WorkspaceSpec.IDEImage.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getWebRef(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getDesktopRef(); if (f.length > 0) { writer.writeString( - 8, + 2, f ); } }; +/** + * optional string web_ref = 1; + * @return {string} + */ +proto.wsman.WorkspaceSpec.IDEImage.prototype.getWebRef = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.wsman.WorkspaceSpec.IDEImage} returns this + */ +proto.wsman.WorkspaceSpec.IDEImage.prototype.setWebRef = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string desktop_ref = 2; + * @return {string} + */ +proto.wsman.WorkspaceSpec.IDEImage.prototype.getDesktopRef = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.wsman.WorkspaceSpec.IDEImage} returns this + */ +proto.wsman.WorkspaceSpec.IDEImage.prototype.setDesktopRef = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + /** * optional string workspace_image = 1; * @return {string} @@ -4987,10 +5193,10 @@ proto.wsman.WorkspaceSpec.prototype.setWorkspaceImage = function(value) { /** - * optional string ide_image = 2; + * optional string deprecated_ide_image = 2; * @return {string} */ -proto.wsman.WorkspaceSpec.prototype.getIdeImage = function() { +proto.wsman.WorkspaceSpec.prototype.getDeprecatedIdeImage = function() { return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); }; @@ -4999,7 +5205,7 @@ proto.wsman.WorkspaceSpec.prototype.getIdeImage = function() { * @param {string} value * @return {!proto.wsman.WorkspaceSpec} returns this */ -proto.wsman.WorkspaceSpec.prototype.setIdeImage = function(value) { +proto.wsman.WorkspaceSpec.prototype.setDeprecatedIdeImage = function(value) { return jspb.Message.setProto3StringField(this, 2, value); }; @@ -5115,20 +5321,39 @@ proto.wsman.WorkspaceSpec.prototype.setTimeout = function(value) { /** - * optional string desktop_ide_image = 8; - * @return {string} + * optional IDEImage ide_image = 8; + * @return {?proto.wsman.WorkspaceSpec.IDEImage} */ -proto.wsman.WorkspaceSpec.prototype.getDesktopIdeImage = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 8, "")); +proto.wsman.WorkspaceSpec.prototype.getIdeImage = function() { + return /** @type{?proto.wsman.WorkspaceSpec.IDEImage} */ ( + jspb.Message.getWrapperField(this, proto.wsman.WorkspaceSpec.IDEImage, 8)); }; /** - * @param {string} value + * @param {?proto.wsman.WorkspaceSpec.IDEImage|undefined} value + * @return {!proto.wsman.WorkspaceSpec} returns this +*/ +proto.wsman.WorkspaceSpec.prototype.setIdeImage = function(value) { + return jspb.Message.setWrapperField(this, 8, value); +}; + + +/** + * Clears the message field making it undefined. * @return {!proto.wsman.WorkspaceSpec} returns this */ -proto.wsman.WorkspaceSpec.prototype.setDesktopIdeImage = function(value) { - return jspb.Message.setProto3StringField(this, 8, value); +proto.wsman.WorkspaceSpec.prototype.clearIdeImage = function() { + return this.setIdeImage(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.wsman.WorkspaceSpec.prototype.hasIdeImage = function() { + return jspb.Message.getField(this, 8) != null; }; @@ -6437,7 +6662,7 @@ proto.wsman.StartWorkspaceSpec.prototype.toObject = function(opt_includeInstance proto.wsman.StartWorkspaceSpec.toObject = function(includeInstance, msg) { var f, obj = { workspaceImage: jspb.Message.getFieldWithDefault(msg, 1, ""), - ideImage: jspb.Message.getFieldWithDefault(msg, 2, ""), + deprecatedIdeImage: jspb.Message.getFieldWithDefault(msg, 2, ""), featureFlagsList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f, initializer: (f = msg.getInitializer()) && content$service$api_initializer_pb.WorkspaceInitializer.toObject(includeInstance, f), portsList: jspb.Message.toObjectList(msg.getPortsList(), @@ -6449,7 +6674,7 @@ proto.wsman.StartWorkspaceSpec.toObject = function(includeInstance, msg) { git: (f = msg.getGit()) && proto.wsman.GitSpec.toObject(includeInstance, f), timeout: jspb.Message.getFieldWithDefault(msg, 10, ""), admission: jspb.Message.getFieldWithDefault(msg, 11, 0), - desktopIdeImage: jspb.Message.getFieldWithDefault(msg, 12, "") + ideImage: (f = msg.getIdeImage()) && proto.wsman.StartWorkspaceSpec.IDEImage.toObject(includeInstance, f) }; if (includeInstance) { @@ -6492,7 +6717,7 @@ proto.wsman.StartWorkspaceSpec.deserializeBinaryFromReader = function(msg, reade break; case 2: var value = /** @type {string} */ (reader.readString()); - msg.setIdeImage(value); + msg.setDeprecatedIdeImage(value); break; case 3: var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedEnum() : [reader.readEnum()]); @@ -6537,8 +6762,9 @@ proto.wsman.StartWorkspaceSpec.deserializeBinaryFromReader = function(msg, reade msg.setAdmission(value); break; case 12: - var value = /** @type {string} */ (reader.readString()); - msg.setDesktopIdeImage(value); + var value = new proto.wsman.StartWorkspaceSpec.IDEImage; + reader.readMessage(value,proto.wsman.StartWorkspaceSpec.IDEImage.deserializeBinaryFromReader); + msg.setIdeImage(value); break; default: reader.skipField(); @@ -6576,7 +6802,7 @@ proto.wsman.StartWorkspaceSpec.serializeBinaryToWriter = function(message, write f ); } - f = message.getIdeImage(); + f = message.getDeprecatedIdeImage(); if (f.length > 0) { writer.writeString( 2, @@ -6650,16 +6876,177 @@ proto.wsman.StartWorkspaceSpec.serializeBinaryToWriter = function(message, write f ); } - f = message.getDesktopIdeImage(); + f = message.getIdeImage(); + if (f != null) { + writer.writeMessage( + 12, + f, + proto.wsman.StartWorkspaceSpec.IDEImage.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.wsman.StartWorkspaceSpec.IDEImage.prototype.toObject = function(opt_includeInstance) { + return proto.wsman.StartWorkspaceSpec.IDEImage.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.wsman.StartWorkspaceSpec.IDEImage} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.wsman.StartWorkspaceSpec.IDEImage.toObject = function(includeInstance, msg) { + var f, obj = { + webRef: jspb.Message.getFieldWithDefault(msg, 1, ""), + desktopRef: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.wsman.StartWorkspaceSpec.IDEImage} + */ +proto.wsman.StartWorkspaceSpec.IDEImage.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.wsman.StartWorkspaceSpec.IDEImage; + return proto.wsman.StartWorkspaceSpec.IDEImage.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.wsman.StartWorkspaceSpec.IDEImage} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.wsman.StartWorkspaceSpec.IDEImage} + */ +proto.wsman.StartWorkspaceSpec.IDEImage.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setWebRef(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setDesktopRef(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.wsman.StartWorkspaceSpec.IDEImage.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.wsman.StartWorkspaceSpec.IDEImage.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.wsman.StartWorkspaceSpec.IDEImage} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.wsman.StartWorkspaceSpec.IDEImage.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getWebRef(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getDesktopRef(); if (f.length > 0) { writer.writeString( - 12, + 2, f ); } }; +/** + * optional string web_ref = 1; + * @return {string} + */ +proto.wsman.StartWorkspaceSpec.IDEImage.prototype.getWebRef = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.wsman.StartWorkspaceSpec.IDEImage} returns this + */ +proto.wsman.StartWorkspaceSpec.IDEImage.prototype.setWebRef = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string desktop_ref = 2; + * @return {string} + */ +proto.wsman.StartWorkspaceSpec.IDEImage.prototype.getDesktopRef = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.wsman.StartWorkspaceSpec.IDEImage} returns this + */ +proto.wsman.StartWorkspaceSpec.IDEImage.prototype.setDesktopRef = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + /** * optional string workspace_image = 1; * @return {string} @@ -6679,10 +7066,10 @@ proto.wsman.StartWorkspaceSpec.prototype.setWorkspaceImage = function(value) { /** - * optional string ide_image = 2; + * optional string deprecated_ide_image = 2; * @return {string} */ -proto.wsman.StartWorkspaceSpec.prototype.getIdeImage = function() { +proto.wsman.StartWorkspaceSpec.prototype.getDeprecatedIdeImage = function() { return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); }; @@ -6691,7 +7078,7 @@ proto.wsman.StartWorkspaceSpec.prototype.getIdeImage = function() { * @param {string} value * @return {!proto.wsman.StartWorkspaceSpec} returns this */ -proto.wsman.StartWorkspaceSpec.prototype.setIdeImage = function(value) { +proto.wsman.StartWorkspaceSpec.prototype.setDeprecatedIdeImage = function(value) { return jspb.Message.setProto3StringField(this, 2, value); }; @@ -6956,20 +7343,39 @@ proto.wsman.StartWorkspaceSpec.prototype.setAdmission = function(value) { /** - * optional string desktop_ide_image = 12; - * @return {string} + * optional IDEImage ide_image = 12; + * @return {?proto.wsman.StartWorkspaceSpec.IDEImage} */ -proto.wsman.StartWorkspaceSpec.prototype.getDesktopIdeImage = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 12, "")); +proto.wsman.StartWorkspaceSpec.prototype.getIdeImage = function() { + return /** @type{?proto.wsman.StartWorkspaceSpec.IDEImage} */ ( + jspb.Message.getWrapperField(this, proto.wsman.StartWorkspaceSpec.IDEImage, 12)); }; /** - * @param {string} value + * @param {?proto.wsman.StartWorkspaceSpec.IDEImage|undefined} value + * @return {!proto.wsman.StartWorkspaceSpec} returns this +*/ +proto.wsman.StartWorkspaceSpec.prototype.setIdeImage = function(value) { + return jspb.Message.setWrapperField(this, 12, value); +}; + + +/** + * Clears the message field making it undefined. * @return {!proto.wsman.StartWorkspaceSpec} returns this */ -proto.wsman.StartWorkspaceSpec.prototype.setDesktopIdeImage = function(value) { - return jspb.Message.setProto3StringField(this, 12, value); +proto.wsman.StartWorkspaceSpec.prototype.clearIdeImage = function() { + return this.setIdeImage(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.wsman.StartWorkspaceSpec.prototype.hasIdeImage = function() { + return jspb.Message.getField(this, 12) != null; }; diff --git a/components/ws-manager/pkg/manager/create.go b/components/ws-manager/pkg/manager/create.go index 1372e312ebb077..101d936c0af6b7 100644 --- a/components/ws-manager/pkg/manager/create.go +++ b/components/ws-manager/pkg/manager/create.go @@ -236,10 +236,15 @@ func (m *Manager) createDefiniteWorkspacePod(startContext *startWorkspaceContext labels[k] = v } + ideRef := startContext.Request.Spec.DeprecatedIdeImage + if len(startContext.Request.Spec.IdeImage.WebRef) > 0 { + ideRef = startContext.Request.Spec.IdeImage.WebRef + } + spec := regapi.ImageSpec{ BaseRef: startContext.Request.Spec.WorkspaceImage, - IdeRef: startContext.Request.Spec.IdeImage, - DesktopIdeRef: startContext.Request.Spec.DesktopIdeImage, + IdeRef: ideRef, + DesktopIdeRef: startContext.Request.Spec.IdeImage.DesktopRef, } imageSpec, err := spec.ToBase64() if err != nil { diff --git a/components/ws-manager/pkg/manager/integration_test.go b/components/ws-manager/pkg/manager/integration_test.go index 2b716d55ec37d0..c559185a3c0aff 100644 --- a/components/ws-manager/pkg/manager/integration_test.go +++ b/components/ws-manager/pkg/manager/integration_test.go @@ -391,7 +391,7 @@ func (test *SingleWorkspaceIntegrationTest) Run(t *testing.T) { Username: "integration-test", }, WorkspaceImage: "gitpod/workspace-full:latest", - IdeImage: "gitpod/theia:" + deployedVersion, + IdeImage: &api.StartWorkspaceSpec_IDEImage{WebRef: "gitpod/theia:" + deployedVersion}, WorkspaceLocation: "/workspace", Initializer: &csapi.WorkspaceInitializer{ Spec: &csapi.WorkspaceInitializer_Empty{Empty: &csapi.EmptyInitializer{}}, diff --git a/components/ws-manager/pkg/manager/status.go b/components/ws-manager/pkg/manager/status.go index ff0db78f009241..f598f5b10a2e69 100644 --- a/components/ws-manager/pkg/manager/status.go +++ b/components/ws-manager/pkg/manager/status.go @@ -269,13 +269,15 @@ func (m *Manager) getWorkspaceStatus(wso workspaceObjects) (*api.WorkspaceStatus StatusVersion: m.clock.Tick(), Metadata: getWorkspaceMetadata(wso.Pod), Spec: &api.WorkspaceSpec{ - Headless: wso.IsWorkspaceHeadless(), - WorkspaceImage: wsImage, - IdeImage: ideImage, - DesktopIdeImage: desktopIdeImage, - Url: wsurl, - Type: tpe, - Timeout: timeout, + Headless: wso.IsWorkspaceHeadless(), + WorkspaceImage: wsImage, + IdeImage: &api.WorkspaceSpec_IDEImage{ + WebRef: ideImage, + DesktopRef: desktopIdeImage, + }, + Url: wsurl, + Type: tpe, + Timeout: timeout, }, Conditions: &api.WorkspaceConditions{ Snapshot: wso.Pod.Annotations[workspaceSnapshotAnnotation], diff --git a/components/ws-manager/pkg/manager/testing_test.go b/components/ws-manager/pkg/manager/testing_test.go index 8464a382c9dd73..b7d2e5abffbaa1 100644 --- a/components/ws-manager/pkg/manager/testing_test.go +++ b/components/ws-manager/pkg/manager/testing_test.go @@ -126,7 +126,7 @@ func forTestingOnlyCreateStartWorkspaceContext(manager *Manager, id string, tpe }, Spec: &api.StartWorkspaceSpec{ WorkspaceImage: "foobar", - IdeImage: "someide:version.0", + IdeImage: &api.StartWorkspaceSpec_IDEImage{WebRef: "someide:version.0"}, Ports: []*api.PortSpec{}, Initializer: &csapi.WorkspaceInitializer{}, }, diff --git a/components/ws-proxy/pkg/proxy/infoprovider.go b/components/ws-proxy/pkg/proxy/infoprovider.go index 564223f9d32de8..98c8fb8b63d305 100644 --- a/components/ws-proxy/pkg/proxy/infoprovider.go +++ b/components/ws-proxy/pkg/proxy/infoprovider.go @@ -289,11 +289,16 @@ func mapWorkspaceStatusToInfo(status *wsapi.WorkspaceStatus) *WorkspaceInfo { }) } + ideImage := status.Spec.DeprecatedIdeImage + if len(status.Spec.IdeImage.WebRef) > 0 { + ideImage = status.Spec.IdeImage.WebRef + } + return &WorkspaceInfo{ WorkspaceID: status.Metadata.MetaId, InstanceID: status.Id, URL: status.Spec.Url, - IDEImage: status.Spec.IdeImage, + IDEImage: ideImage, IDEPublicPort: getPortStr(status.Spec.Url), Ports: portInfos, Auth: status.Auth, diff --git a/components/ws-proxy/pkg/proxy/infoprovider_test.go b/components/ws-proxy/pkg/proxy/infoprovider_test.go index 9fcd1e8f2c0117..f7d2ccdd9c13ab 100644 --- a/components/ws-proxy/pkg/proxy/infoprovider_test.go +++ b/components/ws-proxy/pkg/proxy/infoprovider_test.go @@ -200,7 +200,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { existing: existing{}, args: args{ newInfo: &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", InstanceID: testWorkspaceStatus.Id, @@ -218,7 +218,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { }, expected: expected{ info: &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", InstanceID: testWorkspaceStatus.Id, @@ -259,7 +259,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { }, args: args{ newInfo: &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -304,7 +304,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { }, args: args{ newInfo: &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -349,7 +349,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { }, args: args{ newInfo: &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: same ID @@ -368,7 +368,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { }, expected: expected{ info: &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: same ID @@ -400,7 +400,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { testWorkspaceInfo.WorkspaceID: { testWorkspaceInfo.InstanceID: testWorkspaceInfo, "e63cb5ff-f4e4-4065-8554-b431a32c0001": &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -427,7 +427,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { }, args: args{ newInfo: &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -446,7 +446,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { }, expected: expected{ info: &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -478,7 +478,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { testWorkspaceInfo.WorkspaceID: { testWorkspaceInfo.InstanceID: testWorkspaceInfo, "e63cb5ff-f4e4-4065-8554-b431a32c0001": &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -505,7 +505,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { }, args: args{ newInfo: &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "444", // NOTE: different ID @@ -524,7 +524,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { }, expected: expected{ info: &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "444", // NOTE: different ID @@ -560,7 +560,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { testWorkspaceInfo.WorkspaceID: { testWorkspaceInfo.InstanceID: testWorkspaceInfo, "e63cb5ff-f4e4-4065-8554-b431a32c0001": &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -605,7 +605,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { infos: instanceInfosByWorkspace{ testWorkspaceInfo.WorkspaceID: { "e63cb5ff-f4e4-4065-8554-b431a32c0001": &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -622,7 +622,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { StartedAt: startedNow, }, "e63cb5ff-f4e4-4065-8554-b431a32c0002": &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -649,7 +649,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { }, args: args{ newInfo: &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -668,7 +668,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { }, expected: expected{ info: &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -699,7 +699,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { infos: instanceInfosByWorkspace{ testWorkspaceInfo.WorkspaceID: { "e63cb5ff-f4e4-4065-8554-b431a32c0001": &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -716,7 +716,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { StartedAt: startedNow, }, "e63cb5ff-f4e4-4065-8554-b431a32c0002": &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -743,7 +743,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { }, args: args{ newInfo: &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -762,7 +762,7 @@ func Test_workspaceInfoCache_Insert(t *testing.T) { }, expected: expected{ info: &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -899,7 +899,7 @@ func Test_workspaceInfoCache_Delete(t *testing.T) { testWorkspaceInfo.WorkspaceID: { testWorkspaceInfo.InstanceID: testWorkspaceInfo, "e63cb5ff-f4e4-4065-8554-b431a32c0001": &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", // NOTE: different ID @@ -993,7 +993,7 @@ var ( }, Phase: wsapi.WorkspacePhase_RUNNING, Spec: &wsapi.WorkspaceSpec{ - IdeImage: "testWorkspaceIDEImage", + IdeImage: &wsapi.WorkspaceSpec_IDEImage{WebRef: "testWorkspaceIDEImage"}, Headless: false, Type: wsapi.WorkspaceType_REGULAR, Url: "https://e63cb5ff-f4e4-4065-8554-b431a32c2714.ws-eu02.gitpod.io", @@ -1008,7 +1008,7 @@ var ( }, } testWorkspaceInfo = &WorkspaceInfo{ - IDEImage: testWorkspaceStatus.Spec.IdeImage, + IDEImage: testWorkspaceStatus.Spec.IdeImage.WebRef, Auth: testWorkspaceStatus.Auth, IDEPublicPort: "443", InstanceID: testWorkspaceStatus.Id, diff --git a/dev/loadgen/cmd/benchmark.go b/dev/loadgen/cmd/benchmark.go index 1e2c5b4820ece6..251909c74f40c0 100644 --- a/dev/loadgen/cmd/benchmark.go +++ b/dev/loadgen/cmd/benchmark.go @@ -62,7 +62,9 @@ var benchmarkCommand = &cobra.Command{ }, ServicePrefix: "will-be-overriden", Spec: &api.StartWorkspaceSpec{ - IdeImage: scenario.IDEImage, + IdeImage: &api.StartWorkspaceSpec_IDEImage{ + WebRef: scenario.IDEImage, + }, Admission: api.AdmissionLevel_ADMIT_OWNER_ONLY, CheckoutLocation: "gitpod", Git: &api.GitSpec{ diff --git a/dev/loadgen/cmd/run.go b/dev/loadgen/cmd/run.go index 823a5abab69920..4f216cd553ba4f 100644 --- a/dev/loadgen/cmd/run.go +++ b/dev/loadgen/cmd/run.go @@ -51,7 +51,9 @@ var runCmd = &cobra.Command{ }, ServicePrefix: "will-be-overriden", Spec: &api.StartWorkspaceSpec{ - IdeImage: "eu.gcr.io/gitpod-core-dev/build/ide/code:commit-8c1466008dedabe79d82cbb91931a16f7ce7994c", + IdeImage: &api.StartWorkspaceSpec_IDEImage{ + WebRef: "eu.gcr.io/gitpod-core-dev/build/ide/code:commit-8c1466008dedabe79d82cbb91931a16f7ce7994c", + }, Admission: api.AdmissionLevel_ADMIT_OWNER_ONLY, CheckoutLocation: "gitpod", Git: &api.GitSpec{ diff --git a/test/pkg/integration/workspace.go b/test/pkg/integration/workspace.go index c2249787aa013c..e1f320bb0e00a0 100644 --- a/test/pkg/integration/workspace.go +++ b/test/pkg/integration/workspace.go @@ -151,8 +151,10 @@ func LaunchWorkspaceDirectly(ctx context.Context, api *ComponentAPI, opts ...Lau }, Type: wsmanapi.WorkspaceType_REGULAR, Spec: &wsmanapi.StartWorkspaceSpec{ - WorkspaceImage: workspaceImage, - IdeImage: ideImage, + WorkspaceImage: workspaceImage, + IdeImage: &wsmanapi.StartWorkspaceSpec_IDEImage{ + WebRef: ideImage, + }, CheckoutLocation: "/", WorkspaceLocation: "/", Timeout: "30m",