From a603152fefb31253d4b8e55a5911009c1f882740 Mon Sep 17 00:00:00 2001 From: "Christian Weichel (Chris)" Date: Fri, 24 Nov 2023 14:54:35 +0000 Subject: [PATCH 1/8] Refine workspace API --- components/public-api/gitpod/v1/envvar.proto | 9 +- .../public-api/gitpod/v1/workspace.proto | 521 ++- components/public-api/go/v1/envvar.pb.go | 259 +- .../go/v1/v1connect/workspace.connect.go | 50 + .../v1/v1connect/workspace.proxy.connect.go | 20 + components/public-api/go/v1/workspace.pb.go | 3651 +++++++++++++---- .../public-api/go/v1/workspace_grpc.pb.go | 78 + .../typescript/src/gitpod/v1/envvar_pb.ts | 30 +- .../src/gitpod/v1/workspace_connect.ts | 25 +- .../typescript/src/gitpod/v1/workspace_pb.ts | 1932 +++++++-- 10 files changed, 5153 insertions(+), 1422 deletions(-) diff --git a/components/public-api/gitpod/v1/envvar.proto b/components/public-api/gitpod/v1/envvar.proto index b12376dc14fca8..b60297ad956bcc 100644 --- a/components/public-api/gitpod/v1/envvar.proto +++ b/components/public-api/gitpod/v1/envvar.proto @@ -142,9 +142,10 @@ message ResolveWorkspaceEnvironmentVariablesRequest { } message ResolveWorkspaceEnvironmentVariablesResponse { - message EnvironmentVariable { - string name = 1; - string value = 2; - } repeated EnvironmentVariable environment_variables = 1; } + +message EnvironmentVariable { + string name = 1; + string value = 2; +} diff --git a/components/public-api/gitpod/v1/workspace.proto b/components/public-api/gitpod/v1/workspace.proto index 118c2f0ad575e4..b80e982768118a 100644 --- a/components/public-api/gitpod/v1/workspace.proto +++ b/components/public-api/gitpod/v1/workspace.proto @@ -3,7 +3,9 @@ syntax = "proto3"; package gitpod.v1; import "gitpod/v1/editor.proto"; +import "gitpod/v1/envvar.proto"; import "gitpod/v1/pagination.proto"; +import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; option go_package = "github.com/gitpod-io/gitpod/components/public-api/go/v1"; @@ -30,6 +32,13 @@ service WorkspaceService { // If the specified workspace is not in stopped phase, this will return the workspace as is. rpc StartWorkspace(StartWorkspaceRequest) returns (StartWorkspaceResponse) {} + // UpdateWorkspace updates the workspace. + rpc UpdateWorkspace(UpdateWorkspaceRequest) returns (UpdateWorkspaceResponse) {} + + // ParseContextURL parses a context URL and returns the workspace metadata and spec. + // Not implemented yet. + rpc ParseContextURL(ParseContextURLRequest) returns (ParseContextURLResponse) {} + // GetWorkspaceDefaultImage returns the default workspace image of specified // workspace. rpc GetWorkspaceDefaultImage(GetWorkspaceDefaultImageRequest) returns (GetWorkspaceDefaultImageResponse) {} @@ -88,71 +97,43 @@ message ListWorkspacesRequest { } message ListWorkspacesResponse { - // workspaces are the workspaces that matched the query - repeated Workspace workspaces = 1; - // pagination contains the pagination options for listing workspaces - PaginationResponse pagination = 2; + PaginationResponse pagination = 1; + + // workspaces are the workspaces that matched the query + repeated Workspace workspaces = 2; } +// Required fields: +// - metadata.organization_id +// - metadata.configuration_id message CreateAndStartWorkspaceRequest { - message Git { - // clone_url is the URL of the repository to clone - string clone_url = 1; - - // ref is an alternatively symbolic. e.g. refs/tags/v1.0, - // empty string means the default branch of the repository - string ref = 2; + message ContextURL { + // url is the URL from which the workspace is created + string url = 1; - // create_local_branch is the branch you want to create based on provided - // clone_url and ref when workspace started - string create_local_branch = 3; + // workspace_class is the class of the workspace we ought to start + string workspace_class = 2; } - // organization_id is the ID of the organization to create the workspace - // - // +required - string organization_id = 1; + // metadata is data associated with this workspace that's required for other parts of Gitpod to function + WorkspaceMetadata metadata = 2; - // configuration_id is the ID of the configuration to use - string configuration_id = 2; - - // source describes the source refer of workspace. - // - // +required oneof source { - // git describes the source refer of workspace - // Obtain available git using the ContextService.ParseContext operation if - // not sure about it. - Git git = 3; - - // context_url is for backward compatiblity with the current dashboard, use - // ContextService.ParseContext get get a Git source instead - string context_url = 4 [deprecated = true]; - } - - // additional_env_variables provide additional environment variables to the - // workspace. - // It will take precedence over environment variables provided by - // the user and the configuration - repeated WorkspaceEnvironmentVariable additional_env_variables = 5; + // context_url is the URL from which the workspace is created + ContextURL context_url = 3; - string region = 6; - - // workspace_class is the class of the workspace - - string workspace_class = 7; - - EditorReference editor = 8; - - string name = 9; + // spec is the configuration of the workspace that's required for the to start the workspace + WorkspaceSpec spec = 4; + } - bool pinned = 10; + // editor specifies the editor that will be used with this workspace. + EditorReference editor = 5; // force_default_config indicates that the workspace should be created with // the default configuration instead of the configuration provided in // `.gitpod.yml` file - bool force_default_config = 11; + bool force_default_config = 7 [deprecated = true]; } message CreateAndStartWorkspaceResponse { @@ -165,7 +146,7 @@ message StartWorkspaceRequest { // +required string workspace_id = 1; - bool force_default_config = 2; + bool force_default_config = 2 [deprecated = true]; } message StartWorkspaceResponse { @@ -220,95 +201,178 @@ message GetWorkspaceEditorCredentialsResponse { // +resource get workspace message Workspace { + // ID is a unique identifier of this workspace. No other workspace with the same name must be managed by this workspace manager string id = 1; - // prebuild indicates it is a prebuild - // TODO(ak) model prebuilds as a separate resource - bool prebuild = 2; - string organization_id = 3; + // Metadata is data associated with this workspace that's required for other parts of Gitpod to function + WorkspaceMetadata metadata = 2; - string name = 4; - bool pinned = 5; + // Spec is the configuration of the workspace that's required for the ws-manager to start the workspace + WorkspaceSpec spec = 3; - WorkspaceStatus status = 6; + // Status is the current status of the workspace + WorkspaceStatus status = 4; +} - // additional_environment_variables provide additional environment variables - // which take precedence over environment variables provided by the project - // and user. - // - // +optional - repeated WorkspaceEnvironmentVariable additional_environment_variables = 7; +// WorkspaceMetadata is data associated with a workspace that's required for other parts of the system to function +message WorkspaceMetadata { + // organization_id is the ID of the organization that contains the workspace + string owner_id = 1; - // region specifies the region in which the workspace will be created. - // Obtain available regions using the ListRegions operation. - // - // +optional defaults to the user's default region - string region = 8; + // owner is the ID of the Gitpod user to whom we'll bill this workspace and who we consider responsible for its content + string organization_id = 2; - // workspace_class specifies the workspace class with which to create the - // workspace. Obtain available workspace classes using the ListWorkspaceClass - // operation. - // - // +optional defaults to the class configured on the project or the cluster's - // default class. - string workspace_class = 9; + // configuration_id is the ID of the configuration used by this workspace + string configuration_id = 3; - // editor specifies the editor that will be used with this workspace. - // Obtain available editors using the EditorService.ListEditors operation. - // - // +optional defaults to the default editor of the user - EditorReference editor = 10; + // Annotations are key/value pairs that gets attached to the workspace. + // +internal - not yet implemented + map annotations = 4; - // context_url is the normalized URL from which the workspace was created - // TODO(ak) replace with resolveContextURL API - string context_url = 11; + // name is the name of the workspace as specified by the user + string name = 5; - // Prebuild ID is the unique identifier of the prebuild - // from which this workspace was created - // +optional if empty then this workspace was not created from a prebuild - string prebuild_id = 12; + // pinned indicates whether the workspace is pinned + bool pinned = 6; + + // original_context_url is the normalized URL from which the workspace was created + string original_context_url = 7; } -message WorkspaceStatus { - // Phase is a simple, high-level summary of where the workspace is in its - // lifecycle. The phase is not intended to be a comprehensive rollup of - // observations of the workspace state, nor is it intended to be a - // comprehensive state machine. - WorkspacePhase phase = 1; +// WorkspaceSpec specifies the configuration of a workspace for a workspace start +message WorkspaceSpec { + // Timeout configures the workspace timeout + message Timeout { + // inacitivity is the maximum time of inactivity before the workspace is stopped or paused + google.protobuf.Duration inactivity = 1; + // inacitivity is the maximum time of disconnection before the workspace is stopped or paused + // set to zero to disable. + google.protobuf.Duration disconnected = 2; + // maximum lifetime of the workspace + google.protobuf.Duration maximum_lifetime = 3; + } - // message is an optional human-readable message detailing the current phase - string message = 2; + // GitSpec configures the Git available within the workspace + message GitSpec { + // The Git username + string username = 1; - // workspace_url is the URL of the workspace. Only present when the phase is - // running. - string workspace_url = 3; + // The Git email address + string email = 2; + } - // git_status details the Git working copy status of the workspace. - // Note: this is a best-effort field and more often than not will not be - // present. Its absence does not indicate the absence of a working copy. - WorkspaceGitStatus git_status = 4; + // WorkspaceType specifies the purpose/use of a workspace. Different workspace types are handled differently by all parts of the system. + enum WorkspaceType { + WORKSPACE_TYPE_UNSPECIFIED = 0; + + // Regular workspaces are your off-the-mill workspaces intended for users. They are directly user-facing and hence are most important. + WORKSPACE_TYPE_REGULAR = 1; + + // Prebuild workspaces are workspaces used to pre-build the content of other workspaces. They run headless and have no direct user-interaction. + WORKSPACE_TYPE_PREBUILD = 2; + } + + // initializer configures how the workspace is to be initialized + WorkspaceInitializer initializer = 1; + + // Type denots the kind of workspace we ought to start + WorkspaceType type = 2; + + // ports is the set of ports which ought to be exposed to the internet + repeated WorkspacePort ports = 3; + + // envvars are user-defined environment variables which ought to be available in the workspace (shim'ed environment) + repeated EnvironmentVariable environment_variables = 4; - // ports lists the network ports currently available/known of this workspace - repeated WorkspacePort ports = 5; + // Git configures the Git user in the workspace + GitSpec git = 5; - // Admission describes who can access a workspace instance and its ports. - AdmissionLevel admission = 6; + // Timeout configures the workspace timeout + Timeout timeout = 6; - // Instance ID is the unique identifier of the workspace instance - string instance_id = 7; + // admission controlls who can access the workspace and its ports. + AdmissionLevel admission = 7; - // Conditions contains observations of the workspace's current phase. - WorkspaceConditions conditions = 8; + // Class denotes the class of the workspace we ought to start + string class = 8; + + // ssh_public_keys is user's uploaded ssh public keys + repeated string ssh_public_keys = 9; + + // subassembly_references is a list of workspace IDs that this workspace depends on. + // For example: + // index.docker.io/gitpod-io/subassmeblies/code:latest + repeated string subassembly_references = 10; + + // last_user_activity is the time when the user last interacted with the workspace + google.protobuf.Timestamp last_user_activity = 11; + + // log_url is the URL where we stream the workspace's logs to. + // Can be changed when the workspace is PENDING or STOPPED. + string log_url = 12; } -message WorkspaceConditions { - // failed contains technical details for the failure of the workspace. - // +optional If this field is empty, the workspace has not failed. - string failed = 1; +// WorkspaceStatus describes a workspace status +message WorkspaceStatus { + // WorkspaceCondition gives more detailed information as to the state of the workspace. Which condition actually + // has a value depends on the phase the workspace is in. + message WorkspaceConditions { + enum FailedReason { + FAILED_REASON_UNSPECIFIED = 0; + FAILED_REASON_CONTENT_INITIALIZATION_FAILED = 1; + FAILED_REASON_BACKUP_FAILED = 2; + FAILED_REASON_IMAGE_PULL_FAILURE = 3; + FAILED_REASON_UNEXPECTED_TERMINATION = 4; + } + + // failed contains the reason the workspace failed to operate. If this field is empty, the workspace has not failed. + string failed = 1; + + // failed_reason contains the reason the workspace failed to operate. + // This field is only set if the workspace has failed. + FailedReason failed_reason = 2; + + // timeout contains the reason the workspace has timed out. If this field is empty, the workspace has not timed out. + string timeout = 3; + } - // timeout contains the reason the workspace has timed out. - // +optional If this field is empty, the workspace has not timed out. - string timeout = 2; + message PrebuildResult { + // Snapshot points to the content of the prebuild. This string is opaque to the cluster manager, + // and must be returned unaltered. + string snapshot = 1; + + // The prebuild's error message + string error_message = 2; + } + + // version of the status update. Workspace instances themselves are unversioned, + // but their statuus has different versions. + // The value of this field has no semantic meaning (e.g. don't interpret it as + // as a timestemp), but it can be used to impose a partial order. + // If a.status_version < b.status_version then a was the status before b. + uint64 status_version = 1; + + // the phase of a workspace is a simple, high-level summary of where the workspace is in its lifecycle + WorkspacePhase phase = 2; + + // workspace_url contains the URL at which the workspace can be accessed. + // This field is only set if the workspace is running. + string workspace_url = 3; + + // conditions detail the current state of the workspace + WorkspaceConditions conditions = 4; + + // prebuild_result contains the result of a prebuild. Only if the workspace is + PrebuildResult prebuild_result = 5; + + // git_status details the Git working copy status of the workspace. + // Note: this is a best-effort field and more often than not will not be present. Its absence does not + // indicate the absence of a working copy. + WorkspaceGitStatus git_status = 6; + + // instance_id is the ID of the workspace instance - do not use, interpret or rely on this field + // unless you know what you're doing. + string instance_id = 7 [deprecated = true]; } // Admission level describes who can access a workspace instance and its ports. @@ -325,20 +389,6 @@ enum AdmissionLevel { } message WorkspacePort { - // Policy defines the accssbility policy of a workspace port is guarded by an - // authentication in the proxy - enum Policy { - POLICY_UNSPECIFIED = 0; - - // Private means the port is accessible by the workspace owner only using - // the workspace port URL - POLICY_PRIVATE = 1; - - // Public means the port is accessible by everybody using the workspace port - // URL - POLICY_PUBLIC = 2; - } - // Protocol defines the backend protocol of port enum Protocol { PROTOCOL_UNSPECIFIED = 0; @@ -354,7 +404,7 @@ message WorkspacePort { uint64 port = 1; // policy of this port - Policy policy = 2; + AdmissionLevel admission = 2; // url that can be used to access the port string url = 3; @@ -437,19 +487,214 @@ message WorkspacePhase { // become running or stopping anytime soon. PHASE_INTERRUPTED = 7; + // Paused means the workspace is currently unavailable, akin to stopped, + // but faster to wake up. + PHASE_PAUSED = 8; + // Stopping means that the workspace is currently shutting down. It could go // to stopped every moment. - PHASE_STOPPING = 8; + PHASE_STOPPING = 9; // Stopped means the workspace ended regularly because it was shut down. - PHASE_STOPPED = 9; + PHASE_STOPPED = 10; } Phase name = 1; google.protobuf.Timestamp last_transition_time = 2; } -message WorkspaceEnvironmentVariable { - string name = 1; - string value = 2; +// WorkspaceInitializer specifies how a workspace is to be initialized +message WorkspaceInitializer { + message Spec { + oneof spec { + GitInitializer git = 1; + SnapshotInitializer snapshot = 2; + PrebuildInitializer prebuild = 3; + FileDownloadInitializer download = 4; + } + } + repeated Spec specs = 1; +} + +message GitInitializer { + // CloneTargetMode is the target state in which we want to leave a GitWorkspace + enum CloneTargetMode { + CLONE_TARGET_MODE_UNSPECIFIED = 0; + + // REMOTE_HEAD has the local WS point at the remote branch head + CLONE_TARGET_MODE_REMOTE_HEAD = 1; + + // REMOTE_COMMIT has the local WS point at a specific commit + CLONE_TARGET_MODE_REMOTE_COMMIT = 2; + + // REMOTE_BRANCH has the local WS point at a remote branch + CLONE_TARGET_MODE_REMOTE_BRANCH = 3; + + // LOCAL_BRANCH creates a local branch in the workspace + CLONE_TARGET_MODE_LOCAL_BRANCH = 4; + } + + message GitConfig { + // custom config values to be set on clone provided through `.gitpod.yml` + map custom_config = 1; + + // authentication method + AuthMethod authentication = 2; + + // auth_user is the username used to authenticate the clone + string auth_user = 3; + + // auth_password is the password used to authenticate the clone (can also be an API token) + string auth_password = 4; + + // auth_ots is a URL where one can download the authentication secret (:) + // using a GET request. + string auth_ots = 5; + } + + // AuthMethod is the means of authentication used during clone + enum AuthMethod { + // NO_AUTH disables authentication during clone + AUTH_METHOD_UNSPECIFIED = 0; + + // BASIC_AUTH uses HTTP basic auth during clone (fails if repo is not cloned through http) + AUTH_METHOD_BASIC_AUTH = 1; + + // BASIC_AUTH_OTS uses HTTP basic auth during the clone with the secrets coming from the OTS URL. + // Fails if either the OTS download or the clone fail. + AUTH_METHOD_BASIC_AUTH_OTS = 2; + } + + // remote_uri is the Git remote origin + string remote_uri = 1; + + // upstream_Remote_uri is the fork upstream of a repository + string upstream_remote_uri = 2; + + // the target mode determines what gets checked out + CloneTargetMode target_mode = 3; + + // the value for the clone target mode - use depends on the target mode + string clone_taget = 4; + + // a path relative to the workspace root in which the code will be checked out to + string checkout_location = 5; + + // config specifies the Git configuration for this workspace + GitConfig config = 6; +} + +message SnapshotInitializer { + // reference of the snapshot to restore + string snapshot_id = 1; +} + +message PrebuildInitializer { + // reference of the prebuild to restore + string prebuild_id = 1; +} + +// FileDownloadInitializer downloads files and uses them as workspace content. +message FileDownloadInitializer { + message FileInfo { + string url = 1; + // file_path is relative to the target_location, e.g. if target_location is in `/workspace/myrepo` + // a file_path of `foobar/file` would produce a file in `/workspace/myrepo/foobar/file`. + // file_path must include the filename. The FileDownloadInitializer will create any parent directories + // necessary to place the file. + string file_path = 2; + // digest is a hash of the file content in the OCI digest format (see https://github.com/opencontainers/image-spec/blob/master/descriptor.md#digests). + // This information is used to compute subsequent + // content versions, and to validate the file content was downloaded correctly. + string digest = 3; + } + repeated FileInfo files = 1; + string target_location = 2; +} + +// GitStatus describes the current Git working copy status, akin to a combination of "git status" and "git branch" +message GitStatus { + // branch is branch we're currently on + string branch = 1; + + // latest_commit is the most recent commit on the current branch + string latest_commit = 2; + + // uncommited_files is the number of uncommitted files, possibly truncated + repeated string uncommited_files = 3; + + // the total number of uncommited files + int64 total_uncommited_files = 6; + + // untracked_files is the number of untracked files in the workspace, possibly truncated + repeated string untracked_files = 4; + + // the total number of untracked files + int64 total_untracked_files = 7; + + // unpushed_commits is the number of unpushed changes in the workspace, possibly truncated + repeated string unpushed_commits = 5; + + // the total number of unpushed changes + int64 total_unpushed_commits = 8; +} + +message UpdateWorkspaceRequest { + message UpdateWorkspaceMetadata { + // name is the name of the workspace as specified by the user + optional string name = 1; + + // pinned indicates whether the workspace is pinned + optional bool pinned = 2; + } + message UpdateTimeout { + // inacitivity is the maximum time of inactivity before the workspace is stopped or paused + optional google.protobuf.Duration inactivity = 1; + // inacitivity is the maximum time of disconnection before the workspace is stopped or paused + optional google.protobuf.Duration disconnected = 2; + } + message UpdateWorkspaceSpec { + // Note(cw): Ports cannot be updated here in favour of UpdateWorkspacePorts call which exists so that + // we can update individual ports. + + // timeout configures the workspace timeout + optional UpdateTimeout timeout = 1; + + // admission controlls who can access the workspace and its ports. + optional AdmissionLevel admission = 2; + + // Note(cw): repeated fields have implicit presence. There's a difference between passing an empty list or nothing. + repeated string ssh_public_keys = 3; + } + + // workspace_id specifies the workspace to update + // + // +required + string workspace_id = 1; + + // metadata is data associated with this workspace that's required for other parts of Gitpod to function + optional UpdateWorkspaceMetadata metadata = 2; + + // spec is the configuration of the workspace that's required for the ws-manager to start the workspace + optional UpdateWorkspaceSpec spec = 3; + + // git_status updates the git status of the workspace - this is only here during the migration + optional WorkspaceGitStatus git_status = 4 [deprecated = true]; +} + +message UpdateWorkspaceResponse { + Workspace workspace = 1; +} + +message ParseContextURLRequest { + // context_url is the URL to parse + string context_url = 1; + + // configuration_id is the ID of the configuration to use + string configuration_id = 2; +} + +message ParseContextURLResponse { + WorkspaceMetadata metadata = 1; + WorkspaceSpec spec = 2; } diff --git a/components/public-api/go/v1/envvar.pb.go b/components/public-api/go/v1/envvar.pb.go index cff79325cdbf0f..42fe4476dd0474 100644 --- a/components/public-api/go/v1/envvar.pb.go +++ b/components/public-api/go/v1/envvar.pb.go @@ -1121,7 +1121,7 @@ type ResolveWorkspaceEnvironmentVariablesResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentVariables []*ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable `protobuf:"bytes,1,rep,name=environment_variables,json=environmentVariables,proto3" json:"environment_variables,omitempty"` + EnvironmentVariables []*EnvironmentVariable `protobuf:"bytes,1,rep,name=environment_variables,json=environmentVariables,proto3" json:"environment_variables,omitempty"` } func (x *ResolveWorkspaceEnvironmentVariablesResponse) Reset() { @@ -1156,14 +1156,14 @@ func (*ResolveWorkspaceEnvironmentVariablesResponse) Descriptor() ([]byte, []int return file_gitpod_v1_envvar_proto_rawDescGZIP(), []int{19} } -func (x *ResolveWorkspaceEnvironmentVariablesResponse) GetEnvironmentVariables() []*ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable { +func (x *ResolveWorkspaceEnvironmentVariablesResponse) GetEnvironmentVariables() []*EnvironmentVariable { if x != nil { return x.EnvironmentVariables } return nil } -type ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable struct { +type EnvironmentVariable struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1172,8 +1172,8 @@ type ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable struct { Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } -func (x *ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable) Reset() { - *x = ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable{} +func (x *EnvironmentVariable) Reset() { + *x = EnvironmentVariable{} if protoimpl.UnsafeEnabled { mi := &file_gitpod_v1_envvar_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1181,13 +1181,13 @@ func (x *ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable) Reset } } -func (x *ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable) String() string { +func (x *EnvironmentVariable) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable) ProtoMessage() {} +func (*EnvironmentVariable) ProtoMessage() {} -func (x *ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable) ProtoReflect() protoreflect.Message { +func (x *EnvironmentVariable) ProtoReflect() protoreflect.Message { mi := &file_gitpod_v1_envvar_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1199,19 +1199,19 @@ func (x *ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable) Proto return mi.MessageOf(x) } -// Deprecated: Use ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable.ProtoReflect.Descriptor instead. -func (*ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable) Descriptor() ([]byte, []int) { - return file_gitpod_v1_envvar_proto_rawDescGZIP(), []int{19, 0} +// Deprecated: Use EnvironmentVariable.ProtoReflect.Descriptor instead. +func (*EnvironmentVariable) Descriptor() ([]byte, []int) { + return file_gitpod_v1_envvar_proto_rawDescGZIP(), []int{20} } -func (x *ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable) GetName() string { +func (x *EnvironmentVariable) GetName() string { if x != nil { return x.Name } return "" } -func (x *ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable) GetValue() string { +func (x *EnvironmentVariable) GetValue() string { if x != nil { return x.Value } @@ -1399,123 +1399,120 @@ var file_gitpod_v1_envvar_proto_rawDesc = []byte{ 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0xf2, 0x01, 0x0a, 0x2c, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0x83, 0x01, 0x0a, 0x2c, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 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, 0xaa, 0x01, 0x0a, 0x1c, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x3f, 0x0a, 0x13, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x2a, - 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x41, 0x52, 0x49, - 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2b, 0x0a, 0x27, - 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x41, 0x52, 0x49, - 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, - 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x01, 0x12, 0x2d, 0x0a, 0x29, 0x45, 0x4e, 0x56, - 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x42, 0x4c, - 0x45, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x52, - 0x59, 0x57, 0x48, 0x45, 0x52, 0x45, 0x10, 0x02, 0x32, 0xd6, 0x0a, 0x0a, 0x1a, 0x45, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, + 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, 0xaa, 0x01, + 0x0a, 0x1c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, + 0x0a, 0x2a, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x41, + 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2b, + 0x0a, 0x27, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x41, + 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, + 0x5f, 0x50, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x01, 0x12, 0x2d, 0x0a, 0x29, 0x45, + 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, + 0x42, 0x4c, 0x45, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, + 0x45, 0x52, 0x59, 0x57, 0x48, 0x45, 0x52, 0x45, 0x10, 0x02, 0x32, 0xd6, 0x0a, 0x0a, 0x1a, 0x45, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x1c, 0x4c, 0x69, + 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x45, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x45, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, + 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, + 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, + 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x1d, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x1d, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2f, 0x2e, - 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x1d, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2f, 0x2e, 0x67, 0x69, - 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, - 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, - 0x73, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x9c, 0x01, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x37, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x22, 0x00, 0x12, 0x9c, 0x01, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x9f, 0x01, 0x0a, 0x26, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x38, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x37, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x9f, 0x01, 0x0a, 0x26, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x9f, 0x01, 0x0a, 0x26, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x38, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x9f, 0x01, 0x0a, 0x26, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, + 0x65, 0x22, 0x00, 0x12, 0x9f, 0x01, 0x0a, 0x26, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x38, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x99, 0x01, 0x0a, 0x24, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, - 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x36, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x42, 0x39, 0x5a, 0x37, 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, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x9f, 0x01, 0x0a, 0x26, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x12, 0x38, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x99, 0x01, 0x0a, 0x24, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x12, 0x36, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x42, 0x39, 0x5a, 0x37, 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, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1533,30 +1530,30 @@ func file_gitpod_v1_envvar_proto_rawDescGZIP() []byte { var file_gitpod_v1_envvar_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_gitpod_v1_envvar_proto_msgTypes = make([]protoimpl.MessageInfo, 21) var file_gitpod_v1_envvar_proto_goTypes = []interface{}{ - (EnvironmentVariableAdmission)(0), // 0: gitpod.v1.EnvironmentVariableAdmission - (*UserEnvironmentVariable)(nil), // 1: gitpod.v1.UserEnvironmentVariable - (*ListUserEnvironmentVariablesRequest)(nil), // 2: gitpod.v1.ListUserEnvironmentVariablesRequest - (*ListUserEnvironmentVariablesResponse)(nil), // 3: gitpod.v1.ListUserEnvironmentVariablesResponse - (*UpdateUserEnvironmentVariableRequest)(nil), // 4: gitpod.v1.UpdateUserEnvironmentVariableRequest - (*UpdateUserEnvironmentVariableResponse)(nil), // 5: gitpod.v1.UpdateUserEnvironmentVariableResponse - (*CreateUserEnvironmentVariableRequest)(nil), // 6: gitpod.v1.CreateUserEnvironmentVariableRequest - (*CreateUserEnvironmentVariableResponse)(nil), // 7: gitpod.v1.CreateUserEnvironmentVariableResponse - (*DeleteUserEnvironmentVariableRequest)(nil), // 8: gitpod.v1.DeleteUserEnvironmentVariableRequest - (*DeleteUserEnvironmentVariableResponse)(nil), // 9: gitpod.v1.DeleteUserEnvironmentVariableResponse - (*ConfigurationEnvironmentVariable)(nil), // 10: gitpod.v1.ConfigurationEnvironmentVariable - (*ListConfigurationEnvironmentVariablesRequest)(nil), // 11: gitpod.v1.ListConfigurationEnvironmentVariablesRequest - (*ListConfigurationEnvironmentVariablesResponse)(nil), // 12: gitpod.v1.ListConfigurationEnvironmentVariablesResponse - (*UpdateConfigurationEnvironmentVariableRequest)(nil), // 13: gitpod.v1.UpdateConfigurationEnvironmentVariableRequest - (*UpdateConfigurationEnvironmentVariableResponse)(nil), // 14: gitpod.v1.UpdateConfigurationEnvironmentVariableResponse - (*CreateConfigurationEnvironmentVariableRequest)(nil), // 15: gitpod.v1.CreateConfigurationEnvironmentVariableRequest - (*CreateConfigurationEnvironmentVariableResponse)(nil), // 16: gitpod.v1.CreateConfigurationEnvironmentVariableResponse - (*DeleteConfigurationEnvironmentVariableRequest)(nil), // 17: gitpod.v1.DeleteConfigurationEnvironmentVariableRequest - (*DeleteConfigurationEnvironmentVariableResponse)(nil), // 18: gitpod.v1.DeleteConfigurationEnvironmentVariableResponse - (*ResolveWorkspaceEnvironmentVariablesRequest)(nil), // 19: gitpod.v1.ResolveWorkspaceEnvironmentVariablesRequest - (*ResolveWorkspaceEnvironmentVariablesResponse)(nil), // 20: gitpod.v1.ResolveWorkspaceEnvironmentVariablesResponse - (*ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable)(nil), // 21: gitpod.v1.ResolveWorkspaceEnvironmentVariablesResponse.EnvironmentVariable - (*PaginationRequest)(nil), // 22: gitpod.v1.PaginationRequest - (*PaginationResponse)(nil), // 23: gitpod.v1.PaginationResponse + (EnvironmentVariableAdmission)(0), // 0: gitpod.v1.EnvironmentVariableAdmission + (*UserEnvironmentVariable)(nil), // 1: gitpod.v1.UserEnvironmentVariable + (*ListUserEnvironmentVariablesRequest)(nil), // 2: gitpod.v1.ListUserEnvironmentVariablesRequest + (*ListUserEnvironmentVariablesResponse)(nil), // 3: gitpod.v1.ListUserEnvironmentVariablesResponse + (*UpdateUserEnvironmentVariableRequest)(nil), // 4: gitpod.v1.UpdateUserEnvironmentVariableRequest + (*UpdateUserEnvironmentVariableResponse)(nil), // 5: gitpod.v1.UpdateUserEnvironmentVariableResponse + (*CreateUserEnvironmentVariableRequest)(nil), // 6: gitpod.v1.CreateUserEnvironmentVariableRequest + (*CreateUserEnvironmentVariableResponse)(nil), // 7: gitpod.v1.CreateUserEnvironmentVariableResponse + (*DeleteUserEnvironmentVariableRequest)(nil), // 8: gitpod.v1.DeleteUserEnvironmentVariableRequest + (*DeleteUserEnvironmentVariableResponse)(nil), // 9: gitpod.v1.DeleteUserEnvironmentVariableResponse + (*ConfigurationEnvironmentVariable)(nil), // 10: gitpod.v1.ConfigurationEnvironmentVariable + (*ListConfigurationEnvironmentVariablesRequest)(nil), // 11: gitpod.v1.ListConfigurationEnvironmentVariablesRequest + (*ListConfigurationEnvironmentVariablesResponse)(nil), // 12: gitpod.v1.ListConfigurationEnvironmentVariablesResponse + (*UpdateConfigurationEnvironmentVariableRequest)(nil), // 13: gitpod.v1.UpdateConfigurationEnvironmentVariableRequest + (*UpdateConfigurationEnvironmentVariableResponse)(nil), // 14: gitpod.v1.UpdateConfigurationEnvironmentVariableResponse + (*CreateConfigurationEnvironmentVariableRequest)(nil), // 15: gitpod.v1.CreateConfigurationEnvironmentVariableRequest + (*CreateConfigurationEnvironmentVariableResponse)(nil), // 16: gitpod.v1.CreateConfigurationEnvironmentVariableResponse + (*DeleteConfigurationEnvironmentVariableRequest)(nil), // 17: gitpod.v1.DeleteConfigurationEnvironmentVariableRequest + (*DeleteConfigurationEnvironmentVariableResponse)(nil), // 18: gitpod.v1.DeleteConfigurationEnvironmentVariableResponse + (*ResolveWorkspaceEnvironmentVariablesRequest)(nil), // 19: gitpod.v1.ResolveWorkspaceEnvironmentVariablesRequest + (*ResolveWorkspaceEnvironmentVariablesResponse)(nil), // 20: gitpod.v1.ResolveWorkspaceEnvironmentVariablesResponse + (*EnvironmentVariable)(nil), // 21: gitpod.v1.EnvironmentVariable + (*PaginationRequest)(nil), // 22: gitpod.v1.PaginationRequest + (*PaginationResponse)(nil), // 23: gitpod.v1.PaginationResponse } var file_gitpod_v1_envvar_proto_depIdxs = []int32{ 22, // 0: gitpod.v1.ListUserEnvironmentVariablesRequest.pagination:type_name -> gitpod.v1.PaginationRequest @@ -1572,7 +1569,7 @@ var file_gitpod_v1_envvar_proto_depIdxs = []int32{ 10, // 10: gitpod.v1.UpdateConfigurationEnvironmentVariableResponse.environment_variable:type_name -> gitpod.v1.ConfigurationEnvironmentVariable 0, // 11: gitpod.v1.CreateConfigurationEnvironmentVariableRequest.admission:type_name -> gitpod.v1.EnvironmentVariableAdmission 10, // 12: gitpod.v1.CreateConfigurationEnvironmentVariableResponse.environment_variable:type_name -> gitpod.v1.ConfigurationEnvironmentVariable - 21, // 13: gitpod.v1.ResolveWorkspaceEnvironmentVariablesResponse.environment_variables:type_name -> gitpod.v1.ResolveWorkspaceEnvironmentVariablesResponse.EnvironmentVariable + 21, // 13: gitpod.v1.ResolveWorkspaceEnvironmentVariablesResponse.environment_variables:type_name -> gitpod.v1.EnvironmentVariable 2, // 14: gitpod.v1.EnvironmentVariableService.ListUserEnvironmentVariables:input_type -> gitpod.v1.ListUserEnvironmentVariablesRequest 4, // 15: gitpod.v1.EnvironmentVariableService.UpdateUserEnvironmentVariable:input_type -> gitpod.v1.UpdateUserEnvironmentVariableRequest 6, // 16: gitpod.v1.EnvironmentVariableService.CreateUserEnvironmentVariable:input_type -> gitpod.v1.CreateUserEnvironmentVariableRequest @@ -1846,7 +1843,7 @@ func file_gitpod_v1_envvar_proto_init() { } } file_gitpod_v1_envvar_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable); i { + switch v := v.(*EnvironmentVariable); i { case 0: return &v.state case 1: diff --git a/components/public-api/go/v1/v1connect/workspace.connect.go b/components/public-api/go/v1/v1connect/workspace.connect.go index 6d8cb6d89c2996..b49bbd5e5586ad 100644 --- a/components/public-api/go/v1/v1connect/workspace.connect.go +++ b/components/public-api/go/v1/v1connect/workspace.connect.go @@ -47,6 +47,11 @@ type WorkspaceServiceClient interface { // StartWorkspace starts an existing workspace. // If the specified workspace is not in stopped phase, this will return the workspace as is. StartWorkspace(context.Context, *connect_go.Request[v1.StartWorkspaceRequest]) (*connect_go.Response[v1.StartWorkspaceResponse], error) + // UpdateWorkspace updates the workspace. + UpdateWorkspace(context.Context, *connect_go.Request[v1.UpdateWorkspaceRequest]) (*connect_go.Response[v1.UpdateWorkspaceResponse], error) + // ParseContextURL parses a context URL and returns the workspace metadata and spec. + // Not implemented yet. + ParseContextURL(context.Context, *connect_go.Request[v1.ParseContextURLRequest]) (*connect_go.Response[v1.ParseContextURLResponse], error) // GetWorkspaceDefaultImage returns the default workspace image of specified // workspace. GetWorkspaceDefaultImage(context.Context, *connect_go.Request[v1.GetWorkspaceDefaultImageRequest]) (*connect_go.Response[v1.GetWorkspaceDefaultImageResponse], error) @@ -94,6 +99,16 @@ func NewWorkspaceServiceClient(httpClient connect_go.HTTPClient, baseURL string, baseURL+"/gitpod.v1.WorkspaceService/StartWorkspace", opts..., ), + updateWorkspace: connect_go.NewClient[v1.UpdateWorkspaceRequest, v1.UpdateWorkspaceResponse]( + httpClient, + baseURL+"/gitpod.v1.WorkspaceService/UpdateWorkspace", + opts..., + ), + parseContextURL: connect_go.NewClient[v1.ParseContextURLRequest, v1.ParseContextURLResponse]( + httpClient, + baseURL+"/gitpod.v1.WorkspaceService/ParseContextURL", + opts..., + ), getWorkspaceDefaultImage: connect_go.NewClient[v1.GetWorkspaceDefaultImageRequest, v1.GetWorkspaceDefaultImageResponse]( httpClient, baseURL+"/gitpod.v1.WorkspaceService/GetWorkspaceDefaultImage", @@ -124,6 +139,8 @@ type workspaceServiceClient struct { listWorkspaces *connect_go.Client[v1.ListWorkspacesRequest, v1.ListWorkspacesResponse] createAndStartWorkspace *connect_go.Client[v1.CreateAndStartWorkspaceRequest, v1.CreateAndStartWorkspaceResponse] startWorkspace *connect_go.Client[v1.StartWorkspaceRequest, v1.StartWorkspaceResponse] + updateWorkspace *connect_go.Client[v1.UpdateWorkspaceRequest, v1.UpdateWorkspaceResponse] + parseContextURL *connect_go.Client[v1.ParseContextURLRequest, v1.ParseContextURLResponse] getWorkspaceDefaultImage *connect_go.Client[v1.GetWorkspaceDefaultImageRequest, v1.GetWorkspaceDefaultImageResponse] sendHeartBeat *connect_go.Client[v1.SendHeartBeatRequest, v1.SendHeartBeatResponse] getWorkspaceOwnerToken *connect_go.Client[v1.GetWorkspaceOwnerTokenRequest, v1.GetWorkspaceOwnerTokenResponse] @@ -155,6 +172,16 @@ func (c *workspaceServiceClient) StartWorkspace(ctx context.Context, req *connec return c.startWorkspace.CallUnary(ctx, req) } +// UpdateWorkspace calls gitpod.v1.WorkspaceService.UpdateWorkspace. +func (c *workspaceServiceClient) UpdateWorkspace(ctx context.Context, req *connect_go.Request[v1.UpdateWorkspaceRequest]) (*connect_go.Response[v1.UpdateWorkspaceResponse], error) { + return c.updateWorkspace.CallUnary(ctx, req) +} + +// ParseContextURL calls gitpod.v1.WorkspaceService.ParseContextURL. +func (c *workspaceServiceClient) ParseContextURL(ctx context.Context, req *connect_go.Request[v1.ParseContextURLRequest]) (*connect_go.Response[v1.ParseContextURLResponse], error) { + return c.parseContextURL.CallUnary(ctx, req) +} + // GetWorkspaceDefaultImage calls gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage. func (c *workspaceServiceClient) GetWorkspaceDefaultImage(ctx context.Context, req *connect_go.Request[v1.GetWorkspaceDefaultImageRequest]) (*connect_go.Response[v1.GetWorkspaceDefaultImageResponse], error) { return c.getWorkspaceDefaultImage.CallUnary(ctx, req) @@ -193,6 +220,11 @@ type WorkspaceServiceHandler interface { // StartWorkspace starts an existing workspace. // If the specified workspace is not in stopped phase, this will return the workspace as is. StartWorkspace(context.Context, *connect_go.Request[v1.StartWorkspaceRequest]) (*connect_go.Response[v1.StartWorkspaceResponse], error) + // UpdateWorkspace updates the workspace. + UpdateWorkspace(context.Context, *connect_go.Request[v1.UpdateWorkspaceRequest]) (*connect_go.Response[v1.UpdateWorkspaceResponse], error) + // ParseContextURL parses a context URL and returns the workspace metadata and spec. + // Not implemented yet. + ParseContextURL(context.Context, *connect_go.Request[v1.ParseContextURLRequest]) (*connect_go.Response[v1.ParseContextURLResponse], error) // GetWorkspaceDefaultImage returns the default workspace image of specified // workspace. GetWorkspaceDefaultImage(context.Context, *connect_go.Request[v1.GetWorkspaceDefaultImageRequest]) (*connect_go.Response[v1.GetWorkspaceDefaultImageResponse], error) @@ -237,6 +269,16 @@ func NewWorkspaceServiceHandler(svc WorkspaceServiceHandler, opts ...connect_go. svc.StartWorkspace, opts..., )) + mux.Handle("/gitpod.v1.WorkspaceService/UpdateWorkspace", connect_go.NewUnaryHandler( + "/gitpod.v1.WorkspaceService/UpdateWorkspace", + svc.UpdateWorkspace, + opts..., + )) + mux.Handle("/gitpod.v1.WorkspaceService/ParseContextURL", connect_go.NewUnaryHandler( + "/gitpod.v1.WorkspaceService/ParseContextURL", + svc.ParseContextURL, + opts..., + )) mux.Handle("/gitpod.v1.WorkspaceService/GetWorkspaceDefaultImage", connect_go.NewUnaryHandler( "/gitpod.v1.WorkspaceService/GetWorkspaceDefaultImage", svc.GetWorkspaceDefaultImage, @@ -283,6 +325,14 @@ func (UnimplementedWorkspaceServiceHandler) StartWorkspace(context.Context, *con return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("gitpod.v1.WorkspaceService.StartWorkspace is not implemented")) } +func (UnimplementedWorkspaceServiceHandler) UpdateWorkspace(context.Context, *connect_go.Request[v1.UpdateWorkspaceRequest]) (*connect_go.Response[v1.UpdateWorkspaceResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("gitpod.v1.WorkspaceService.UpdateWorkspace is not implemented")) +} + +func (UnimplementedWorkspaceServiceHandler) ParseContextURL(context.Context, *connect_go.Request[v1.ParseContextURLRequest]) (*connect_go.Response[v1.ParseContextURLResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("gitpod.v1.WorkspaceService.ParseContextURL is not implemented")) +} + func (UnimplementedWorkspaceServiceHandler) GetWorkspaceDefaultImage(context.Context, *connect_go.Request[v1.GetWorkspaceDefaultImageRequest]) (*connect_go.Response[v1.GetWorkspaceDefaultImageResponse], error) { return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage is not implemented")) } diff --git a/components/public-api/go/v1/v1connect/workspace.proxy.connect.go b/components/public-api/go/v1/v1connect/workspace.proxy.connect.go index 4fb5753a2737d5..eb29bf1072716b 100644 --- a/components/public-api/go/v1/v1connect/workspace.proxy.connect.go +++ b/components/public-api/go/v1/v1connect/workspace.proxy.connect.go @@ -59,6 +59,26 @@ func (s *ProxyWorkspaceServiceHandler) StartWorkspace(ctx context.Context, req * return connect_go.NewResponse(resp), nil } +func (s *ProxyWorkspaceServiceHandler) UpdateWorkspace(ctx context.Context, req *connect_go.Request[v1.UpdateWorkspaceRequest]) (*connect_go.Response[v1.UpdateWorkspaceResponse], error) { + resp, err := s.Client.UpdateWorkspace(ctx, req.Msg) + if err != nil { + // TODO(milan): Convert to correct status code + return nil, err + } + + return connect_go.NewResponse(resp), nil +} + +func (s *ProxyWorkspaceServiceHandler) ParseContextURL(ctx context.Context, req *connect_go.Request[v1.ParseContextURLRequest]) (*connect_go.Response[v1.ParseContextURLResponse], error) { + resp, err := s.Client.ParseContextURL(ctx, req.Msg) + if err != nil { + // TODO(milan): Convert to correct status code + return nil, err + } + + return connect_go.NewResponse(resp), nil +} + func (s *ProxyWorkspaceServiceHandler) GetWorkspaceDefaultImage(ctx context.Context, req *connect_go.Request[v1.GetWorkspaceDefaultImageRequest]) (*connect_go.Response[v1.GetWorkspaceDefaultImageResponse], error) { resp, err := s.Client.GetWorkspaceDefaultImage(ctx, req.Msg) if err != nil { diff --git a/components/public-api/go/v1/workspace.pb.go b/components/public-api/go/v1/workspace.pb.go index 28d9a832231cb8..96f88233b5c0bb 100644 --- a/components/public-api/go/v1/workspace.pb.go +++ b/components/public-api/go/v1/workspace.pb.go @@ -13,6 +13,7 @@ package v1 import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" @@ -128,59 +129,111 @@ func (GetWorkspaceDefaultImageResponse_Source) EnumDescriptor() ([]byte, []int) return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{11, 0} } -// Policy defines the accssbility policy of a workspace port is guarded by an -// authentication in the proxy -type WorkspacePort_Policy int32 +// WorkspaceType specifies the purpose/use of a workspace. Different workspace types are handled differently by all parts of the system. +type WorkspaceSpec_WorkspaceType int32 const ( - WorkspacePort_POLICY_UNSPECIFIED WorkspacePort_Policy = 0 - // Private means the port is accessible by the workspace owner only using - // the workspace port URL - WorkspacePort_POLICY_PRIVATE WorkspacePort_Policy = 1 - // Public means the port is accessible by everybody using the workspace port - // URL - WorkspacePort_POLICY_PUBLIC WorkspacePort_Policy = 2 + WorkspaceSpec_WORKSPACE_TYPE_UNSPECIFIED WorkspaceSpec_WorkspaceType = 0 + // Regular workspaces are your off-the-mill workspaces intended for users. They are directly user-facing and hence are most important. + WorkspaceSpec_WORKSPACE_TYPE_REGULAR WorkspaceSpec_WorkspaceType = 1 + // Prebuild workspaces are workspaces used to pre-build the content of other workspaces. They run headless and have no direct user-interaction. + WorkspaceSpec_WORKSPACE_TYPE_PREBUILD WorkspaceSpec_WorkspaceType = 2 ) -// Enum value maps for WorkspacePort_Policy. +// Enum value maps for WorkspaceSpec_WorkspaceType. var ( - WorkspacePort_Policy_name = map[int32]string{ - 0: "POLICY_UNSPECIFIED", - 1: "POLICY_PRIVATE", - 2: "POLICY_PUBLIC", + WorkspaceSpec_WorkspaceType_name = map[int32]string{ + 0: "WORKSPACE_TYPE_UNSPECIFIED", + 1: "WORKSPACE_TYPE_REGULAR", + 2: "WORKSPACE_TYPE_PREBUILD", } - WorkspacePort_Policy_value = map[string]int32{ - "POLICY_UNSPECIFIED": 0, - "POLICY_PRIVATE": 1, - "POLICY_PUBLIC": 2, + WorkspaceSpec_WorkspaceType_value = map[string]int32{ + "WORKSPACE_TYPE_UNSPECIFIED": 0, + "WORKSPACE_TYPE_REGULAR": 1, + "WORKSPACE_TYPE_PREBUILD": 2, } ) -func (x WorkspacePort_Policy) Enum() *WorkspacePort_Policy { - p := new(WorkspacePort_Policy) +func (x WorkspaceSpec_WorkspaceType) Enum() *WorkspaceSpec_WorkspaceType { + p := new(WorkspaceSpec_WorkspaceType) *p = x return p } -func (x WorkspacePort_Policy) String() string { +func (x WorkspaceSpec_WorkspaceType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (WorkspacePort_Policy) Descriptor() protoreflect.EnumDescriptor { +func (WorkspaceSpec_WorkspaceType) Descriptor() protoreflect.EnumDescriptor { return file_gitpod_v1_workspace_proto_enumTypes[2].Descriptor() } -func (WorkspacePort_Policy) Type() protoreflect.EnumType { +func (WorkspaceSpec_WorkspaceType) Type() protoreflect.EnumType { return &file_gitpod_v1_workspace_proto_enumTypes[2] } -func (x WorkspacePort_Policy) Number() protoreflect.EnumNumber { +func (x WorkspaceSpec_WorkspaceType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -// Deprecated: Use WorkspacePort_Policy.Descriptor instead. -func (WorkspacePort_Policy) EnumDescriptor() ([]byte, []int) { - return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{21, 0} +// Deprecated: Use WorkspaceSpec_WorkspaceType.Descriptor instead. +func (WorkspaceSpec_WorkspaceType) EnumDescriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{20, 0} +} + +type WorkspaceStatus_WorkspaceConditions_FailedReason int32 + +const ( + WorkspaceStatus_WorkspaceConditions_FAILED_REASON_UNSPECIFIED WorkspaceStatus_WorkspaceConditions_FailedReason = 0 + WorkspaceStatus_WorkspaceConditions_FAILED_REASON_CONTENT_INITIALIZATION_FAILED WorkspaceStatus_WorkspaceConditions_FailedReason = 1 + WorkspaceStatus_WorkspaceConditions_FAILED_REASON_BACKUP_FAILED WorkspaceStatus_WorkspaceConditions_FailedReason = 2 + WorkspaceStatus_WorkspaceConditions_FAILED_REASON_IMAGE_PULL_FAILURE WorkspaceStatus_WorkspaceConditions_FailedReason = 3 + WorkspaceStatus_WorkspaceConditions_FAILED_REASON_UNEXPECTED_TERMINATION WorkspaceStatus_WorkspaceConditions_FailedReason = 4 +) + +// Enum value maps for WorkspaceStatus_WorkspaceConditions_FailedReason. +var ( + WorkspaceStatus_WorkspaceConditions_FailedReason_name = map[int32]string{ + 0: "FAILED_REASON_UNSPECIFIED", + 1: "FAILED_REASON_CONTENT_INITIALIZATION_FAILED", + 2: "FAILED_REASON_BACKUP_FAILED", + 3: "FAILED_REASON_IMAGE_PULL_FAILURE", + 4: "FAILED_REASON_UNEXPECTED_TERMINATION", + } + WorkspaceStatus_WorkspaceConditions_FailedReason_value = map[string]int32{ + "FAILED_REASON_UNSPECIFIED": 0, + "FAILED_REASON_CONTENT_INITIALIZATION_FAILED": 1, + "FAILED_REASON_BACKUP_FAILED": 2, + "FAILED_REASON_IMAGE_PULL_FAILURE": 3, + "FAILED_REASON_UNEXPECTED_TERMINATION": 4, + } +) + +func (x WorkspaceStatus_WorkspaceConditions_FailedReason) Enum() *WorkspaceStatus_WorkspaceConditions_FailedReason { + p := new(WorkspaceStatus_WorkspaceConditions_FailedReason) + *p = x + return p +} + +func (x WorkspaceStatus_WorkspaceConditions_FailedReason) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (WorkspaceStatus_WorkspaceConditions_FailedReason) Descriptor() protoreflect.EnumDescriptor { + return file_gitpod_v1_workspace_proto_enumTypes[3].Descriptor() +} + +func (WorkspaceStatus_WorkspaceConditions_FailedReason) Type() protoreflect.EnumType { + return &file_gitpod_v1_workspace_proto_enumTypes[3] +} + +func (x WorkspaceStatus_WorkspaceConditions_FailedReason) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use WorkspaceStatus_WorkspaceConditions_FailedReason.Descriptor instead. +func (WorkspaceStatus_WorkspaceConditions_FailedReason) EnumDescriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{21, 0, 0} } // Protocol defines the backend protocol of port @@ -219,11 +272,11 @@ func (x WorkspacePort_Protocol) String() string { } func (WorkspacePort_Protocol) Descriptor() protoreflect.EnumDescriptor { - return file_gitpod_v1_workspace_proto_enumTypes[3].Descriptor() + return file_gitpod_v1_workspace_proto_enumTypes[4].Descriptor() } func (WorkspacePort_Protocol) Type() protoreflect.EnumType { - return &file_gitpod_v1_workspace_proto_enumTypes[3] + return &file_gitpod_v1_workspace_proto_enumTypes[4] } func (x WorkspacePort_Protocol) Number() protoreflect.EnumNumber { @@ -232,7 +285,7 @@ func (x WorkspacePort_Protocol) Number() protoreflect.EnumNumber { // Deprecated: Use WorkspacePort_Protocol.Descriptor instead. func (WorkspacePort_Protocol) EnumDescriptor() ([]byte, []int) { - return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{21, 1} + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{22, 0} } type WorkspacePhase_Phase int32 @@ -270,26 +323,30 @@ const ( // but is temporarily unavailable. When in this state, we expect it to // become running or stopping anytime soon. WorkspacePhase_PHASE_INTERRUPTED WorkspacePhase_Phase = 7 + // Paused means the workspace is currently unavailable, akin to stopped, + // but faster to wake up. + WorkspacePhase_PHASE_PAUSED WorkspacePhase_Phase = 8 // Stopping means that the workspace is currently shutting down. It could go // to stopped every moment. - WorkspacePhase_PHASE_STOPPING WorkspacePhase_Phase = 8 + WorkspacePhase_PHASE_STOPPING WorkspacePhase_Phase = 9 // Stopped means the workspace ended regularly because it was shut down. - WorkspacePhase_PHASE_STOPPED WorkspacePhase_Phase = 9 + WorkspacePhase_PHASE_STOPPED WorkspacePhase_Phase = 10 ) // Enum value maps for WorkspacePhase_Phase. var ( WorkspacePhase_Phase_name = map[int32]string{ - 0: "PHASE_UNSPECIFIED", - 1: "PHASE_PREPARING", - 2: "PHASE_IMAGEBUILD", - 3: "PHASE_PENDING", - 4: "PHASE_CREATING", - 5: "PHASE_INITIALIZING", - 6: "PHASE_RUNNING", - 7: "PHASE_INTERRUPTED", - 8: "PHASE_STOPPING", - 9: "PHASE_STOPPED", + 0: "PHASE_UNSPECIFIED", + 1: "PHASE_PREPARING", + 2: "PHASE_IMAGEBUILD", + 3: "PHASE_PENDING", + 4: "PHASE_CREATING", + 5: "PHASE_INITIALIZING", + 6: "PHASE_RUNNING", + 7: "PHASE_INTERRUPTED", + 8: "PHASE_PAUSED", + 9: "PHASE_STOPPING", + 10: "PHASE_STOPPED", } WorkspacePhase_Phase_value = map[string]int32{ "PHASE_UNSPECIFIED": 0, @@ -300,8 +357,9 @@ var ( "PHASE_INITIALIZING": 5, "PHASE_RUNNING": 6, "PHASE_INTERRUPTED": 7, - "PHASE_STOPPING": 8, - "PHASE_STOPPED": 9, + "PHASE_PAUSED": 8, + "PHASE_STOPPING": 9, + "PHASE_STOPPED": 10, } ) @@ -316,11 +374,11 @@ func (x WorkspacePhase_Phase) String() string { } func (WorkspacePhase_Phase) Descriptor() protoreflect.EnumDescriptor { - return file_gitpod_v1_workspace_proto_enumTypes[4].Descriptor() + return file_gitpod_v1_workspace_proto_enumTypes[5].Descriptor() } func (WorkspacePhase_Phase) Type() protoreflect.EnumType { - return &file_gitpod_v1_workspace_proto_enumTypes[4] + return &file_gitpod_v1_workspace_proto_enumTypes[5] } func (x WorkspacePhase_Phase) Number() protoreflect.EnumNumber { @@ -329,7 +387,121 @@ func (x WorkspacePhase_Phase) Number() protoreflect.EnumNumber { // Deprecated: Use WorkspacePhase_Phase.Descriptor instead. func (WorkspacePhase_Phase) EnumDescriptor() ([]byte, []int) { - return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{23, 0} + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{24, 0} +} + +// CloneTargetMode is the target state in which we want to leave a GitWorkspace +type GitInitializer_CloneTargetMode int32 + +const ( + GitInitializer_CLONE_TARGET_MODE_UNSPECIFIED GitInitializer_CloneTargetMode = 0 + // REMOTE_HEAD has the local WS point at the remote branch head + GitInitializer_CLONE_TARGET_MODE_REMOTE_HEAD GitInitializer_CloneTargetMode = 1 + // REMOTE_COMMIT has the local WS point at a specific commit + GitInitializer_CLONE_TARGET_MODE_REMOTE_COMMIT GitInitializer_CloneTargetMode = 2 + // REMOTE_BRANCH has the local WS point at a remote branch + GitInitializer_CLONE_TARGET_MODE_REMOTE_BRANCH GitInitializer_CloneTargetMode = 3 + // LOCAL_BRANCH creates a local branch in the workspace + GitInitializer_CLONE_TARGET_MODE_LOCAL_BRANCH GitInitializer_CloneTargetMode = 4 +) + +// Enum value maps for GitInitializer_CloneTargetMode. +var ( + GitInitializer_CloneTargetMode_name = map[int32]string{ + 0: "CLONE_TARGET_MODE_UNSPECIFIED", + 1: "CLONE_TARGET_MODE_REMOTE_HEAD", + 2: "CLONE_TARGET_MODE_REMOTE_COMMIT", + 3: "CLONE_TARGET_MODE_REMOTE_BRANCH", + 4: "CLONE_TARGET_MODE_LOCAL_BRANCH", + } + GitInitializer_CloneTargetMode_value = map[string]int32{ + "CLONE_TARGET_MODE_UNSPECIFIED": 0, + "CLONE_TARGET_MODE_REMOTE_HEAD": 1, + "CLONE_TARGET_MODE_REMOTE_COMMIT": 2, + "CLONE_TARGET_MODE_REMOTE_BRANCH": 3, + "CLONE_TARGET_MODE_LOCAL_BRANCH": 4, + } +) + +func (x GitInitializer_CloneTargetMode) Enum() *GitInitializer_CloneTargetMode { + p := new(GitInitializer_CloneTargetMode) + *p = x + return p +} + +func (x GitInitializer_CloneTargetMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GitInitializer_CloneTargetMode) Descriptor() protoreflect.EnumDescriptor { + return file_gitpod_v1_workspace_proto_enumTypes[6].Descriptor() +} + +func (GitInitializer_CloneTargetMode) Type() protoreflect.EnumType { + return &file_gitpod_v1_workspace_proto_enumTypes[6] +} + +func (x GitInitializer_CloneTargetMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GitInitializer_CloneTargetMode.Descriptor instead. +func (GitInitializer_CloneTargetMode) EnumDescriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{26, 0} +} + +// AuthMethod is the means of authentication used during clone +type GitInitializer_AuthMethod int32 + +const ( + // NO_AUTH disables authentication during clone + GitInitializer_AUTH_METHOD_UNSPECIFIED GitInitializer_AuthMethod = 0 + // BASIC_AUTH uses HTTP basic auth during clone (fails if repo is not cloned through http) + GitInitializer_AUTH_METHOD_BASIC_AUTH GitInitializer_AuthMethod = 1 + // BASIC_AUTH_OTS uses HTTP basic auth during the clone with the secrets coming from the OTS URL. + // Fails if either the OTS download or the clone fail. + GitInitializer_AUTH_METHOD_BASIC_AUTH_OTS GitInitializer_AuthMethod = 2 +) + +// Enum value maps for GitInitializer_AuthMethod. +var ( + GitInitializer_AuthMethod_name = map[int32]string{ + 0: "AUTH_METHOD_UNSPECIFIED", + 1: "AUTH_METHOD_BASIC_AUTH", + 2: "AUTH_METHOD_BASIC_AUTH_OTS", + } + GitInitializer_AuthMethod_value = map[string]int32{ + "AUTH_METHOD_UNSPECIFIED": 0, + "AUTH_METHOD_BASIC_AUTH": 1, + "AUTH_METHOD_BASIC_AUTH_OTS": 2, + } +) + +func (x GitInitializer_AuthMethod) Enum() *GitInitializer_AuthMethod { + p := new(GitInitializer_AuthMethod) + *p = x + return p +} + +func (x GitInitializer_AuthMethod) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GitInitializer_AuthMethod) Descriptor() protoreflect.EnumDescriptor { + return file_gitpod_v1_workspace_proto_enumTypes[7].Descriptor() +} + +func (GitInitializer_AuthMethod) Type() protoreflect.EnumType { + return &file_gitpod_v1_workspace_proto_enumTypes[7] +} + +func (x GitInitializer_AuthMethod) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GitInitializer_AuthMethod.Descriptor instead. +func (GitInitializer_AuthMethod) EnumDescriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{26, 1} } type GetWorkspaceRequest struct { @@ -618,10 +790,10 @@ type ListWorkspacesResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // workspaces are the workspaces that matched the query - Workspaces []*Workspace `protobuf:"bytes,1,rep,name=workspaces,proto3" json:"workspaces,omitempty"` // pagination contains the pagination options for listing workspaces - Pagination *PaginationResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + Pagination *PaginationResponse `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` + // workspaces are the workspaces that matched the query + Workspaces []*Workspace `protobuf:"bytes,2,rep,name=workspaces,proto3" json:"workspaces,omitempty"` } func (x *ListWorkspacesResponse) Reset() { @@ -656,54 +828,43 @@ func (*ListWorkspacesResponse) Descriptor() ([]byte, []int) { return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{5} } -func (x *ListWorkspacesResponse) GetWorkspaces() []*Workspace { +func (x *ListWorkspacesResponse) GetPagination() *PaginationResponse { if x != nil { - return x.Workspaces + return x.Pagination } return nil } -func (x *ListWorkspacesResponse) GetPagination() *PaginationResponse { +func (x *ListWorkspacesResponse) GetWorkspaces() []*Workspace { if x != nil { - return x.Pagination + return x.Workspaces } return nil } +// Required fields: +// - metadata.organization_id +// - metadata.configuration_id type CreateAndStartWorkspaceRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // organization_id is the ID of the organization to create the workspace - // - // +required - OrganizationId string `protobuf:"bytes,1,opt,name=organization_id,json=organizationId,proto3" json:"organization_id,omitempty"` - // configuration_id is the ID of the configuration to use - ConfigurationId string `protobuf:"bytes,2,opt,name=configuration_id,json=configurationId,proto3" json:"configuration_id,omitempty"` - // source describes the source refer of workspace. - // - // +required - // + // metadata is data associated with this workspace that's required for other parts of Gitpod to function + Metadata *WorkspaceMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` // Types that are assignable to Source: // - // *CreateAndStartWorkspaceRequest_Git_ // *CreateAndStartWorkspaceRequest_ContextUrl + // *CreateAndStartWorkspaceRequest_Spec Source isCreateAndStartWorkspaceRequest_Source `protobuf_oneof:"source"` - // additional_env_variables provide additional environment variables to the - // workspace. - // It will take precedence over environment variables provided by - // the user and the configuration - AdditionalEnvVariables []*WorkspaceEnvironmentVariable `protobuf:"bytes,5,rep,name=additional_env_variables,json=additionalEnvVariables,proto3" json:"additional_env_variables,omitempty"` - Region string `protobuf:"bytes,6,opt,name=region,proto3" json:"region,omitempty"` - WorkspaceClass string `protobuf:"bytes,7,opt,name=workspace_class,json=workspaceClass,proto3" json:"workspace_class,omitempty"` - Editor *EditorReference `protobuf:"bytes,8,opt,name=editor,proto3" json:"editor,omitempty"` - Name string `protobuf:"bytes,9,opt,name=name,proto3" json:"name,omitempty"` - Pinned bool `protobuf:"varint,10,opt,name=pinned,proto3" json:"pinned,omitempty"` + // editor specifies the editor that will be used with this workspace. + Editor *EditorReference `protobuf:"bytes,5,opt,name=editor,proto3" json:"editor,omitempty"` // force_default_config indicates that the workspace should be created with // the default configuration instead of the configuration provided in // `.gitpod.yml` file - ForceDefaultConfig bool `protobuf:"varint,11,opt,name=force_default_config,json=forceDefaultConfig,proto3" json:"force_default_config,omitempty"` + // + // Deprecated: Do not use. + ForceDefaultConfig bool `protobuf:"varint,7,opt,name=force_default_config,json=forceDefaultConfig,proto3" json:"force_default_config,omitempty"` } func (x *CreateAndStartWorkspaceRequest) Reset() { @@ -738,18 +899,11 @@ func (*CreateAndStartWorkspaceRequest) Descriptor() ([]byte, []int) { return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{6} } -func (x *CreateAndStartWorkspaceRequest) GetOrganizationId() string { +func (x *CreateAndStartWorkspaceRequest) GetMetadata() *WorkspaceMetadata { if x != nil { - return x.OrganizationId - } - return "" -} - -func (x *CreateAndStartWorkspaceRequest) GetConfigurationId() string { - if x != nil { - return x.ConfigurationId + return x.Metadata } - return "" + return nil } func (m *CreateAndStartWorkspaceRequest) GetSource() isCreateAndStartWorkspaceRequest_Source { @@ -759,40 +913,18 @@ func (m *CreateAndStartWorkspaceRequest) GetSource() isCreateAndStartWorkspaceRe return nil } -func (x *CreateAndStartWorkspaceRequest) GetGit() *CreateAndStartWorkspaceRequest_Git { - if x, ok := x.GetSource().(*CreateAndStartWorkspaceRequest_Git_); ok { - return x.Git - } - return nil -} - -// Deprecated: Do not use. -func (x *CreateAndStartWorkspaceRequest) GetContextUrl() string { +func (x *CreateAndStartWorkspaceRequest) GetContextUrl() *CreateAndStartWorkspaceRequest_ContextURL { if x, ok := x.GetSource().(*CreateAndStartWorkspaceRequest_ContextUrl); ok { return x.ContextUrl } - return "" -} - -func (x *CreateAndStartWorkspaceRequest) GetAdditionalEnvVariables() []*WorkspaceEnvironmentVariable { - if x != nil { - return x.AdditionalEnvVariables - } return nil } -func (x *CreateAndStartWorkspaceRequest) GetRegion() string { - if x != nil { - return x.Region - } - return "" -} - -func (x *CreateAndStartWorkspaceRequest) GetWorkspaceClass() string { - if x != nil { - return x.WorkspaceClass +func (x *CreateAndStartWorkspaceRequest) GetSpec() *WorkspaceSpec { + if x, ok := x.GetSource().(*CreateAndStartWorkspaceRequest_Spec); ok { + return x.Spec } - return "" + return nil } func (x *CreateAndStartWorkspaceRequest) GetEditor() *EditorReference { @@ -802,20 +934,7 @@ func (x *CreateAndStartWorkspaceRequest) GetEditor() *EditorReference { return nil } -func (x *CreateAndStartWorkspaceRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *CreateAndStartWorkspaceRequest) GetPinned() bool { - if x != nil { - return x.Pinned - } - return false -} - +// Deprecated: Do not use. func (x *CreateAndStartWorkspaceRequest) GetForceDefaultConfig() bool { if x != nil { return x.ForceDefaultConfig @@ -827,25 +946,20 @@ type isCreateAndStartWorkspaceRequest_Source interface { isCreateAndStartWorkspaceRequest_Source() } -type CreateAndStartWorkspaceRequest_Git_ struct { - // git describes the source refer of workspace - // Obtain available git using the ContextService.ParseContext operation if - // not sure about it. - Git *CreateAndStartWorkspaceRequest_Git `protobuf:"bytes,3,opt,name=git,proto3,oneof"` -} - type CreateAndStartWorkspaceRequest_ContextUrl struct { - // context_url is for backward compatiblity with the current dashboard, use - // ContextService.ParseContext get get a Git source instead - // - // Deprecated: Do not use. - ContextUrl string `protobuf:"bytes,4,opt,name=context_url,json=contextUrl,proto3,oneof"` + // context_url is the URL from which the workspace is created + ContextUrl *CreateAndStartWorkspaceRequest_ContextURL `protobuf:"bytes,3,opt,name=context_url,json=contextUrl,proto3,oneof"` } -func (*CreateAndStartWorkspaceRequest_Git_) isCreateAndStartWorkspaceRequest_Source() {} +type CreateAndStartWorkspaceRequest_Spec struct { + // spec is the configuration of the workspace that's required for the to start the workspace + Spec *WorkspaceSpec `protobuf:"bytes,4,opt,name=spec,proto3,oneof"` +} func (*CreateAndStartWorkspaceRequest_ContextUrl) isCreateAndStartWorkspaceRequest_Source() {} +func (*CreateAndStartWorkspaceRequest_Spec) isCreateAndStartWorkspaceRequest_Source() {} + type CreateAndStartWorkspaceResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -901,8 +1015,9 @@ type StartWorkspaceRequest struct { // workspace_id specifies the workspace that is going to start // // +required - WorkspaceId string `protobuf:"bytes,1,opt,name=workspace_id,json=workspaceId,proto3" json:"workspace_id,omitempty"` - ForceDefaultConfig bool `protobuf:"varint,2,opt,name=force_default_config,json=forceDefaultConfig,proto3" json:"force_default_config,omitempty"` + WorkspaceId string `protobuf:"bytes,1,opt,name=workspace_id,json=workspaceId,proto3" json:"workspace_id,omitempty"` + // Deprecated: Do not use. + ForceDefaultConfig bool `protobuf:"varint,2,opt,name=force_default_config,json=forceDefaultConfig,proto3" json:"force_default_config,omitempty"` } func (x *StartWorkspaceRequest) Reset() { @@ -944,6 +1059,7 @@ func (x *StartWorkspaceRequest) GetWorkspaceId() string { return "" } +// Deprecated: Do not use. func (x *StartWorkspaceRequest) GetForceDefaultConfig() bool { if x != nil { return x.ForceDefaultConfig @@ -1393,44 +1509,14 @@ type Workspace struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // ID is a unique identifier of this workspace. No other workspace with the same name must be managed by this workspace manager Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // prebuild indicates it is a prebuild - // TODO(ak) model prebuilds as a separate resource - Prebuild bool `protobuf:"varint,2,opt,name=prebuild,proto3" json:"prebuild,omitempty"` - OrganizationId string `protobuf:"bytes,3,opt,name=organization_id,json=organizationId,proto3" json:"organization_id,omitempty"` - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - Pinned bool `protobuf:"varint,5,opt,name=pinned,proto3" json:"pinned,omitempty"` - Status *WorkspaceStatus `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - // additional_environment_variables provide additional environment variables - // which take precedence over environment variables provided by the project - // and user. - // - // +optional - AdditionalEnvironmentVariables []*WorkspaceEnvironmentVariable `protobuf:"bytes,7,rep,name=additional_environment_variables,json=additionalEnvironmentVariables,proto3" json:"additional_environment_variables,omitempty"` - // region specifies the region in which the workspace will be created. - // Obtain available regions using the ListRegions operation. - // - // +optional defaults to the user's default region - Region string `protobuf:"bytes,8,opt,name=region,proto3" json:"region,omitempty"` - // workspace_class specifies the workspace class with which to create the - // workspace. Obtain available workspace classes using the ListWorkspaceClass - // operation. - // - // +optional defaults to the class configured on the project or the cluster's - // default class. - WorkspaceClass string `protobuf:"bytes,9,opt,name=workspace_class,json=workspaceClass,proto3" json:"workspace_class,omitempty"` - // editor specifies the editor that will be used with this workspace. - // Obtain available editors using the EditorService.ListEditors operation. - // - // +optional defaults to the default editor of the user - Editor *EditorReference `protobuf:"bytes,10,opt,name=editor,proto3" json:"editor,omitempty"` - // context_url is the normalized URL from which the workspace was created - // TODO(ak) replace with resolveContextURL API - ContextUrl string `protobuf:"bytes,11,opt,name=context_url,json=contextUrl,proto3" json:"context_url,omitempty"` - // Prebuild ID is the unique identifier of the prebuild - // from which this workspace was created - // +optional if empty then this workspace was not created from a prebuild - PrebuildId string `protobuf:"bytes,12,opt,name=prebuild_id,json=prebuildId,proto3" json:"prebuild_id,omitempty"` + // Metadata is data associated with this workspace that's required for other parts of Gitpod to function + Metadata *WorkspaceMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` + // Spec is the configuration of the workspace that's required for the ws-manager to start the workspace + Spec *WorkspaceSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` + // Status is the current status of the workspace + Status *WorkspaceStatus `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` } func (x *Workspace) Reset() { @@ -1472,129 +1558,184 @@ func (x *Workspace) GetId() string { return "" } -func (x *Workspace) GetPrebuild() bool { +func (x *Workspace) GetMetadata() *WorkspaceMetadata { if x != nil { - return x.Prebuild + return x.Metadata } - return false + return nil } -func (x *Workspace) GetOrganizationId() string { +func (x *Workspace) GetSpec() *WorkspaceSpec { if x != nil { - return x.OrganizationId + return x.Spec } - return "" + return nil } -func (x *Workspace) GetName() string { +func (x *Workspace) GetStatus() *WorkspaceStatus { if x != nil { - return x.Name + return x.Status } - return "" + return nil } -func (x *Workspace) GetPinned() bool { - if x != nil { - return x.Pinned +// WorkspaceMetadata is data associated with a workspace that's required for other parts of the system to function +type WorkspaceMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // organization_id is the ID of the organization that contains the workspace + OwnerId string `protobuf:"bytes,1,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` + // owner is the ID of the Gitpod user to whom we'll bill this workspace and who we consider responsible for its content + OrganizationId string `protobuf:"bytes,2,opt,name=organization_id,json=organizationId,proto3" json:"organization_id,omitempty"` + // configuration_id is the ID of the configuration used by this workspace + ConfigurationId string `protobuf:"bytes,3,opt,name=configuration_id,json=configurationId,proto3" json:"configuration_id,omitempty"` + // Annotations are key/value pairs that gets attached to the workspace. + // +internal - not yet implemented + Annotations map[string]string `protobuf:"bytes,4,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // name is the name of the workspace as specified by the user + Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` + // pinned indicates whether the workspace is pinned + Pinned bool `protobuf:"varint,6,opt,name=pinned,proto3" json:"pinned,omitempty"` + // original_context_url is the normalized URL from which the workspace was created + OriginalContextUrl string `protobuf:"bytes,7,opt,name=original_context_url,json=originalContextUrl,proto3" json:"original_context_url,omitempty"` +} + +func (x *WorkspaceMetadata) Reset() { + *x = WorkspaceMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return false } -func (x *Workspace) GetStatus() *WorkspaceStatus { - if x != nil { - return x.Status +func (x *WorkspaceMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkspaceMetadata) ProtoMessage() {} + +func (x *WorkspaceMetadata) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) +} + +// Deprecated: Use WorkspaceMetadata.ProtoReflect.Descriptor instead. +func (*WorkspaceMetadata) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{19} } -func (x *Workspace) GetAdditionalEnvironmentVariables() []*WorkspaceEnvironmentVariable { +func (x *WorkspaceMetadata) GetOwnerId() string { if x != nil { - return x.AdditionalEnvironmentVariables + return x.OwnerId } - return nil + return "" } -func (x *Workspace) GetRegion() string { +func (x *WorkspaceMetadata) GetOrganizationId() string { if x != nil { - return x.Region + return x.OrganizationId } return "" } -func (x *Workspace) GetWorkspaceClass() string { +func (x *WorkspaceMetadata) GetConfigurationId() string { if x != nil { - return x.WorkspaceClass + return x.ConfigurationId } return "" } -func (x *Workspace) GetEditor() *EditorReference { +func (x *WorkspaceMetadata) GetAnnotations() map[string]string { if x != nil { - return x.Editor + return x.Annotations } return nil } -func (x *Workspace) GetContextUrl() string { +func (x *WorkspaceMetadata) GetName() string { if x != nil { - return x.ContextUrl + return x.Name } return "" } -func (x *Workspace) GetPrebuildId() string { +func (x *WorkspaceMetadata) GetPinned() bool { if x != nil { - return x.PrebuildId + return x.Pinned + } + return false +} + +func (x *WorkspaceMetadata) GetOriginalContextUrl() string { + if x != nil { + return x.OriginalContextUrl } return "" } -type WorkspaceStatus struct { +// WorkspaceSpec specifies the configuration of a workspace for a workspace start +type WorkspaceSpec struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Phase is a simple, high-level summary of where the workspace is in its - // lifecycle. The phase is not intended to be a comprehensive rollup of - // observations of the workspace state, nor is it intended to be a - // comprehensive state machine. - Phase *WorkspacePhase `protobuf:"bytes,1,opt,name=phase,proto3" json:"phase,omitempty"` - // message is an optional human-readable message detailing the current phase - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` - // workspace_url is the URL of the workspace. Only present when the phase is - // running. - WorkspaceUrl string `protobuf:"bytes,3,opt,name=workspace_url,json=workspaceUrl,proto3" json:"workspace_url,omitempty"` - // git_status details the Git working copy status of the workspace. - // Note: this is a best-effort field and more often than not will not be - // present. Its absence does not indicate the absence of a working copy. - GitStatus *WorkspaceGitStatus `protobuf:"bytes,4,opt,name=git_status,json=gitStatus,proto3" json:"git_status,omitempty"` - // ports lists the network ports currently available/known of this workspace - Ports []*WorkspacePort `protobuf:"bytes,5,rep,name=ports,proto3" json:"ports,omitempty"` - // Admission describes who can access a workspace instance and its ports. - Admission AdmissionLevel `protobuf:"varint,6,opt,name=admission,proto3,enum=gitpod.v1.AdmissionLevel" json:"admission,omitempty"` - // Instance ID is the unique identifier of the workspace instance - InstanceId string `protobuf:"bytes,7,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // Conditions contains observations of the workspace's current phase. - Conditions *WorkspaceConditions `protobuf:"bytes,8,opt,name=conditions,proto3" json:"conditions,omitempty"` + // initializer configures how the workspace is to be initialized + Initializer *WorkspaceInitializer `protobuf:"bytes,1,opt,name=initializer,proto3" json:"initializer,omitempty"` + // Type denots the kind of workspace we ought to start + Type WorkspaceSpec_WorkspaceType `protobuf:"varint,2,opt,name=type,proto3,enum=gitpod.v1.WorkspaceSpec_WorkspaceType" json:"type,omitempty"` + // ports is the set of ports which ought to be exposed to the internet + Ports []*WorkspacePort `protobuf:"bytes,3,rep,name=ports,proto3" json:"ports,omitempty"` + // envvars are user-defined environment variables which ought to be available in the workspace (shim'ed environment) + EnvironmentVariables []*EnvironmentVariable `protobuf:"bytes,4,rep,name=environment_variables,json=environmentVariables,proto3" json:"environment_variables,omitempty"` + // Git configures the Git user in the workspace + Git *WorkspaceSpec_GitSpec `protobuf:"bytes,5,opt,name=git,proto3" json:"git,omitempty"` + // Timeout configures the workspace timeout + Timeout *WorkspaceSpec_Timeout `protobuf:"bytes,6,opt,name=timeout,proto3" json:"timeout,omitempty"` + // admission controlls who can access the workspace and its ports. + Admission AdmissionLevel `protobuf:"varint,7,opt,name=admission,proto3,enum=gitpod.v1.AdmissionLevel" json:"admission,omitempty"` + // Class denotes the class of the workspace we ought to start + Class string `protobuf:"bytes,8,opt,name=class,proto3" json:"class,omitempty"` + // ssh_public_keys is user's uploaded ssh public keys + SshPublicKeys []string `protobuf:"bytes,9,rep,name=ssh_public_keys,json=sshPublicKeys,proto3" json:"ssh_public_keys,omitempty"` + // subassembly_references is a list of workspace IDs that this workspace depends on. + // For example: + // + // index.docker.io/gitpod-io/subassmeblies/code:latest + SubassemblyReferences []string `protobuf:"bytes,10,rep,name=subassembly_references,json=subassemblyReferences,proto3" json:"subassembly_references,omitempty"` + // last_user_activity is the time when the user last interacted with the workspace + LastUserActivity *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=last_user_activity,json=lastUserActivity,proto3" json:"last_user_activity,omitempty"` + // log_url is the URL where we stream the workspace's logs to. + // Can be changed when the workspace is PENDING or STOPPED. + LogUrl string `protobuf:"bytes,12,opt,name=log_url,json=logUrl,proto3" json:"log_url,omitempty"` } -func (x *WorkspaceStatus) Reset() { - *x = WorkspaceStatus{} +func (x *WorkspaceSpec) Reset() { + *x = WorkspaceSpec{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_workspace_proto_msgTypes[19] + mi := &file_gitpod_v1_workspace_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *WorkspaceStatus) String() string { +func (x *WorkspaceSpec) String() string { return protoimpl.X.MessageStringOf(x) } -func (*WorkspaceStatus) ProtoMessage() {} +func (*WorkspaceSpec) ProtoMessage() {} -func (x *WorkspaceStatus) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_workspace_proto_msgTypes[19] +func (x *WorkspaceSpec) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1605,97 +1746,144 @@ func (x *WorkspaceStatus) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use WorkspaceStatus.ProtoReflect.Descriptor instead. -func (*WorkspaceStatus) Descriptor() ([]byte, []int) { - return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{19} +// Deprecated: Use WorkspaceSpec.ProtoReflect.Descriptor instead. +func (*WorkspaceSpec) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{20} } -func (x *WorkspaceStatus) GetPhase() *WorkspacePhase { +func (x *WorkspaceSpec) GetInitializer() *WorkspaceInitializer { if x != nil { - return x.Phase + return x.Initializer } return nil } -func (x *WorkspaceStatus) GetMessage() string { +func (x *WorkspaceSpec) GetType() WorkspaceSpec_WorkspaceType { if x != nil { - return x.Message + return x.Type } - return "" + return WorkspaceSpec_WORKSPACE_TYPE_UNSPECIFIED } -func (x *WorkspaceStatus) GetWorkspaceUrl() string { +func (x *WorkspaceSpec) GetPorts() []*WorkspacePort { if x != nil { - return x.WorkspaceUrl + return x.Ports } - return "" + return nil } -func (x *WorkspaceStatus) GetGitStatus() *WorkspaceGitStatus { +func (x *WorkspaceSpec) GetEnvironmentVariables() []*EnvironmentVariable { if x != nil { - return x.GitStatus + return x.EnvironmentVariables } return nil } -func (x *WorkspaceStatus) GetPorts() []*WorkspacePort { +func (x *WorkspaceSpec) GetGit() *WorkspaceSpec_GitSpec { if x != nil { - return x.Ports + return x.Git + } + return nil +} + +func (x *WorkspaceSpec) GetTimeout() *WorkspaceSpec_Timeout { + if x != nil { + return x.Timeout } return nil } -func (x *WorkspaceStatus) GetAdmission() AdmissionLevel { +func (x *WorkspaceSpec) GetAdmission() AdmissionLevel { if x != nil { return x.Admission } return AdmissionLevel_ADMISSION_LEVEL_UNSPECIFIED } -func (x *WorkspaceStatus) GetInstanceId() string { +func (x *WorkspaceSpec) GetClass() string { if x != nil { - return x.InstanceId + return x.Class } return "" } -func (x *WorkspaceStatus) GetConditions() *WorkspaceConditions { +func (x *WorkspaceSpec) GetSshPublicKeys() []string { if x != nil { - return x.Conditions + return x.SshPublicKeys } return nil } -type WorkspaceConditions struct { +func (x *WorkspaceSpec) GetSubassemblyReferences() []string { + if x != nil { + return x.SubassemblyReferences + } + return nil +} + +func (x *WorkspaceSpec) GetLastUserActivity() *timestamppb.Timestamp { + if x != nil { + return x.LastUserActivity + } + return nil +} + +func (x *WorkspaceSpec) GetLogUrl() string { + if x != nil { + return x.LogUrl + } + return "" +} + +// WorkspaceStatus describes a workspace status +type WorkspaceStatus struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // failed contains technical details for the failure of the workspace. - // +optional If this field is empty, the workspace has not failed. - Failed string `protobuf:"bytes,1,opt,name=failed,proto3" json:"failed,omitempty"` - // timeout contains the reason the workspace has timed out. - // +optional If this field is empty, the workspace has not timed out. - Timeout string `protobuf:"bytes,2,opt,name=timeout,proto3" json:"timeout,omitempty"` + // version of the status update. Workspace instances themselves are unversioned, + // but their statuus has different versions. + // The value of this field has no semantic meaning (e.g. don't interpret it as + // as a timestemp), but it can be used to impose a partial order. + // If a.status_version < b.status_version then a was the status before b. + StatusVersion uint64 `protobuf:"varint,1,opt,name=status_version,json=statusVersion,proto3" json:"status_version,omitempty"` + // the phase of a workspace is a simple, high-level summary of where the workspace is in its lifecycle + Phase *WorkspacePhase `protobuf:"bytes,2,opt,name=phase,proto3" json:"phase,omitempty"` + // workspace_url contains the URL at which the workspace can be accessed. + // This field is only set if the workspace is running. + WorkspaceUrl string `protobuf:"bytes,3,opt,name=workspace_url,json=workspaceUrl,proto3" json:"workspace_url,omitempty"` + // conditions detail the current state of the workspace + Conditions *WorkspaceStatus_WorkspaceConditions `protobuf:"bytes,4,opt,name=conditions,proto3" json:"conditions,omitempty"` + // prebuild_result contains the result of a prebuild. Only if the workspace is + PrebuildResult *WorkspaceStatus_PrebuildResult `protobuf:"bytes,5,opt,name=prebuild_result,json=prebuildResult,proto3" json:"prebuild_result,omitempty"` + // git_status details the Git working copy status of the workspace. + // Note: this is a best-effort field and more often than not will not be present. Its absence does not + // indicate the absence of a working copy. + GitStatus *WorkspaceGitStatus `protobuf:"bytes,6,opt,name=git_status,json=gitStatus,proto3" json:"git_status,omitempty"` + // instance_id is the ID of the workspace instance - do not use, interpret or rely on this field + // unless you know what you're doing. + // + // Deprecated: Do not use. + InstanceId string `protobuf:"bytes,7,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` } -func (x *WorkspaceConditions) Reset() { - *x = WorkspaceConditions{} +func (x *WorkspaceStatus) Reset() { + *x = WorkspaceStatus{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_workspace_proto_msgTypes[20] + mi := &file_gitpod_v1_workspace_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *WorkspaceConditions) String() string { +func (x *WorkspaceStatus) String() string { return protoimpl.X.MessageStringOf(x) } -func (*WorkspaceConditions) ProtoMessage() {} +func (*WorkspaceStatus) ProtoMessage() {} -func (x *WorkspaceConditions) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_workspace_proto_msgTypes[20] +func (x *WorkspaceStatus) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1706,21 +1894,57 @@ func (x *WorkspaceConditions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use WorkspaceConditions.ProtoReflect.Descriptor instead. -func (*WorkspaceConditions) Descriptor() ([]byte, []int) { - return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{20} +// Deprecated: Use WorkspaceStatus.ProtoReflect.Descriptor instead. +func (*WorkspaceStatus) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{21} } -func (x *WorkspaceConditions) GetFailed() string { +func (x *WorkspaceStatus) GetStatusVersion() uint64 { if x != nil { - return x.Failed + return x.StatusVersion + } + return 0 +} + +func (x *WorkspaceStatus) GetPhase() *WorkspacePhase { + if x != nil { + return x.Phase + } + return nil +} + +func (x *WorkspaceStatus) GetWorkspaceUrl() string { + if x != nil { + return x.WorkspaceUrl } return "" } -func (x *WorkspaceConditions) GetTimeout() string { +func (x *WorkspaceStatus) GetConditions() *WorkspaceStatus_WorkspaceConditions { if x != nil { - return x.Timeout + return x.Conditions + } + return nil +} + +func (x *WorkspaceStatus) GetPrebuildResult() *WorkspaceStatus_PrebuildResult { + if x != nil { + return x.PrebuildResult + } + return nil +} + +func (x *WorkspaceStatus) GetGitStatus() *WorkspaceGitStatus { + if x != nil { + return x.GitStatus + } + return nil +} + +// Deprecated: Do not use. +func (x *WorkspaceStatus) GetInstanceId() string { + if x != nil { + return x.InstanceId } return "" } @@ -1733,7 +1957,7 @@ type WorkspacePort struct { // port number Port uint64 `protobuf:"varint,1,opt,name=port,proto3" json:"port,omitempty"` // policy of this port - Policy WorkspacePort_Policy `protobuf:"varint,2,opt,name=policy,proto3,enum=gitpod.v1.WorkspacePort_Policy" json:"policy,omitempty"` + Admission AdmissionLevel `protobuf:"varint,2,opt,name=admission,proto3,enum=gitpod.v1.AdmissionLevel" json:"admission,omitempty"` // url that can be used to access the port Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"` // backend protocol of this port @@ -1743,7 +1967,7 @@ type WorkspacePort struct { func (x *WorkspacePort) Reset() { *x = WorkspacePort{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_workspace_proto_msgTypes[21] + mi := &file_gitpod_v1_workspace_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1756,7 +1980,7 @@ func (x *WorkspacePort) String() string { func (*WorkspacePort) ProtoMessage() {} func (x *WorkspacePort) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_workspace_proto_msgTypes[21] + mi := &file_gitpod_v1_workspace_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1769,7 +1993,7 @@ func (x *WorkspacePort) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkspacePort.ProtoReflect.Descriptor instead. func (*WorkspacePort) Descriptor() ([]byte, []int) { - return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{21} + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{22} } func (x *WorkspacePort) GetPort() uint64 { @@ -1779,11 +2003,11 @@ func (x *WorkspacePort) GetPort() uint64 { return 0 } -func (x *WorkspacePort) GetPolicy() WorkspacePort_Policy { +func (x *WorkspacePort) GetAdmission() AdmissionLevel { if x != nil { - return x.Policy + return x.Admission } - return WorkspacePort_POLICY_UNSPECIFIED + return AdmissionLevel_ADMISSION_LEVEL_UNSPECIFIED } func (x *WorkspacePort) GetUrl() string { @@ -1831,7 +2055,7 @@ type WorkspaceGitStatus struct { func (x *WorkspaceGitStatus) Reset() { *x = WorkspaceGitStatus{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_workspace_proto_msgTypes[22] + mi := &file_gitpod_v1_workspace_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1844,7 +2068,7 @@ func (x *WorkspaceGitStatus) String() string { func (*WorkspaceGitStatus) ProtoMessage() {} func (x *WorkspaceGitStatus) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_workspace_proto_msgTypes[22] + mi := &file_gitpod_v1_workspace_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1857,7 +2081,7 @@ func (x *WorkspaceGitStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkspaceGitStatus.ProtoReflect.Descriptor instead. func (*WorkspaceGitStatus) Descriptor() ([]byte, []int) { - return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{22} + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{23} } func (x *WorkspaceGitStatus) GetCloneUrl() string { @@ -1935,7 +2159,7 @@ type WorkspacePhase struct { func (x *WorkspacePhase) Reset() { *x = WorkspacePhase{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_workspace_proto_msgTypes[23] + mi := &file_gitpod_v1_workspace_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1948,7 +2172,7 @@ func (x *WorkspacePhase) String() string { func (*WorkspacePhase) ProtoMessage() {} func (x *WorkspacePhase) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_workspace_proto_msgTypes[23] + mi := &file_gitpod_v1_workspace_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1961,7 +2185,7 @@ func (x *WorkspacePhase) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkspacePhase.ProtoReflect.Descriptor instead. func (*WorkspacePhase) Descriptor() ([]byte, []int) { - return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{23} + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{24} } func (x *WorkspacePhase) GetName() WorkspacePhase_Phase { @@ -1978,32 +2202,32 @@ func (x *WorkspacePhase) GetLastTransitionTime() *timestamppb.Timestamp { return nil } -type WorkspaceEnvironmentVariable struct { +// WorkspaceInitializer specifies how a workspace is to be initialized +type WorkspaceInitializer struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + Specs []*WorkspaceInitializer_Spec `protobuf:"bytes,1,rep,name=specs,proto3" json:"specs,omitempty"` } -func (x *WorkspaceEnvironmentVariable) Reset() { - *x = WorkspaceEnvironmentVariable{} +func (x *WorkspaceInitializer) Reset() { + *x = WorkspaceInitializer{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_workspace_proto_msgTypes[24] + mi := &file_gitpod_v1_workspace_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *WorkspaceEnvironmentVariable) String() string { +func (x *WorkspaceInitializer) String() string { return protoimpl.X.MessageStringOf(x) } -func (*WorkspaceEnvironmentVariable) ProtoMessage() {} +func (*WorkspaceInitializer) ProtoMessage() {} -func (x *WorkspaceEnvironmentVariable) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_workspace_proto_msgTypes[24] +func (x *WorkspaceInitializer) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2014,57 +2238,1332 @@ func (x *WorkspaceEnvironmentVariable) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use WorkspaceEnvironmentVariable.ProtoReflect.Descriptor instead. -func (*WorkspaceEnvironmentVariable) Descriptor() ([]byte, []int) { - return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{24} +// Deprecated: Use WorkspaceInitializer.ProtoReflect.Descriptor instead. +func (*WorkspaceInitializer) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{25} } -func (x *WorkspaceEnvironmentVariable) GetName() string { +func (x *WorkspaceInitializer) GetSpecs() []*WorkspaceInitializer_Spec { if x != nil { - return x.Name + return x.Specs + } + return nil +} + +type GitInitializer struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // remote_uri is the Git remote origin + RemoteUri string `protobuf:"bytes,1,opt,name=remote_uri,json=remoteUri,proto3" json:"remote_uri,omitempty"` + // upstream_Remote_uri is the fork upstream of a repository + UpstreamRemoteUri string `protobuf:"bytes,2,opt,name=upstream_remote_uri,json=upstreamRemoteUri,proto3" json:"upstream_remote_uri,omitempty"` + // the target mode determines what gets checked out + TargetMode GitInitializer_CloneTargetMode `protobuf:"varint,3,opt,name=target_mode,json=targetMode,proto3,enum=gitpod.v1.GitInitializer_CloneTargetMode" json:"target_mode,omitempty"` + // the value for the clone target mode - use depends on the target mode + CloneTaget string `protobuf:"bytes,4,opt,name=clone_taget,json=cloneTaget,proto3" json:"clone_taget,omitempty"` + // a path relative to the workspace root in which the code will be checked out to + CheckoutLocation string `protobuf:"bytes,5,opt,name=checkout_location,json=checkoutLocation,proto3" json:"checkout_location,omitempty"` + // config specifies the Git configuration for this workspace + Config *GitInitializer_GitConfig `protobuf:"bytes,6,opt,name=config,proto3" json:"config,omitempty"` +} + +func (x *GitInitializer) Reset() { + *x = GitInitializer{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GitInitializer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GitInitializer) ProtoMessage() {} + +func (x *GitInitializer) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[26] + 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 GitInitializer.ProtoReflect.Descriptor instead. +func (*GitInitializer) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{26} +} + +func (x *GitInitializer) GetRemoteUri() string { + if x != nil { + return x.RemoteUri + } + return "" +} + +func (x *GitInitializer) GetUpstreamRemoteUri() string { + if x != nil { + return x.UpstreamRemoteUri + } + return "" +} + +func (x *GitInitializer) GetTargetMode() GitInitializer_CloneTargetMode { + if x != nil { + return x.TargetMode + } + return GitInitializer_CLONE_TARGET_MODE_UNSPECIFIED +} + +func (x *GitInitializer) GetCloneTaget() string { + if x != nil { + return x.CloneTaget } return "" } -func (x *WorkspaceEnvironmentVariable) GetValue() string { +func (x *GitInitializer) GetCheckoutLocation() string { if x != nil { - return x.Value + return x.CheckoutLocation } return "" } -type CreateAndStartWorkspaceRequest_Git struct { +func (x *GitInitializer) GetConfig() *GitInitializer_GitConfig { + if x != nil { + return x.Config + } + return nil +} + +type SnapshotInitializer struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // clone_url is the URL of the repository to clone - CloneUrl string `protobuf:"bytes,1,opt,name=clone_url,json=cloneUrl,proto3" json:"clone_url,omitempty"` - // ref is an alternatively symbolic. e.g. refs/tags/v1.0, - // empty string means the default branch of the repository - Ref string `protobuf:"bytes,2,opt,name=ref,proto3" json:"ref,omitempty"` - // create_local_branch is the branch you want to create based on provided - // clone_url and ref when workspace started - CreateLocalBranch string `protobuf:"bytes,3,opt,name=create_local_branch,json=createLocalBranch,proto3" json:"create_local_branch,omitempty"` + // reference of the snapshot to restore + SnapshotId string `protobuf:"bytes,1,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"` } -func (x *CreateAndStartWorkspaceRequest_Git) Reset() { - *x = CreateAndStartWorkspaceRequest_Git{} +func (x *SnapshotInitializer) Reset() { + *x = SnapshotInitializer{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_workspace_proto_msgTypes[25] + mi := &file_gitpod_v1_workspace_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CreateAndStartWorkspaceRequest_Git) String() string { +func (x *SnapshotInitializer) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CreateAndStartWorkspaceRequest_Git) ProtoMessage() {} +func (*SnapshotInitializer) ProtoMessage() {} -func (x *CreateAndStartWorkspaceRequest_Git) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_workspace_proto_msgTypes[25] +func (x *SnapshotInitializer) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[27] + 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 SnapshotInitializer.ProtoReflect.Descriptor instead. +func (*SnapshotInitializer) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{27} +} + +func (x *SnapshotInitializer) GetSnapshotId() string { + if x != nil { + return x.SnapshotId + } + return "" +} + +type PrebuildInitializer struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // reference of the prebuild to restore + PrebuildId string `protobuf:"bytes,1,opt,name=prebuild_id,json=prebuildId,proto3" json:"prebuild_id,omitempty"` +} + +func (x *PrebuildInitializer) Reset() { + *x = PrebuildInitializer{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PrebuildInitializer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrebuildInitializer) ProtoMessage() {} + +func (x *PrebuildInitializer) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[28] + 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 PrebuildInitializer.ProtoReflect.Descriptor instead. +func (*PrebuildInitializer) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{28} +} + +func (x *PrebuildInitializer) GetPrebuildId() string { + if x != nil { + return x.PrebuildId + } + return "" +} + +// FileDownloadInitializer downloads files and uses them as workspace content. +type FileDownloadInitializer struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Files []*FileDownloadInitializer_FileInfo `protobuf:"bytes,1,rep,name=files,proto3" json:"files,omitempty"` + TargetLocation string `protobuf:"bytes,2,opt,name=target_location,json=targetLocation,proto3" json:"target_location,omitempty"` +} + +func (x *FileDownloadInitializer) Reset() { + *x = FileDownloadInitializer{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileDownloadInitializer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileDownloadInitializer) ProtoMessage() {} + +func (x *FileDownloadInitializer) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[29] + 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 FileDownloadInitializer.ProtoReflect.Descriptor instead. +func (*FileDownloadInitializer) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{29} +} + +func (x *FileDownloadInitializer) GetFiles() []*FileDownloadInitializer_FileInfo { + if x != nil { + return x.Files + } + return nil +} + +func (x *FileDownloadInitializer) GetTargetLocation() string { + if x != nil { + return x.TargetLocation + } + return "" +} + +// GitStatus describes the current Git working copy status, akin to a combination of "git status" and "git branch" +type GitStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // branch is branch we're currently on + Branch string `protobuf:"bytes,1,opt,name=branch,proto3" json:"branch,omitempty"` + // latest_commit is the most recent commit on the current branch + LatestCommit string `protobuf:"bytes,2,opt,name=latest_commit,json=latestCommit,proto3" json:"latest_commit,omitempty"` + // uncommited_files is the number of uncommitted files, possibly truncated + UncommitedFiles []string `protobuf:"bytes,3,rep,name=uncommited_files,json=uncommitedFiles,proto3" json:"uncommited_files,omitempty"` + // the total number of uncommited files + TotalUncommitedFiles int64 `protobuf:"varint,6,opt,name=total_uncommited_files,json=totalUncommitedFiles,proto3" json:"total_uncommited_files,omitempty"` + // untracked_files is the number of untracked files in the workspace, possibly truncated + UntrackedFiles []string `protobuf:"bytes,4,rep,name=untracked_files,json=untrackedFiles,proto3" json:"untracked_files,omitempty"` + // the total number of untracked files + TotalUntrackedFiles int64 `protobuf:"varint,7,opt,name=total_untracked_files,json=totalUntrackedFiles,proto3" json:"total_untracked_files,omitempty"` + // unpushed_commits is the number of unpushed changes in the workspace, possibly truncated + UnpushedCommits []string `protobuf:"bytes,5,rep,name=unpushed_commits,json=unpushedCommits,proto3" json:"unpushed_commits,omitempty"` + // the total number of unpushed changes + TotalUnpushedCommits int64 `protobuf:"varint,8,opt,name=total_unpushed_commits,json=totalUnpushedCommits,proto3" json:"total_unpushed_commits,omitempty"` +} + +func (x *GitStatus) Reset() { + *x = GitStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GitStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GitStatus) ProtoMessage() {} + +func (x *GitStatus) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[30] + 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 GitStatus.ProtoReflect.Descriptor instead. +func (*GitStatus) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{30} +} + +func (x *GitStatus) GetBranch() string { + if x != nil { + return x.Branch + } + return "" +} + +func (x *GitStatus) GetLatestCommit() string { + if x != nil { + return x.LatestCommit + } + return "" +} + +func (x *GitStatus) GetUncommitedFiles() []string { + if x != nil { + return x.UncommitedFiles + } + return nil +} + +func (x *GitStatus) GetTotalUncommitedFiles() int64 { + if x != nil { + return x.TotalUncommitedFiles + } + return 0 +} + +func (x *GitStatus) GetUntrackedFiles() []string { + if x != nil { + return x.UntrackedFiles + } + return nil +} + +func (x *GitStatus) GetTotalUntrackedFiles() int64 { + if x != nil { + return x.TotalUntrackedFiles + } + return 0 +} + +func (x *GitStatus) GetUnpushedCommits() []string { + if x != nil { + return x.UnpushedCommits + } + return nil +} + +func (x *GitStatus) GetTotalUnpushedCommits() int64 { + if x != nil { + return x.TotalUnpushedCommits + } + return 0 +} + +type UpdateWorkspaceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // workspace_id specifies the workspace to update + // + // +required + WorkspaceId string `protobuf:"bytes,1,opt,name=workspace_id,json=workspaceId,proto3" json:"workspace_id,omitempty"` + // metadata is data associated with this workspace that's required for other parts of Gitpod to function + Metadata *UpdateWorkspaceRequest_UpdateWorkspaceMetadata `protobuf:"bytes,2,opt,name=metadata,proto3,oneof" json:"metadata,omitempty"` + // spec is the configuration of the workspace that's required for the ws-manager to start the workspace + Spec *UpdateWorkspaceRequest_UpdateWorkspaceSpec `protobuf:"bytes,3,opt,name=spec,proto3,oneof" json:"spec,omitempty"` + // git_status updates the git status of the workspace - this is only here during the migration + // + // Deprecated: Do not use. + GitStatus *WorkspaceGitStatus `protobuf:"bytes,4,opt,name=git_status,json=gitStatus,proto3,oneof" json:"git_status,omitempty"` +} + +func (x *UpdateWorkspaceRequest) Reset() { + *x = UpdateWorkspaceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateWorkspaceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateWorkspaceRequest) ProtoMessage() {} + +func (x *UpdateWorkspaceRequest) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[31] + 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 UpdateWorkspaceRequest.ProtoReflect.Descriptor instead. +func (*UpdateWorkspaceRequest) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{31} +} + +func (x *UpdateWorkspaceRequest) GetWorkspaceId() string { + if x != nil { + return x.WorkspaceId + } + return "" +} + +func (x *UpdateWorkspaceRequest) GetMetadata() *UpdateWorkspaceRequest_UpdateWorkspaceMetadata { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *UpdateWorkspaceRequest) GetSpec() *UpdateWorkspaceRequest_UpdateWorkspaceSpec { + if x != nil { + return x.Spec + } + return nil +} + +// Deprecated: Do not use. +func (x *UpdateWorkspaceRequest) GetGitStatus() *WorkspaceGitStatus { + if x != nil { + return x.GitStatus + } + return nil +} + +type UpdateWorkspaceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Workspace *Workspace `protobuf:"bytes,1,opt,name=workspace,proto3" json:"workspace,omitempty"` +} + +func (x *UpdateWorkspaceResponse) Reset() { + *x = UpdateWorkspaceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateWorkspaceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateWorkspaceResponse) ProtoMessage() {} + +func (x *UpdateWorkspaceResponse) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[32] + 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 UpdateWorkspaceResponse.ProtoReflect.Descriptor instead. +func (*UpdateWorkspaceResponse) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{32} +} + +func (x *UpdateWorkspaceResponse) GetWorkspace() *Workspace { + if x != nil { + return x.Workspace + } + return nil +} + +type ParseContextURLRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // context_url is the URL to parse + ContextUrl string `protobuf:"bytes,1,opt,name=context_url,json=contextUrl,proto3" json:"context_url,omitempty"` + // configuration_id is the ID of the configuration to use + ConfigurationId string `protobuf:"bytes,2,opt,name=configuration_id,json=configurationId,proto3" json:"configuration_id,omitempty"` +} + +func (x *ParseContextURLRequest) Reset() { + *x = ParseContextURLRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ParseContextURLRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ParseContextURLRequest) ProtoMessage() {} + +func (x *ParseContextURLRequest) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[33] + 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 ParseContextURLRequest.ProtoReflect.Descriptor instead. +func (*ParseContextURLRequest) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{33} +} + +func (x *ParseContextURLRequest) GetContextUrl() string { + if x != nil { + return x.ContextUrl + } + return "" +} + +func (x *ParseContextURLRequest) GetConfigurationId() string { + if x != nil { + return x.ConfigurationId + } + return "" +} + +type ParseContextURLResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Metadata *WorkspaceMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` + Spec *WorkspaceSpec `protobuf:"bytes,2,opt,name=spec,proto3" json:"spec,omitempty"` +} + +func (x *ParseContextURLResponse) Reset() { + *x = ParseContextURLResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ParseContextURLResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ParseContextURLResponse) ProtoMessage() {} + +func (x *ParseContextURLResponse) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[34] + 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 ParseContextURLResponse.ProtoReflect.Descriptor instead. +func (*ParseContextURLResponse) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{34} +} + +func (x *ParseContextURLResponse) GetMetadata() *WorkspaceMetadata { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *ParseContextURLResponse) GetSpec() *WorkspaceSpec { + if x != nil { + return x.Spec + } + return nil +} + +type CreateAndStartWorkspaceRequest_ContextURL struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // url is the URL from which the workspace is created + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` + // workspace_class is the class of the workspace we ought to start + WorkspaceClass string `protobuf:"bytes,2,opt,name=workspace_class,json=workspaceClass,proto3" json:"workspace_class,omitempty"` +} + +func (x *CreateAndStartWorkspaceRequest_ContextURL) Reset() { + *x = CreateAndStartWorkspaceRequest_ContextURL{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateAndStartWorkspaceRequest_ContextURL) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateAndStartWorkspaceRequest_ContextURL) ProtoMessage() {} + +func (x *CreateAndStartWorkspaceRequest_ContextURL) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_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 CreateAndStartWorkspaceRequest_ContextURL.ProtoReflect.Descriptor instead. +func (*CreateAndStartWorkspaceRequest_ContextURL) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{6, 0} +} + +func (x *CreateAndStartWorkspaceRequest_ContextURL) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *CreateAndStartWorkspaceRequest_ContextURL) GetWorkspaceClass() string { + if x != nil { + return x.WorkspaceClass + } + return "" +} + +// Timeout configures the workspace timeout +type WorkspaceSpec_Timeout struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // inacitivity is the maximum time of inactivity before the workspace is stopped or paused + Inactivity *durationpb.Duration `protobuf:"bytes,1,opt,name=inactivity,proto3" json:"inactivity,omitempty"` + // inacitivity is the maximum time of disconnection before the workspace is stopped or paused + // set to zero to disable. + Disconnected *durationpb.Duration `protobuf:"bytes,2,opt,name=disconnected,proto3" json:"disconnected,omitempty"` + // maximum lifetime of the workspace + MaximumLifetime *durationpb.Duration `protobuf:"bytes,3,opt,name=maximum_lifetime,json=maximumLifetime,proto3" json:"maximum_lifetime,omitempty"` +} + +func (x *WorkspaceSpec_Timeout) Reset() { + *x = WorkspaceSpec_Timeout{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkspaceSpec_Timeout) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkspaceSpec_Timeout) ProtoMessage() {} + +func (x *WorkspaceSpec_Timeout) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_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 WorkspaceSpec_Timeout.ProtoReflect.Descriptor instead. +func (*WorkspaceSpec_Timeout) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{20, 0} +} + +func (x *WorkspaceSpec_Timeout) GetInactivity() *durationpb.Duration { + if x != nil { + return x.Inactivity + } + return nil +} + +func (x *WorkspaceSpec_Timeout) GetDisconnected() *durationpb.Duration { + if x != nil { + return x.Disconnected + } + return nil +} + +func (x *WorkspaceSpec_Timeout) GetMaximumLifetime() *durationpb.Duration { + if x != nil { + return x.MaximumLifetime + } + return nil +} + +// GitSpec configures the Git available within the workspace +type WorkspaceSpec_GitSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Git username + Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` + // The Git email address + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` +} + +func (x *WorkspaceSpec_GitSpec) Reset() { + *x = WorkspaceSpec_GitSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkspaceSpec_GitSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkspaceSpec_GitSpec) ProtoMessage() {} + +func (x *WorkspaceSpec_GitSpec) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[38] + 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_GitSpec.ProtoReflect.Descriptor instead. +func (*WorkspaceSpec_GitSpec) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{20, 1} +} + +func (x *WorkspaceSpec_GitSpec) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *WorkspaceSpec_GitSpec) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +// WorkspaceCondition gives more detailed information as to the state of the workspace. Which condition actually +// has a value depends on the phase the workspace is in. +type WorkspaceStatus_WorkspaceConditions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // failed contains the reason the workspace failed to operate. If this field is empty, the workspace has not failed. + Failed string `protobuf:"bytes,1,opt,name=failed,proto3" json:"failed,omitempty"` + // failed_reason contains the reason the workspace failed to operate. + // This field is only set if the workspace has failed. + FailedReason WorkspaceStatus_WorkspaceConditions_FailedReason `protobuf:"varint,2,opt,name=failed_reason,json=failedReason,proto3,enum=gitpod.v1.WorkspaceStatus_WorkspaceConditions_FailedReason" json:"failed_reason,omitempty"` + // timeout contains the reason the workspace has timed out. If this field is empty, the workspace has not timed out. + Timeout string `protobuf:"bytes,3,opt,name=timeout,proto3" json:"timeout,omitempty"` +} + +func (x *WorkspaceStatus_WorkspaceConditions) Reset() { + *x = WorkspaceStatus_WorkspaceConditions{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkspaceStatus_WorkspaceConditions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkspaceStatus_WorkspaceConditions) ProtoMessage() {} + +func (x *WorkspaceStatus_WorkspaceConditions) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[39] + 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 WorkspaceStatus_WorkspaceConditions.ProtoReflect.Descriptor instead. +func (*WorkspaceStatus_WorkspaceConditions) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{21, 0} +} + +func (x *WorkspaceStatus_WorkspaceConditions) GetFailed() string { + if x != nil { + return x.Failed + } + return "" +} + +func (x *WorkspaceStatus_WorkspaceConditions) GetFailedReason() WorkspaceStatus_WorkspaceConditions_FailedReason { + if x != nil { + return x.FailedReason + } + return WorkspaceStatus_WorkspaceConditions_FAILED_REASON_UNSPECIFIED +} + +func (x *WorkspaceStatus_WorkspaceConditions) GetTimeout() string { + if x != nil { + return x.Timeout + } + return "" +} + +type WorkspaceStatus_PrebuildResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Snapshot points to the content of the prebuild. This string is opaque to the cluster manager, + // and must be returned unaltered. + Snapshot string `protobuf:"bytes,1,opt,name=snapshot,proto3" json:"snapshot,omitempty"` + // The prebuild's error message + ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` +} + +func (x *WorkspaceStatus_PrebuildResult) Reset() { + *x = WorkspaceStatus_PrebuildResult{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkspaceStatus_PrebuildResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkspaceStatus_PrebuildResult) ProtoMessage() {} + +func (x *WorkspaceStatus_PrebuildResult) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[40] + 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 WorkspaceStatus_PrebuildResult.ProtoReflect.Descriptor instead. +func (*WorkspaceStatus_PrebuildResult) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{21, 1} +} + +func (x *WorkspaceStatus_PrebuildResult) GetSnapshot() string { + if x != nil { + return x.Snapshot + } + return "" +} + +func (x *WorkspaceStatus_PrebuildResult) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +type WorkspaceInitializer_Spec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Spec: + // + // *WorkspaceInitializer_Spec_Git + // *WorkspaceInitializer_Spec_Snapshot + // *WorkspaceInitializer_Spec_Prebuild + // *WorkspaceInitializer_Spec_Download + Spec isWorkspaceInitializer_Spec_Spec `protobuf_oneof:"spec"` +} + +func (x *WorkspaceInitializer_Spec) Reset() { + *x = WorkspaceInitializer_Spec{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkspaceInitializer_Spec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkspaceInitializer_Spec) ProtoMessage() {} + +func (x *WorkspaceInitializer_Spec) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[41] + 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 WorkspaceInitializer_Spec.ProtoReflect.Descriptor instead. +func (*WorkspaceInitializer_Spec) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{25, 0} +} + +func (m *WorkspaceInitializer_Spec) GetSpec() isWorkspaceInitializer_Spec_Spec { + if m != nil { + return m.Spec + } + return nil +} + +func (x *WorkspaceInitializer_Spec) GetGit() *GitInitializer { + if x, ok := x.GetSpec().(*WorkspaceInitializer_Spec_Git); ok { + return x.Git + } + return nil +} + +func (x *WorkspaceInitializer_Spec) GetSnapshot() *SnapshotInitializer { + if x, ok := x.GetSpec().(*WorkspaceInitializer_Spec_Snapshot); ok { + return x.Snapshot + } + return nil +} + +func (x *WorkspaceInitializer_Spec) GetPrebuild() *PrebuildInitializer { + if x, ok := x.GetSpec().(*WorkspaceInitializer_Spec_Prebuild); ok { + return x.Prebuild + } + return nil +} + +func (x *WorkspaceInitializer_Spec) GetDownload() *FileDownloadInitializer { + if x, ok := x.GetSpec().(*WorkspaceInitializer_Spec_Download); ok { + return x.Download + } + return nil +} + +type isWorkspaceInitializer_Spec_Spec interface { + isWorkspaceInitializer_Spec_Spec() +} + +type WorkspaceInitializer_Spec_Git struct { + Git *GitInitializer `protobuf:"bytes,1,opt,name=git,proto3,oneof"` +} + +type WorkspaceInitializer_Spec_Snapshot struct { + Snapshot *SnapshotInitializer `protobuf:"bytes,2,opt,name=snapshot,proto3,oneof"` +} + +type WorkspaceInitializer_Spec_Prebuild struct { + Prebuild *PrebuildInitializer `protobuf:"bytes,3,opt,name=prebuild,proto3,oneof"` +} + +type WorkspaceInitializer_Spec_Download struct { + Download *FileDownloadInitializer `protobuf:"bytes,4,opt,name=download,proto3,oneof"` +} + +func (*WorkspaceInitializer_Spec_Git) isWorkspaceInitializer_Spec_Spec() {} + +func (*WorkspaceInitializer_Spec_Snapshot) isWorkspaceInitializer_Spec_Spec() {} + +func (*WorkspaceInitializer_Spec_Prebuild) isWorkspaceInitializer_Spec_Spec() {} + +func (*WorkspaceInitializer_Spec_Download) isWorkspaceInitializer_Spec_Spec() {} + +type GitInitializer_GitConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // custom config values to be set on clone provided through `.gitpod.yml` + CustomConfig map[string]string `protobuf:"bytes,1,rep,name=custom_config,json=customConfig,proto3" json:"custom_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // authentication method + Authentication GitInitializer_AuthMethod `protobuf:"varint,2,opt,name=authentication,proto3,enum=gitpod.v1.GitInitializer_AuthMethod" json:"authentication,omitempty"` + // auth_user is the username used to authenticate the clone + AuthUser string `protobuf:"bytes,3,opt,name=auth_user,json=authUser,proto3" json:"auth_user,omitempty"` + // auth_password is the password used to authenticate the clone (can also be an API token) + AuthPassword string `protobuf:"bytes,4,opt,name=auth_password,json=authPassword,proto3" json:"auth_password,omitempty"` + // auth_ots is a URL where one can download the authentication secret (:) + // using a GET request. + AuthOts string `protobuf:"bytes,5,opt,name=auth_ots,json=authOts,proto3" json:"auth_ots,omitempty"` +} + +func (x *GitInitializer_GitConfig) Reset() { + *x = GitInitializer_GitConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GitInitializer_GitConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GitInitializer_GitConfig) ProtoMessage() {} + +func (x *GitInitializer_GitConfig) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[42] + 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 GitInitializer_GitConfig.ProtoReflect.Descriptor instead. +func (*GitInitializer_GitConfig) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{26, 0} +} + +func (x *GitInitializer_GitConfig) GetCustomConfig() map[string]string { + if x != nil { + return x.CustomConfig + } + return nil +} + +func (x *GitInitializer_GitConfig) GetAuthentication() GitInitializer_AuthMethod { + if x != nil { + return x.Authentication + } + return GitInitializer_AUTH_METHOD_UNSPECIFIED +} + +func (x *GitInitializer_GitConfig) GetAuthUser() string { + if x != nil { + return x.AuthUser + } + return "" +} + +func (x *GitInitializer_GitConfig) GetAuthPassword() string { + if x != nil { + return x.AuthPassword + } + return "" +} + +func (x *GitInitializer_GitConfig) GetAuthOts() string { + if x != nil { + return x.AuthOts + } + return "" +} + +type FileDownloadInitializer_FileInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` + // file_path is relative to the target_location, e.g. if target_location is in `/workspace/myrepo` + // a file_path of `foobar/file` would produce a file in `/workspace/myrepo/foobar/file`. + // file_path must include the filename. The FileDownloadInitializer will create any parent directories + // necessary to place the file. + FilePath string `protobuf:"bytes,2,opt,name=file_path,json=filePath,proto3" json:"file_path,omitempty"` + // digest is a hash of the file content in the OCI digest format (see https://github.com/opencontainers/image-spec/blob/master/descriptor.md#digests). + // This information is used to compute subsequent + // content versions, and to validate the file content was downloaded correctly. + Digest string `protobuf:"bytes,3,opt,name=digest,proto3" json:"digest,omitempty"` +} + +func (x *FileDownloadInitializer_FileInfo) Reset() { + *x = FileDownloadInitializer_FileInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileDownloadInitializer_FileInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileDownloadInitializer_FileInfo) ProtoMessage() {} + +func (x *FileDownloadInitializer_FileInfo) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[44] + 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 FileDownloadInitializer_FileInfo.ProtoReflect.Descriptor instead. +func (*FileDownloadInitializer_FileInfo) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{29, 0} +} + +func (x *FileDownloadInitializer_FileInfo) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *FileDownloadInitializer_FileInfo) GetFilePath() string { + if x != nil { + return x.FilePath + } + return "" +} + +func (x *FileDownloadInitializer_FileInfo) GetDigest() string { + if x != nil { + return x.Digest + } + return "" +} + +type UpdateWorkspaceRequest_UpdateWorkspaceMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is the name of the workspace as specified by the user + Name *string `protobuf:"bytes,1,opt,name=name,proto3,oneof" json:"name,omitempty"` + // pinned indicates whether the workspace is pinned + Pinned *bool `protobuf:"varint,2,opt,name=pinned,proto3,oneof" json:"pinned,omitempty"` +} + +func (x *UpdateWorkspaceRequest_UpdateWorkspaceMetadata) Reset() { + *x = UpdateWorkspaceRequest_UpdateWorkspaceMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateWorkspaceRequest_UpdateWorkspaceMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateWorkspaceRequest_UpdateWorkspaceMetadata) ProtoMessage() {} + +func (x *UpdateWorkspaceRequest_UpdateWorkspaceMetadata) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[45] + 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 UpdateWorkspaceRequest_UpdateWorkspaceMetadata.ProtoReflect.Descriptor instead. +func (*UpdateWorkspaceRequest_UpdateWorkspaceMetadata) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{31, 0} +} + +func (x *UpdateWorkspaceRequest_UpdateWorkspaceMetadata) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *UpdateWorkspaceRequest_UpdateWorkspaceMetadata) GetPinned() bool { + if x != nil && x.Pinned != nil { + return *x.Pinned + } + return false +} + +type UpdateWorkspaceRequest_UpdateTimeout struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // inacitivity is the maximum time of inactivity before the workspace is stopped or paused + Inactivity *durationpb.Duration `protobuf:"bytes,1,opt,name=inactivity,proto3,oneof" json:"inactivity,omitempty"` + // inacitivity is the maximum time of disconnection before the workspace is stopped or paused + Disconnected *durationpb.Duration `protobuf:"bytes,2,opt,name=disconnected,proto3,oneof" json:"disconnected,omitempty"` +} + +func (x *UpdateWorkspaceRequest_UpdateTimeout) Reset() { + *x = UpdateWorkspaceRequest_UpdateTimeout{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateWorkspaceRequest_UpdateTimeout) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateWorkspaceRequest_UpdateTimeout) ProtoMessage() {} + +func (x *UpdateWorkspaceRequest_UpdateTimeout) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[46] + 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 UpdateWorkspaceRequest_UpdateTimeout.ProtoReflect.Descriptor instead. +func (*UpdateWorkspaceRequest_UpdateTimeout) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{31, 1} +} + +func (x *UpdateWorkspaceRequest_UpdateTimeout) GetInactivity() *durationpb.Duration { + if x != nil { + return x.Inactivity + } + return nil +} + +func (x *UpdateWorkspaceRequest_UpdateTimeout) GetDisconnected() *durationpb.Duration { + if x != nil { + return x.Disconnected + } + return nil +} + +type UpdateWorkspaceRequest_UpdateWorkspaceSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // timeout configures the workspace timeout + Timeout *UpdateWorkspaceRequest_UpdateTimeout `protobuf:"bytes,1,opt,name=timeout,proto3,oneof" json:"timeout,omitempty"` + // admission controlls who can access the workspace and its ports. + Admission *AdmissionLevel `protobuf:"varint,2,opt,name=admission,proto3,enum=gitpod.v1.AdmissionLevel,oneof" json:"admission,omitempty"` + // Note(cw): repeated fields have implicit presence. There's a difference between passing an empty list or nothing. + SshPublicKeys []string `protobuf:"bytes,3,rep,name=ssh_public_keys,json=sshPublicKeys,proto3" json:"ssh_public_keys,omitempty"` +} + +func (x *UpdateWorkspaceRequest_UpdateWorkspaceSpec) Reset() { + *x = UpdateWorkspaceRequest_UpdateWorkspaceSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateWorkspaceRequest_UpdateWorkspaceSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateWorkspaceRequest_UpdateWorkspaceSpec) ProtoMessage() {} + +func (x *UpdateWorkspaceRequest_UpdateWorkspaceSpec) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2075,30 +3574,30 @@ func (x *CreateAndStartWorkspaceRequest_Git) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use CreateAndStartWorkspaceRequest_Git.ProtoReflect.Descriptor instead. -func (*CreateAndStartWorkspaceRequest_Git) Descriptor() ([]byte, []int) { - return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{6, 0} +// Deprecated: Use UpdateWorkspaceRequest_UpdateWorkspaceSpec.ProtoReflect.Descriptor instead. +func (*UpdateWorkspaceRequest_UpdateWorkspaceSpec) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{31, 2} } -func (x *CreateAndStartWorkspaceRequest_Git) GetCloneUrl() string { +func (x *UpdateWorkspaceRequest_UpdateWorkspaceSpec) GetTimeout() *UpdateWorkspaceRequest_UpdateTimeout { if x != nil { - return x.CloneUrl + return x.Timeout } - return "" + return nil } -func (x *CreateAndStartWorkspaceRequest_Git) GetRef() string { - if x != nil { - return x.Ref +func (x *UpdateWorkspaceRequest_UpdateWorkspaceSpec) GetAdmission() AdmissionLevel { + if x != nil && x.Admission != nil { + return *x.Admission } - return "" + return AdmissionLevel_ADMISSION_LEVEL_UNSPECIFIED } -func (x *CreateAndStartWorkspaceRequest_Git) GetCreateLocalBranch() string { +func (x *UpdateWorkspaceRequest_UpdateWorkspaceSpec) GetSshPublicKeys() []string { if x != nil { - return x.CreateLocalBranch + return x.SshPublicKeys } - return "" + return nil } var File_gitpod_v1_workspace_proto protoreflect.FileDescriptor @@ -2107,360 +3606,645 @@ var file_gitpod_v1_workspace_proto_rawDesc = []byte{ 0x0a, 0x19, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x1a, 0x16, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, - 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x38, 0x0a, 0x13, 0x47, - 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x31, 0x2f, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x6e, 0x76, 0x76, 0x61, 0x72, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x38, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0x4a, 0x0a, + 0x14, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, + 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x40, 0x0a, 0x1b, 0x57, 0x61, 0x74, + 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0x75, 0x0a, 0x1c, 0x57, + 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x77, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x32, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x72, + 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x65, 0x72, 0x6d, 0x22, 0x8d, 0x01, 0x0a, + 0x16, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, + 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0xa0, 0x03, 0x0a, + 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x57, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x55, 0x52, 0x4c, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, + 0x72, 0x6c, 0x12, 0x2e, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x04, 0x73, 0x70, + 0x65, 0x63, 0x12, 0x32, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x64, 0x69, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, + 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x12, 0x34, 0x0a, 0x14, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x47, 0x0a, 0x0a, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, + 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x27, 0x0a, 0x0f, + 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x43, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, + 0x55, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x77, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x70, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x49, 0x64, 0x12, 0x34, 0x0a, 0x14, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x42, 0x02, 0x18, 0x01, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x4c, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x77, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x44, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0xfa, 0x01, 0x0a, + 0x20, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x77, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x4a, 0x0a, 0x06, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x52, 0x0a, 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x16, 0x0a, 0x12, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, + 0x12, 0x17, 0x0a, 0x13, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, + 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x22, 0x5d, 0x0a, 0x14, 0x53, 0x65, 0x6e, + 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, + 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x42, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0x4a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, - 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x22, 0x40, 0x0a, 0x1b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0x41, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x49, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x49, 0x64, 0x22, 0x75, 0x0a, 0x1c, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x15, 0x4c, - 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x72, 0x67, - 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x69, 0x6e, - 0x6e, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x74, 0x65, - 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x54, 0x65, 0x72, 0x6d, 0x22, 0x8d, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x34, 0x0a, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, - 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x84, 0x05, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, - 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x03, 0x67, - 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x47, 0x69, 0x74, 0x48, 0x00, 0x52, 0x03, 0x67, 0x69, 0x74, 0x12, 0x25, - 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x61, 0x0a, 0x18, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x76, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x52, 0x16, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x6e, 0x76, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x06, 0x65, 0x64, 0x69, - 0x74, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x70, - 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x44, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x64, 0x0a, 0x03, 0x47, - 0x69, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x55, 0x72, 0x6c, 0x12, - 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, - 0x66, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, - 0x68, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x55, 0x0a, 0x1f, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, - 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x22, 0x6c, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x30, - 0x0a, 0x14, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x22, 0x4c, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x77, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x65, 0x49, 0x64, 0x22, 0x56, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x12, + 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x09, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, + 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, + 0x63, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xf1, 0x02, 0x0a, 0x11, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, + 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 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, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x6f, 0x72, 0x69, 0x67, 0x69, + 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x72, 0x6c, 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, 0x87, 0x08, 0x0a, 0x0d, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x41, 0x0a, 0x0b, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x72, 0x52, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3a, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, + 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x53, 0x0a, 0x15, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, + 0x32, 0x0a, 0x03, 0x67, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x47, 0x69, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x03, + 0x67, 0x69, 0x74, 0x12, 0x3a, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, + 0x37, 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 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, 0x14, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x26, + 0x0a, 0x0f, 0x73, 0x73, 0x68, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x73, 0x68, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x35, 0x0a, 0x16, 0x73, 0x75, 0x62, 0x61, 0x73, 0x73, + 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x73, 0x75, 0x62, 0x61, 0x73, 0x73, 0x65, 0x6d, + 0x62, 0x6c, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x48, 0x0a, + 0x12, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x69, 0x74, 0x79, 0x18, 0x0b, 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, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, + 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x6f, 0x67, 0x5f, 0x75, + 0x72, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x67, 0x55, 0x72, 0x6c, + 0x1a, 0xc9, 0x01, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x39, 0x0a, 0x0a, + 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x69, 0x6e, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, + 0x6d, 0x5f, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, 0x61, 0x78, + 0x69, 0x6d, 0x75, 0x6d, 0x4c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x1a, 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, 0x68, 0x0a, 0x0d, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x57, 0x4f, + 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x57, 0x4f, + 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x47, + 0x55, 0x4c, 0x41, 0x52, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, + 0x41, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, + 0x44, 0x10, 0x02, 0x22, 0xe6, 0x06, 0x0a, 0x0f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2f, + 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x44, - 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x49, 0x64, 0x22, 0xfa, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x12, 0x4a, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x32, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x52, 0x0a, - 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x17, 0x0a, 0x13, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, - 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, - 0x02, 0x22, 0x5d, 0x0a, 0x14, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, - 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, - 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x22, 0x17, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x0a, 0x1d, 0x47, 0x65, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0x41, 0x0a, - 0x1e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, - 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x22, 0x49, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0x56, 0x0a, 0x25, 0x47, - 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, - 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x5f, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x73, 0x22, 0xea, 0x03, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x27, 0x0a, - 0x0f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x69, - 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x69, 0x6e, 0x6e, - 0x65, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x71, 0x0a, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x1e, 0x61, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x06, 0x65, 0x64, - 0x69, 0x74, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x12, 0x1f, - 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x72, 0x6c, 0x12, - 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, - 0x22, 0x89, 0x03, 0x0a, 0x0f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, - 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x61, 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x55, 0x72, 0x6c, 0x12, 0x3c, 0x0a, 0x0a, 0x67, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x69, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x67, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x2e, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, - 0x74, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, - 0x31, 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, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x3e, 0x0a, 0x0a, - 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x47, 0x0a, 0x13, + 0x65, 0x55, 0x72, 0x6c, 0x12, 0x4e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x52, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3c, 0x0a, 0x0a, 0x67, 0x69, 0x74, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x47, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x67, 0x69, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, + 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x1a, 0xfb, 0x02, 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, 0x22, 0xc3, 0x02, 0x0a, 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, 0x69, - 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x50, 0x6f, 0x72, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x3d, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, - 0x72, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x47, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, - 0x16, 0x0a, 0x12, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x4f, 0x4c, 0x49, 0x43, - 0x59, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x50, - 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x02, 0x22, 0x4b, - 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x52, - 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, - 0x5f, 0x48, 0x54, 0x54, 0x50, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x52, 0x4f, 0x54, 0x4f, - 0x43, 0x4f, 0x4c, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, 0x02, 0x22, 0x8d, 0x03, 0x0a, 0x12, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x55, 0x72, 0x6c, 0x12, - 0x16, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x29, 0x0a, 0x10, - 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x27, 0x0a, - 0x0f, 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, - 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x74, 0x72, - 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, - 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x08, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x75, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, - 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x70, 0x75, - 0x73, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0xef, 0x02, 0x0a, 0x0e, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x33, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 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, 0x12, 0x6c, - 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, - 0x65, 0x22, 0xd9, 0x01, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, - 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x50, - 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x48, 0x41, 0x53, 0x45, - 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x02, 0x12, 0x11, 0x0a, - 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, - 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, - 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, - 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, - 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x55, - 0x50, 0x54, 0x45, 0x44, 0x10, 0x07, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, - 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x08, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, - 0x41, 0x53, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x09, 0x22, 0x48, 0x0a, - 0x1c, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 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, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x44, 0x4d, - 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x44, - 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x4f, 0x57, - 0x4e, 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x44, - 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x56, - 0x45, 0x52, 0x59, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x32, 0xbd, 0x07, 0x0a, 0x10, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, - 0x0c, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, 0x2e, - 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, - 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x6b, 0x0a, 0x14, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x74, - 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x57, 0x0a, - 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, - 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, - 0x6e, 0x64, 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, 0x57, 0x0a, 0x0e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 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, 0x75, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, - 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x69, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x60, 0x0a, 0x0d, 0x66, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, + 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0xcf, 0x01, 0x0a, 0x0c, 0x46, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x19, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2f, 0x0a, 0x2b, 0x46, 0x41, 0x49, 0x4c, 0x45, + 0x44, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, + 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, + 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x46, 0x41, 0x49, + 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, + 0x5f, 0x50, 0x55, 0x4c, 0x4c, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x03, 0x12, + 0x28, 0x0a, 0x24, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, + 0x5f, 0x55, 0x4e, 0x45, 0x58, 0x50, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x54, 0x45, 0x52, 0x4d, + 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x1a, 0x51, 0x0a, 0x0e, 0x50, 0x72, 0x65, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xfa, 0x01, 0x0a, + 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x70, 0x6f, + 0x72, 0x74, 0x12, 0x37, 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 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, 0x10, 0x0a, 0x03, 0x75, + 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x3d, 0x0a, + 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x4b, 0x0a, 0x08, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x52, 0x4f, 0x54, + 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x48, + 0x54, 0x54, 0x50, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, + 0x4c, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, 0x02, 0x22, 0x8d, 0x03, 0x0a, 0x12, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x16, 0x0a, + 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, + 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, + 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, + 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x75, + 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, + 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x74, 0x72, 0x61, 0x63, + 0x6b, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x70, 0x75, + 0x73, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0f, 0x75, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x70, + 0x75, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x70, 0x75, 0x73, 0x68, + 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0x81, 0x03, 0x0a, 0x0e, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x50, 0x68, 0x61, 0x73, 0x65, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x4c, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 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, 0x12, 0x6c, 0x61, 0x73, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, + 0xeb, 0x01, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, + 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, + 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, + 0x4d, 0x41, 0x47, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x50, + 0x48, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x12, + 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, + 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, + 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, + 0x41, 0x53, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x15, 0x0a, + 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x55, 0x50, 0x54, + 0x45, 0x44, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x41, + 0x55, 0x53, 0x45, 0x44, 0x10, 0x08, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, + 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, + 0x41, 0x53, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x0a, 0x22, 0xd0, 0x02, + 0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x73, 0x70, 0x65, + 0x63, 0x73, 0x1a, 0xfb, 0x01, 0x0a, 0x04, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2d, 0x0a, 0x03, 0x67, + 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x72, 0x48, 0x00, 0x52, 0x03, 0x67, 0x69, 0x74, 0x12, 0x3c, 0x0a, 0x08, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, + 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x40, 0x0a, 0x08, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, + 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x22, 0xbb, 0x07, 0x0a, 0x0e, 0x47, 0x69, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x75, 0x72, + 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x55, + 0x72, 0x69, 0x12, 0x2e, 0x0a, 0x13, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x11, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x55, + 0x72, 0x69, 0x12, 0x4a, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6d, 0x6f, 0x64, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x72, 0x2e, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x6f, + 0x64, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x65, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x54, 0x61, 0x67, 0x65, 0x74, 0x12, + 0x2b, 0x0a, 0x11, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x6f, 0x75, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x49, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0xd3, 0x02, 0x0a, 0x09, 0x47, 0x69, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5a, 0x0a, 0x0d, 0x63, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x49, 0x6e, + 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x4c, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x69, + 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x75, 0x74, 0x68, 0x55, 0x73, 0x65, 0x72, 0x12, 0x23, + 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x50, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6f, 0x74, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4f, 0x74, 0x73, 0x1a, 0x3f, + 0x0a, 0x11, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 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, + 0xc5, 0x01, 0x0a, 0x0f, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, + 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4c, 0x4f, 0x4e, 0x45, 0x5f, 0x54, 0x41, 0x52, + 0x47, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4c, 0x4f, 0x4e, 0x45, 0x5f, + 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, + 0x54, 0x45, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x4c, 0x4f, + 0x4e, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, + 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x23, + 0x0a, 0x1f, 0x43, 0x4c, 0x4f, 0x4e, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x4d, + 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, 0x42, 0x52, 0x41, 0x4e, 0x43, + 0x48, 0x10, 0x03, 0x12, 0x22, 0x0a, 0x1e, 0x43, 0x4c, 0x4f, 0x4e, 0x45, 0x5f, 0x54, 0x41, 0x52, + 0x47, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x5f, 0x42, + 0x52, 0x41, 0x4e, 0x43, 0x48, 0x10, 0x04, 0x22, 0x65, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x4d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4d, 0x45, + 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, + 0x44, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x10, 0x01, 0x12, 0x1e, + 0x0a, 0x1a, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x42, 0x41, + 0x53, 0x49, 0x43, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4f, 0x54, 0x53, 0x10, 0x02, 0x22, 0x36, + 0x0a, 0x13, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, + 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x22, 0x36, 0x0a, 0x13, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x1f, 0x0a, + 0x0b, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0xd8, + 0x01, 0x0a, 0x17, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x46, 0x69, + 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x27, 0x0a, + 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x51, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, + 0x68, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0xe7, 0x02, 0x0a, 0x09, 0x47, 0x69, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, + 0x23, 0x0a, 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, + 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, + 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, + 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, + 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, + 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x32, + 0x0a, 0x15, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, + 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x6c, + 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x63, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x75, 0x6e, + 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x34, 0x0a, + 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x5f, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x73, 0x22, 0xd6, 0x06, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x5a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x00, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x12, 0x4e, 0x0a, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x69, + 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x48, 0x01, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, + 0x0a, 0x67, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x42, 0x02, 0x18, 0x01, 0x48, 0x02, 0x52, 0x09, 0x67, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x88, 0x01, 0x01, 0x1a, 0x63, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x70, 0x69, 0x6e, 0x6e, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x06, 0x70, 0x69, 0x6e, 0x6e, + 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x09, + 0x0a, 0x07, 0x5f, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x1a, 0xb3, 0x01, 0x0a, 0x0d, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3e, 0x0a, 0x0a, 0x69, + 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x69, 0x6e, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x0c, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x0c, + 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, + 0x0d, 0x0a, 0x0b, 0x5f, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x42, 0x0f, + 0x0a, 0x0d, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x1a, + 0xe5, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4e, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x48, 0x00, 0x52, 0x07, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x3c, 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x48, 0x01, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x73, 0x68, 0x5f, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, + 0x73, 0x73, 0x68, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x0a, 0x0a, + 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x61, 0x64, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x42, 0x0d, 0x0a, + 0x0b, 0x5f, 0x67, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x4d, 0x0a, 0x17, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x64, 0x0a, 0x16, 0x50, + 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x22, 0x81, 0x01, 0x0a, 0x17, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x2a, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x44, 0x4d, 0x49, 0x53, + 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x44, 0x4d, 0x49, + 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x4f, 0x57, 0x4e, 0x45, + 0x52, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x44, 0x4d, 0x49, + 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x56, 0x45, 0x52, + 0x59, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x32, 0xf5, 0x08, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x47, + 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x69, + 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x53, 0x65, - 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x12, 0x1f, 0x2e, 0x67, 0x69, - 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, - 0x74, 0x42, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, - 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x6f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x28, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, + 0x0a, 0x14, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x57, 0x0a, 0x0e, 0x4c, + 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x20, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, + 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, + 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, 0x57, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 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, 0x5a, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, + 0x0f, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, + 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, + 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x18, 0x47, 0x65, 0x74, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x54, 0x0a, 0x0d, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, + 0x74, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, + 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, - 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x84, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, - 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, - 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x39, 0x5a, 0x37, 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, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, - 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x39, + 0x5a, 0x37, 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, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2d, + 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -2475,92 +4259,156 @@ func file_gitpod_v1_workspace_proto_rawDescGZIP() []byte { return file_gitpod_v1_workspace_proto_rawDescData } -var file_gitpod_v1_workspace_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_gitpod_v1_workspace_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_gitpod_v1_workspace_proto_enumTypes = make([]protoimpl.EnumInfo, 8) +var file_gitpod_v1_workspace_proto_msgTypes = make([]protoimpl.MessageInfo, 48) var file_gitpod_v1_workspace_proto_goTypes = []interface{}{ - (AdmissionLevel)(0), // 0: gitpod.v1.AdmissionLevel - (GetWorkspaceDefaultImageResponse_Source)(0), // 1: gitpod.v1.GetWorkspaceDefaultImageResponse.Source - (WorkspacePort_Policy)(0), // 2: gitpod.v1.WorkspacePort.Policy - (WorkspacePort_Protocol)(0), // 3: gitpod.v1.WorkspacePort.Protocol - (WorkspacePhase_Phase)(0), // 4: gitpod.v1.WorkspacePhase.Phase - (*GetWorkspaceRequest)(nil), // 5: gitpod.v1.GetWorkspaceRequest - (*GetWorkspaceResponse)(nil), // 6: gitpod.v1.GetWorkspaceResponse - (*WatchWorkspaceStatusRequest)(nil), // 7: gitpod.v1.WatchWorkspaceStatusRequest - (*WatchWorkspaceStatusResponse)(nil), // 8: gitpod.v1.WatchWorkspaceStatusResponse - (*ListWorkspacesRequest)(nil), // 9: gitpod.v1.ListWorkspacesRequest - (*ListWorkspacesResponse)(nil), // 10: gitpod.v1.ListWorkspacesResponse - (*CreateAndStartWorkspaceRequest)(nil), // 11: gitpod.v1.CreateAndStartWorkspaceRequest - (*CreateAndStartWorkspaceResponse)(nil), // 12: gitpod.v1.CreateAndStartWorkspaceResponse - (*StartWorkspaceRequest)(nil), // 13: gitpod.v1.StartWorkspaceRequest - (*StartWorkspaceResponse)(nil), // 14: gitpod.v1.StartWorkspaceResponse - (*GetWorkspaceDefaultImageRequest)(nil), // 15: gitpod.v1.GetWorkspaceDefaultImageRequest - (*GetWorkspaceDefaultImageResponse)(nil), // 16: gitpod.v1.GetWorkspaceDefaultImageResponse - (*SendHeartBeatRequest)(nil), // 17: gitpod.v1.SendHeartBeatRequest - (*SendHeartBeatResponse)(nil), // 18: gitpod.v1.SendHeartBeatResponse - (*GetWorkspaceOwnerTokenRequest)(nil), // 19: gitpod.v1.GetWorkspaceOwnerTokenRequest - (*GetWorkspaceOwnerTokenResponse)(nil), // 20: gitpod.v1.GetWorkspaceOwnerTokenResponse - (*GetWorkspaceEditorCredentialsRequest)(nil), // 21: gitpod.v1.GetWorkspaceEditorCredentialsRequest - (*GetWorkspaceEditorCredentialsResponse)(nil), // 22: gitpod.v1.GetWorkspaceEditorCredentialsResponse - (*Workspace)(nil), // 23: gitpod.v1.Workspace - (*WorkspaceStatus)(nil), // 24: gitpod.v1.WorkspaceStatus - (*WorkspaceConditions)(nil), // 25: gitpod.v1.WorkspaceConditions - (*WorkspacePort)(nil), // 26: gitpod.v1.WorkspacePort - (*WorkspaceGitStatus)(nil), // 27: gitpod.v1.WorkspaceGitStatus - (*WorkspacePhase)(nil), // 28: gitpod.v1.WorkspacePhase - (*WorkspaceEnvironmentVariable)(nil), // 29: gitpod.v1.WorkspaceEnvironmentVariable - (*CreateAndStartWorkspaceRequest_Git)(nil), // 30: gitpod.v1.CreateAndStartWorkspaceRequest.Git - (*PaginationRequest)(nil), // 31: gitpod.v1.PaginationRequest - (*PaginationResponse)(nil), // 32: gitpod.v1.PaginationResponse - (*EditorReference)(nil), // 33: gitpod.v1.EditorReference - (*timestamppb.Timestamp)(nil), // 34: google.protobuf.Timestamp + (AdmissionLevel)(0), // 0: gitpod.v1.AdmissionLevel + (GetWorkspaceDefaultImageResponse_Source)(0), // 1: gitpod.v1.GetWorkspaceDefaultImageResponse.Source + (WorkspaceSpec_WorkspaceType)(0), // 2: gitpod.v1.WorkspaceSpec.WorkspaceType + (WorkspaceStatus_WorkspaceConditions_FailedReason)(0), // 3: gitpod.v1.WorkspaceStatus.WorkspaceConditions.FailedReason + (WorkspacePort_Protocol)(0), // 4: gitpod.v1.WorkspacePort.Protocol + (WorkspacePhase_Phase)(0), // 5: gitpod.v1.WorkspacePhase.Phase + (GitInitializer_CloneTargetMode)(0), // 6: gitpod.v1.GitInitializer.CloneTargetMode + (GitInitializer_AuthMethod)(0), // 7: gitpod.v1.GitInitializer.AuthMethod + (*GetWorkspaceRequest)(nil), // 8: gitpod.v1.GetWorkspaceRequest + (*GetWorkspaceResponse)(nil), // 9: gitpod.v1.GetWorkspaceResponse + (*WatchWorkspaceStatusRequest)(nil), // 10: gitpod.v1.WatchWorkspaceStatusRequest + (*WatchWorkspaceStatusResponse)(nil), // 11: gitpod.v1.WatchWorkspaceStatusResponse + (*ListWorkspacesRequest)(nil), // 12: gitpod.v1.ListWorkspacesRequest + (*ListWorkspacesResponse)(nil), // 13: gitpod.v1.ListWorkspacesResponse + (*CreateAndStartWorkspaceRequest)(nil), // 14: gitpod.v1.CreateAndStartWorkspaceRequest + (*CreateAndStartWorkspaceResponse)(nil), // 15: gitpod.v1.CreateAndStartWorkspaceResponse + (*StartWorkspaceRequest)(nil), // 16: gitpod.v1.StartWorkspaceRequest + (*StartWorkspaceResponse)(nil), // 17: gitpod.v1.StartWorkspaceResponse + (*GetWorkspaceDefaultImageRequest)(nil), // 18: gitpod.v1.GetWorkspaceDefaultImageRequest + (*GetWorkspaceDefaultImageResponse)(nil), // 19: gitpod.v1.GetWorkspaceDefaultImageResponse + (*SendHeartBeatRequest)(nil), // 20: gitpod.v1.SendHeartBeatRequest + (*SendHeartBeatResponse)(nil), // 21: gitpod.v1.SendHeartBeatResponse + (*GetWorkspaceOwnerTokenRequest)(nil), // 22: gitpod.v1.GetWorkspaceOwnerTokenRequest + (*GetWorkspaceOwnerTokenResponse)(nil), // 23: gitpod.v1.GetWorkspaceOwnerTokenResponse + (*GetWorkspaceEditorCredentialsRequest)(nil), // 24: gitpod.v1.GetWorkspaceEditorCredentialsRequest + (*GetWorkspaceEditorCredentialsResponse)(nil), // 25: gitpod.v1.GetWorkspaceEditorCredentialsResponse + (*Workspace)(nil), // 26: gitpod.v1.Workspace + (*WorkspaceMetadata)(nil), // 27: gitpod.v1.WorkspaceMetadata + (*WorkspaceSpec)(nil), // 28: gitpod.v1.WorkspaceSpec + (*WorkspaceStatus)(nil), // 29: gitpod.v1.WorkspaceStatus + (*WorkspacePort)(nil), // 30: gitpod.v1.WorkspacePort + (*WorkspaceGitStatus)(nil), // 31: gitpod.v1.WorkspaceGitStatus + (*WorkspacePhase)(nil), // 32: gitpod.v1.WorkspacePhase + (*WorkspaceInitializer)(nil), // 33: gitpod.v1.WorkspaceInitializer + (*GitInitializer)(nil), // 34: gitpod.v1.GitInitializer + (*SnapshotInitializer)(nil), // 35: gitpod.v1.SnapshotInitializer + (*PrebuildInitializer)(nil), // 36: gitpod.v1.PrebuildInitializer + (*FileDownloadInitializer)(nil), // 37: gitpod.v1.FileDownloadInitializer + (*GitStatus)(nil), // 38: gitpod.v1.GitStatus + (*UpdateWorkspaceRequest)(nil), // 39: gitpod.v1.UpdateWorkspaceRequest + (*UpdateWorkspaceResponse)(nil), // 40: gitpod.v1.UpdateWorkspaceResponse + (*ParseContextURLRequest)(nil), // 41: gitpod.v1.ParseContextURLRequest + (*ParseContextURLResponse)(nil), // 42: gitpod.v1.ParseContextURLResponse + (*CreateAndStartWorkspaceRequest_ContextURL)(nil), // 43: gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL + nil, // 44: gitpod.v1.WorkspaceMetadata.AnnotationsEntry + (*WorkspaceSpec_Timeout)(nil), // 45: gitpod.v1.WorkspaceSpec.Timeout + (*WorkspaceSpec_GitSpec)(nil), // 46: gitpod.v1.WorkspaceSpec.GitSpec + (*WorkspaceStatus_WorkspaceConditions)(nil), // 47: gitpod.v1.WorkspaceStatus.WorkspaceConditions + (*WorkspaceStatus_PrebuildResult)(nil), // 48: gitpod.v1.WorkspaceStatus.PrebuildResult + (*WorkspaceInitializer_Spec)(nil), // 49: gitpod.v1.WorkspaceInitializer.Spec + (*GitInitializer_GitConfig)(nil), // 50: gitpod.v1.GitInitializer.GitConfig + nil, // 51: gitpod.v1.GitInitializer.GitConfig.CustomConfigEntry + (*FileDownloadInitializer_FileInfo)(nil), // 52: gitpod.v1.FileDownloadInitializer.FileInfo + (*UpdateWorkspaceRequest_UpdateWorkspaceMetadata)(nil), // 53: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceMetadata + (*UpdateWorkspaceRequest_UpdateTimeout)(nil), // 54: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout + (*UpdateWorkspaceRequest_UpdateWorkspaceSpec)(nil), // 55: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec + (*PaginationRequest)(nil), // 56: gitpod.v1.PaginationRequest + (*PaginationResponse)(nil), // 57: gitpod.v1.PaginationResponse + (*EditorReference)(nil), // 58: gitpod.v1.EditorReference + (*EnvironmentVariable)(nil), // 59: gitpod.v1.EnvironmentVariable + (*timestamppb.Timestamp)(nil), // 60: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 61: google.protobuf.Duration } var file_gitpod_v1_workspace_proto_depIdxs = []int32{ - 23, // 0: gitpod.v1.GetWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace - 24, // 1: gitpod.v1.WatchWorkspaceStatusResponse.status:type_name -> gitpod.v1.WorkspaceStatus - 31, // 2: gitpod.v1.ListWorkspacesRequest.pagination:type_name -> gitpod.v1.PaginationRequest - 23, // 3: gitpod.v1.ListWorkspacesResponse.workspaces:type_name -> gitpod.v1.Workspace - 32, // 4: gitpod.v1.ListWorkspacesResponse.pagination:type_name -> gitpod.v1.PaginationResponse - 30, // 5: gitpod.v1.CreateAndStartWorkspaceRequest.git:type_name -> gitpod.v1.CreateAndStartWorkspaceRequest.Git - 29, // 6: gitpod.v1.CreateAndStartWorkspaceRequest.additional_env_variables:type_name -> gitpod.v1.WorkspaceEnvironmentVariable - 33, // 7: gitpod.v1.CreateAndStartWorkspaceRequest.editor:type_name -> gitpod.v1.EditorReference - 23, // 8: gitpod.v1.CreateAndStartWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace - 23, // 9: gitpod.v1.StartWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace - 1, // 10: gitpod.v1.GetWorkspaceDefaultImageResponse.source:type_name -> gitpod.v1.GetWorkspaceDefaultImageResponse.Source - 24, // 11: gitpod.v1.Workspace.status:type_name -> gitpod.v1.WorkspaceStatus - 29, // 12: gitpod.v1.Workspace.additional_environment_variables:type_name -> gitpod.v1.WorkspaceEnvironmentVariable - 33, // 13: gitpod.v1.Workspace.editor:type_name -> gitpod.v1.EditorReference - 28, // 14: gitpod.v1.WorkspaceStatus.phase:type_name -> gitpod.v1.WorkspacePhase - 27, // 15: gitpod.v1.WorkspaceStatus.git_status:type_name -> gitpod.v1.WorkspaceGitStatus - 26, // 16: gitpod.v1.WorkspaceStatus.ports:type_name -> gitpod.v1.WorkspacePort - 0, // 17: gitpod.v1.WorkspaceStatus.admission:type_name -> gitpod.v1.AdmissionLevel - 25, // 18: gitpod.v1.WorkspaceStatus.conditions:type_name -> gitpod.v1.WorkspaceConditions - 2, // 19: gitpod.v1.WorkspacePort.policy:type_name -> gitpod.v1.WorkspacePort.Policy - 3, // 20: gitpod.v1.WorkspacePort.protocol:type_name -> gitpod.v1.WorkspacePort.Protocol - 4, // 21: gitpod.v1.WorkspacePhase.name:type_name -> gitpod.v1.WorkspacePhase.Phase - 34, // 22: gitpod.v1.WorkspacePhase.last_transition_time:type_name -> google.protobuf.Timestamp - 5, // 23: gitpod.v1.WorkspaceService.GetWorkspace:input_type -> gitpod.v1.GetWorkspaceRequest - 7, // 24: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:input_type -> gitpod.v1.WatchWorkspaceStatusRequest - 9, // 25: gitpod.v1.WorkspaceService.ListWorkspaces:input_type -> gitpod.v1.ListWorkspacesRequest - 11, // 26: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:input_type -> gitpod.v1.CreateAndStartWorkspaceRequest - 13, // 27: gitpod.v1.WorkspaceService.StartWorkspace:input_type -> gitpod.v1.StartWorkspaceRequest - 15, // 28: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:input_type -> gitpod.v1.GetWorkspaceDefaultImageRequest - 17, // 29: gitpod.v1.WorkspaceService.SendHeartBeat:input_type -> gitpod.v1.SendHeartBeatRequest - 19, // 30: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:input_type -> gitpod.v1.GetWorkspaceOwnerTokenRequest - 21, // 31: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:input_type -> gitpod.v1.GetWorkspaceEditorCredentialsRequest - 6, // 32: gitpod.v1.WorkspaceService.GetWorkspace:output_type -> gitpod.v1.GetWorkspaceResponse - 8, // 33: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:output_type -> gitpod.v1.WatchWorkspaceStatusResponse - 10, // 34: gitpod.v1.WorkspaceService.ListWorkspaces:output_type -> gitpod.v1.ListWorkspacesResponse - 12, // 35: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:output_type -> gitpod.v1.CreateAndStartWorkspaceResponse - 14, // 36: gitpod.v1.WorkspaceService.StartWorkspace:output_type -> gitpod.v1.StartWorkspaceResponse - 16, // 37: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:output_type -> gitpod.v1.GetWorkspaceDefaultImageResponse - 18, // 38: gitpod.v1.WorkspaceService.SendHeartBeat:output_type -> gitpod.v1.SendHeartBeatResponse - 20, // 39: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:output_type -> gitpod.v1.GetWorkspaceOwnerTokenResponse - 22, // 40: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:output_type -> gitpod.v1.GetWorkspaceEditorCredentialsResponse - 32, // [32:41] is the sub-list for method output_type - 23, // [23:32] is the sub-list for method input_type - 23, // [23:23] is the sub-list for extension type_name - 23, // [23:23] is the sub-list for extension extendee - 0, // [0:23] is the sub-list for field type_name + 26, // 0: gitpod.v1.GetWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace + 29, // 1: gitpod.v1.WatchWorkspaceStatusResponse.status:type_name -> gitpod.v1.WorkspaceStatus + 56, // 2: gitpod.v1.ListWorkspacesRequest.pagination:type_name -> gitpod.v1.PaginationRequest + 57, // 3: gitpod.v1.ListWorkspacesResponse.pagination:type_name -> gitpod.v1.PaginationResponse + 26, // 4: gitpod.v1.ListWorkspacesResponse.workspaces:type_name -> gitpod.v1.Workspace + 27, // 5: gitpod.v1.CreateAndStartWorkspaceRequest.metadata:type_name -> gitpod.v1.WorkspaceMetadata + 43, // 6: gitpod.v1.CreateAndStartWorkspaceRequest.context_url:type_name -> gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL + 28, // 7: gitpod.v1.CreateAndStartWorkspaceRequest.spec:type_name -> gitpod.v1.WorkspaceSpec + 58, // 8: gitpod.v1.CreateAndStartWorkspaceRequest.editor:type_name -> gitpod.v1.EditorReference + 26, // 9: gitpod.v1.CreateAndStartWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace + 26, // 10: gitpod.v1.StartWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace + 1, // 11: gitpod.v1.GetWorkspaceDefaultImageResponse.source:type_name -> gitpod.v1.GetWorkspaceDefaultImageResponse.Source + 27, // 12: gitpod.v1.Workspace.metadata:type_name -> gitpod.v1.WorkspaceMetadata + 28, // 13: gitpod.v1.Workspace.spec:type_name -> gitpod.v1.WorkspaceSpec + 29, // 14: gitpod.v1.Workspace.status:type_name -> gitpod.v1.WorkspaceStatus + 44, // 15: gitpod.v1.WorkspaceMetadata.annotations:type_name -> gitpod.v1.WorkspaceMetadata.AnnotationsEntry + 33, // 16: gitpod.v1.WorkspaceSpec.initializer:type_name -> gitpod.v1.WorkspaceInitializer + 2, // 17: gitpod.v1.WorkspaceSpec.type:type_name -> gitpod.v1.WorkspaceSpec.WorkspaceType + 30, // 18: gitpod.v1.WorkspaceSpec.ports:type_name -> gitpod.v1.WorkspacePort + 59, // 19: gitpod.v1.WorkspaceSpec.environment_variables:type_name -> gitpod.v1.EnvironmentVariable + 46, // 20: gitpod.v1.WorkspaceSpec.git:type_name -> gitpod.v1.WorkspaceSpec.GitSpec + 45, // 21: gitpod.v1.WorkspaceSpec.timeout:type_name -> gitpod.v1.WorkspaceSpec.Timeout + 0, // 22: gitpod.v1.WorkspaceSpec.admission:type_name -> gitpod.v1.AdmissionLevel + 60, // 23: gitpod.v1.WorkspaceSpec.last_user_activity:type_name -> google.protobuf.Timestamp + 32, // 24: gitpod.v1.WorkspaceStatus.phase:type_name -> gitpod.v1.WorkspacePhase + 47, // 25: gitpod.v1.WorkspaceStatus.conditions:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions + 48, // 26: gitpod.v1.WorkspaceStatus.prebuild_result:type_name -> gitpod.v1.WorkspaceStatus.PrebuildResult + 31, // 27: gitpod.v1.WorkspaceStatus.git_status:type_name -> gitpod.v1.WorkspaceGitStatus + 0, // 28: gitpod.v1.WorkspacePort.admission:type_name -> gitpod.v1.AdmissionLevel + 4, // 29: gitpod.v1.WorkspacePort.protocol:type_name -> gitpod.v1.WorkspacePort.Protocol + 5, // 30: gitpod.v1.WorkspacePhase.name:type_name -> gitpod.v1.WorkspacePhase.Phase + 60, // 31: gitpod.v1.WorkspacePhase.last_transition_time:type_name -> google.protobuf.Timestamp + 49, // 32: gitpod.v1.WorkspaceInitializer.specs:type_name -> gitpod.v1.WorkspaceInitializer.Spec + 6, // 33: gitpod.v1.GitInitializer.target_mode:type_name -> gitpod.v1.GitInitializer.CloneTargetMode + 50, // 34: gitpod.v1.GitInitializer.config:type_name -> gitpod.v1.GitInitializer.GitConfig + 52, // 35: gitpod.v1.FileDownloadInitializer.files:type_name -> gitpod.v1.FileDownloadInitializer.FileInfo + 53, // 36: gitpod.v1.UpdateWorkspaceRequest.metadata:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceMetadata + 55, // 37: gitpod.v1.UpdateWorkspaceRequest.spec:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec + 31, // 38: gitpod.v1.UpdateWorkspaceRequest.git_status:type_name -> gitpod.v1.WorkspaceGitStatus + 26, // 39: gitpod.v1.UpdateWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace + 27, // 40: gitpod.v1.ParseContextURLResponse.metadata:type_name -> gitpod.v1.WorkspaceMetadata + 28, // 41: gitpod.v1.ParseContextURLResponse.spec:type_name -> gitpod.v1.WorkspaceSpec + 61, // 42: gitpod.v1.WorkspaceSpec.Timeout.inactivity:type_name -> google.protobuf.Duration + 61, // 43: gitpod.v1.WorkspaceSpec.Timeout.disconnected:type_name -> google.protobuf.Duration + 61, // 44: gitpod.v1.WorkspaceSpec.Timeout.maximum_lifetime:type_name -> google.protobuf.Duration + 3, // 45: gitpod.v1.WorkspaceStatus.WorkspaceConditions.failed_reason:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions.FailedReason + 34, // 46: gitpod.v1.WorkspaceInitializer.Spec.git:type_name -> gitpod.v1.GitInitializer + 35, // 47: gitpod.v1.WorkspaceInitializer.Spec.snapshot:type_name -> gitpod.v1.SnapshotInitializer + 36, // 48: gitpod.v1.WorkspaceInitializer.Spec.prebuild:type_name -> gitpod.v1.PrebuildInitializer + 37, // 49: gitpod.v1.WorkspaceInitializer.Spec.download:type_name -> gitpod.v1.FileDownloadInitializer + 51, // 50: gitpod.v1.GitInitializer.GitConfig.custom_config:type_name -> gitpod.v1.GitInitializer.GitConfig.CustomConfigEntry + 7, // 51: gitpod.v1.GitInitializer.GitConfig.authentication:type_name -> gitpod.v1.GitInitializer.AuthMethod + 61, // 52: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout.inactivity:type_name -> google.protobuf.Duration + 61, // 53: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout.disconnected:type_name -> google.protobuf.Duration + 54, // 54: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec.timeout:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout + 0, // 55: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec.admission:type_name -> gitpod.v1.AdmissionLevel + 8, // 56: gitpod.v1.WorkspaceService.GetWorkspace:input_type -> gitpod.v1.GetWorkspaceRequest + 10, // 57: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:input_type -> gitpod.v1.WatchWorkspaceStatusRequest + 12, // 58: gitpod.v1.WorkspaceService.ListWorkspaces:input_type -> gitpod.v1.ListWorkspacesRequest + 14, // 59: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:input_type -> gitpod.v1.CreateAndStartWorkspaceRequest + 16, // 60: gitpod.v1.WorkspaceService.StartWorkspace:input_type -> gitpod.v1.StartWorkspaceRequest + 39, // 61: gitpod.v1.WorkspaceService.UpdateWorkspace:input_type -> gitpod.v1.UpdateWorkspaceRequest + 41, // 62: gitpod.v1.WorkspaceService.ParseContextURL:input_type -> gitpod.v1.ParseContextURLRequest + 18, // 63: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:input_type -> gitpod.v1.GetWorkspaceDefaultImageRequest + 20, // 64: gitpod.v1.WorkspaceService.SendHeartBeat:input_type -> gitpod.v1.SendHeartBeatRequest + 22, // 65: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:input_type -> gitpod.v1.GetWorkspaceOwnerTokenRequest + 24, // 66: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:input_type -> gitpod.v1.GetWorkspaceEditorCredentialsRequest + 9, // 67: gitpod.v1.WorkspaceService.GetWorkspace:output_type -> gitpod.v1.GetWorkspaceResponse + 11, // 68: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:output_type -> gitpod.v1.WatchWorkspaceStatusResponse + 13, // 69: gitpod.v1.WorkspaceService.ListWorkspaces:output_type -> gitpod.v1.ListWorkspacesResponse + 15, // 70: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:output_type -> gitpod.v1.CreateAndStartWorkspaceResponse + 17, // 71: gitpod.v1.WorkspaceService.StartWorkspace:output_type -> gitpod.v1.StartWorkspaceResponse + 40, // 72: gitpod.v1.WorkspaceService.UpdateWorkspace:output_type -> gitpod.v1.UpdateWorkspaceResponse + 42, // 73: gitpod.v1.WorkspaceService.ParseContextURL:output_type -> gitpod.v1.ParseContextURLResponse + 19, // 74: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:output_type -> gitpod.v1.GetWorkspaceDefaultImageResponse + 21, // 75: gitpod.v1.WorkspaceService.SendHeartBeat:output_type -> gitpod.v1.SendHeartBeatResponse + 23, // 76: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:output_type -> gitpod.v1.GetWorkspaceOwnerTokenResponse + 25, // 77: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:output_type -> gitpod.v1.GetWorkspaceEditorCredentialsResponse + 67, // [67:78] is the sub-list for method output_type + 56, // [56:67] is the sub-list for method input_type + 56, // [56:56] is the sub-list for extension type_name + 56, // [56:56] is the sub-list for extension extendee + 0, // [0:56] is the sub-list for field type_name } func init() { file_gitpod_v1_workspace_proto_init() } @@ -2569,6 +4417,7 @@ func file_gitpod_v1_workspace_proto_init() { return } file_gitpod_v1_editor_proto_init() + file_gitpod_v1_envvar_proto_init() file_gitpod_v1_pagination_proto_init() if !protoimpl.UnsafeEnabled { file_gitpod_v1_workspace_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { @@ -2800,7 +4649,7 @@ func file_gitpod_v1_workspace_proto_init() { } } file_gitpod_v1_workspace_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkspaceStatus); i { + switch v := v.(*WorkspaceMetadata); i { case 0: return &v.state case 1: @@ -2812,7 +4661,7 @@ func file_gitpod_v1_workspace_proto_init() { } } file_gitpod_v1_workspace_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkspaceConditions); i { + switch v := v.(*WorkspaceSpec); i { case 0: return &v.state case 1: @@ -2824,7 +4673,7 @@ func file_gitpod_v1_workspace_proto_init() { } } file_gitpod_v1_workspace_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkspacePort); i { + switch v := v.(*WorkspaceStatus); i { case 0: return &v.state case 1: @@ -2836,7 +4685,7 @@ func file_gitpod_v1_workspace_proto_init() { } } file_gitpod_v1_workspace_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkspaceGitStatus); i { + switch v := v.(*WorkspacePort); i { case 0: return &v.state case 1: @@ -2848,7 +4697,7 @@ func file_gitpod_v1_workspace_proto_init() { } } file_gitpod_v1_workspace_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkspacePhase); i { + switch v := v.(*WorkspaceGitStatus); i { case 0: return &v.state case 1: @@ -2860,7 +4709,7 @@ func file_gitpod_v1_workspace_proto_init() { } } file_gitpod_v1_workspace_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkspaceEnvironmentVariable); i { + switch v := v.(*WorkspacePhase); i { case 0: return &v.state case 1: @@ -2872,7 +4721,247 @@ func file_gitpod_v1_workspace_proto_init() { } } file_gitpod_v1_workspace_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateAndStartWorkspaceRequest_Git); i { + switch v := v.(*WorkspaceInitializer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GitInitializer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SnapshotInitializer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PrebuildInitializer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileDownloadInitializer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GitStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateWorkspaceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateWorkspaceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ParseContextURLRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ParseContextURLResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateAndStartWorkspaceRequest_ContextURL); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkspaceSpec_Timeout); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkspaceSpec_GitSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkspaceStatus_WorkspaceConditions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkspaceStatus_PrebuildResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkspaceInitializer_Spec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GitInitializer_GitConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileDownloadInitializer_FileInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateWorkspaceRequest_UpdateWorkspaceMetadata); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateWorkspaceRequest_UpdateTimeout); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateWorkspaceRequest_UpdateWorkspaceSpec); i { case 0: return &v.state case 1: @@ -2885,16 +4974,26 @@ func file_gitpod_v1_workspace_proto_init() { } } file_gitpod_v1_workspace_proto_msgTypes[6].OneofWrappers = []interface{}{ - (*CreateAndStartWorkspaceRequest_Git_)(nil), (*CreateAndStartWorkspaceRequest_ContextUrl)(nil), - } + (*CreateAndStartWorkspaceRequest_Spec)(nil), + } + file_gitpod_v1_workspace_proto_msgTypes[31].OneofWrappers = []interface{}{} + file_gitpod_v1_workspace_proto_msgTypes[41].OneofWrappers = []interface{}{ + (*WorkspaceInitializer_Spec_Git)(nil), + (*WorkspaceInitializer_Spec_Snapshot)(nil), + (*WorkspaceInitializer_Spec_Prebuild)(nil), + (*WorkspaceInitializer_Spec_Download)(nil), + } + file_gitpod_v1_workspace_proto_msgTypes[45].OneofWrappers = []interface{}{} + file_gitpod_v1_workspace_proto_msgTypes[46].OneofWrappers = []interface{}{} + file_gitpod_v1_workspace_proto_msgTypes[47].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gitpod_v1_workspace_proto_rawDesc, - NumEnums: 5, - NumMessages: 26, + NumEnums: 8, + NumMessages: 48, NumExtensions: 0, NumServices: 1, }, diff --git a/components/public-api/go/v1/workspace_grpc.pb.go b/components/public-api/go/v1/workspace_grpc.pb.go index 36b61d48cb5fdb..c4133ffe27fff2 100644 --- a/components/public-api/go/v1/workspace_grpc.pb.go +++ b/components/public-api/go/v1/workspace_grpc.pb.go @@ -42,6 +42,11 @@ type WorkspaceServiceClient interface { // StartWorkspace starts an existing workspace. // If the specified workspace is not in stopped phase, this will return the workspace as is. StartWorkspace(ctx context.Context, in *StartWorkspaceRequest, opts ...grpc.CallOption) (*StartWorkspaceResponse, error) + // UpdateWorkspace updates the workspace. + UpdateWorkspace(ctx context.Context, in *UpdateWorkspaceRequest, opts ...grpc.CallOption) (*UpdateWorkspaceResponse, error) + // ParseContextURL parses a context URL and returns the workspace metadata and spec. + // Not implemented yet. + ParseContextURL(ctx context.Context, in *ParseContextURLRequest, opts ...grpc.CallOption) (*ParseContextURLResponse, error) // GetWorkspaceDefaultImage returns the default workspace image of specified // workspace. GetWorkspaceDefaultImage(ctx context.Context, in *GetWorkspaceDefaultImageRequest, opts ...grpc.CallOption) (*GetWorkspaceDefaultImageResponse, error) @@ -130,6 +135,24 @@ func (c *workspaceServiceClient) StartWorkspace(ctx context.Context, in *StartWo return out, nil } +func (c *workspaceServiceClient) UpdateWorkspace(ctx context.Context, in *UpdateWorkspaceRequest, opts ...grpc.CallOption) (*UpdateWorkspaceResponse, error) { + out := new(UpdateWorkspaceResponse) + err := c.cc.Invoke(ctx, "/gitpod.v1.WorkspaceService/UpdateWorkspace", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *workspaceServiceClient) ParseContextURL(ctx context.Context, in *ParseContextURLRequest, opts ...grpc.CallOption) (*ParseContextURLResponse, error) { + out := new(ParseContextURLResponse) + err := c.cc.Invoke(ctx, "/gitpod.v1.WorkspaceService/ParseContextURL", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *workspaceServiceClient) GetWorkspaceDefaultImage(ctx context.Context, in *GetWorkspaceDefaultImageRequest, opts ...grpc.CallOption) (*GetWorkspaceDefaultImageResponse, error) { out := new(GetWorkspaceDefaultImageResponse) err := c.cc.Invoke(ctx, "/gitpod.v1.WorkspaceService/GetWorkspaceDefaultImage", in, out, opts...) @@ -186,6 +209,11 @@ type WorkspaceServiceServer interface { // StartWorkspace starts an existing workspace. // If the specified workspace is not in stopped phase, this will return the workspace as is. StartWorkspace(context.Context, *StartWorkspaceRequest) (*StartWorkspaceResponse, error) + // UpdateWorkspace updates the workspace. + UpdateWorkspace(context.Context, *UpdateWorkspaceRequest) (*UpdateWorkspaceResponse, error) + // ParseContextURL parses a context URL and returns the workspace metadata and spec. + // Not implemented yet. + ParseContextURL(context.Context, *ParseContextURLRequest) (*ParseContextURLResponse, error) // GetWorkspaceDefaultImage returns the default workspace image of specified // workspace. GetWorkspaceDefaultImage(context.Context, *GetWorkspaceDefaultImageRequest) (*GetWorkspaceDefaultImageResponse, error) @@ -218,6 +246,12 @@ func (UnimplementedWorkspaceServiceServer) CreateAndStartWorkspace(context.Conte func (UnimplementedWorkspaceServiceServer) StartWorkspace(context.Context, *StartWorkspaceRequest) (*StartWorkspaceResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StartWorkspace not implemented") } +func (UnimplementedWorkspaceServiceServer) UpdateWorkspace(context.Context, *UpdateWorkspaceRequest) (*UpdateWorkspaceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateWorkspace not implemented") +} +func (UnimplementedWorkspaceServiceServer) ParseContextURL(context.Context, *ParseContextURLRequest) (*ParseContextURLResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ParseContextURL not implemented") +} func (UnimplementedWorkspaceServiceServer) GetWorkspaceDefaultImage(context.Context, *GetWorkspaceDefaultImageRequest) (*GetWorkspaceDefaultImageResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetWorkspaceDefaultImage not implemented") } @@ -336,6 +370,42 @@ func _WorkspaceService_StartWorkspace_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } +func _WorkspaceService_UpdateWorkspace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateWorkspaceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WorkspaceServiceServer).UpdateWorkspace(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gitpod.v1.WorkspaceService/UpdateWorkspace", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WorkspaceServiceServer).UpdateWorkspace(ctx, req.(*UpdateWorkspaceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WorkspaceService_ParseContextURL_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ParseContextURLRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WorkspaceServiceServer).ParseContextURL(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gitpod.v1.WorkspaceService/ParseContextURL", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WorkspaceServiceServer).ParseContextURL(ctx, req.(*ParseContextURLRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _WorkspaceService_GetWorkspaceDefaultImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetWorkspaceDefaultImageRequest) if err := dec(in); err != nil { @@ -431,6 +501,14 @@ var WorkspaceService_ServiceDesc = grpc.ServiceDesc{ MethodName: "StartWorkspace", Handler: _WorkspaceService_StartWorkspace_Handler, }, + { + MethodName: "UpdateWorkspace", + Handler: _WorkspaceService_UpdateWorkspace_Handler, + }, + { + MethodName: "ParseContextURL", + Handler: _WorkspaceService_ParseContextURL_Handler, + }, { MethodName: "GetWorkspaceDefaultImage", Handler: _WorkspaceService_GetWorkspaceDefaultImage_Handler, diff --git a/components/public-api/typescript/src/gitpod/v1/envvar_pb.ts b/components/public-api/typescript/src/gitpod/v1/envvar_pb.ts index 6d8e2fe0b3de14..38b80a17e0d784 100644 --- a/components/public-api/typescript/src/gitpod/v1/envvar_pb.ts +++ b/components/public-api/typescript/src/gitpod/v1/envvar_pb.ts @@ -861,9 +861,9 @@ export class ResolveWorkspaceEnvironmentVariablesRequest extends Message { /** - * @generated from field: repeated gitpod.v1.ResolveWorkspaceEnvironmentVariablesResponse.EnvironmentVariable environment_variables = 1; + * @generated from field: repeated gitpod.v1.EnvironmentVariable environment_variables = 1; */ - environmentVariables: ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable[] = []; + environmentVariables: EnvironmentVariable[] = []; constructor(data?: PartialMessage) { super(); @@ -873,7 +873,7 @@ export class ResolveWorkspaceEnvironmentVariablesResponse extends Message [ - { no: 1, name: "environment_variables", kind: "message", T: ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable, repeated: true }, + { no: 1, name: "environment_variables", kind: "message", T: EnvironmentVariable, repeated: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): ResolveWorkspaceEnvironmentVariablesResponse { @@ -894,9 +894,9 @@ export class ResolveWorkspaceEnvironmentVariablesResponse extends Message { +export class EnvironmentVariable extends Message { /** * @generated from field: string name = 1; */ @@ -907,31 +907,31 @@ export class ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable ex */ value = ""; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "gitpod.v1.ResolveWorkspaceEnvironmentVariablesResponse.EnvironmentVariable"; + static readonly typeName = "gitpod.v1.EnvironmentVariable"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 2, name: "value", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable { - return new ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): EnvironmentVariable { + return new EnvironmentVariable().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable { - return new ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): EnvironmentVariable { + return new EnvironmentVariable().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable { - return new ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): EnvironmentVariable { + return new EnvironmentVariable().fromJsonString(jsonString, options); } - static equals(a: ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable | PlainMessage | undefined, b: ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable | PlainMessage | undefined): boolean { - return proto3.util.equals(ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable, a, b); + static equals(a: EnvironmentVariable | PlainMessage | undefined, b: EnvironmentVariable | PlainMessage | undefined): boolean { + return proto3.util.equals(EnvironmentVariable, a, b); } } diff --git a/components/public-api/typescript/src/gitpod/v1/workspace_connect.ts b/components/public-api/typescript/src/gitpod/v1/workspace_connect.ts index fcec3dc6ac50cc..b89cb5dc9fb176 100644 --- a/components/public-api/typescript/src/gitpod/v1/workspace_connect.ts +++ b/components/public-api/typescript/src/gitpod/v1/workspace_connect.ts @@ -9,7 +9,7 @@ /* eslint-disable */ // @ts-nocheck -import { CreateAndStartWorkspaceRequest, CreateAndStartWorkspaceResponse, GetWorkspaceDefaultImageRequest, GetWorkspaceDefaultImageResponse, GetWorkspaceEditorCredentialsRequest, GetWorkspaceEditorCredentialsResponse, GetWorkspaceOwnerTokenRequest, GetWorkspaceOwnerTokenResponse, GetWorkspaceRequest, GetWorkspaceResponse, ListWorkspacesRequest, ListWorkspacesResponse, SendHeartBeatRequest, SendHeartBeatResponse, StartWorkspaceRequest, StartWorkspaceResponse, WatchWorkspaceStatusRequest, WatchWorkspaceStatusResponse } from "./workspace_pb.js"; +import { CreateAndStartWorkspaceRequest, CreateAndStartWorkspaceResponse, GetWorkspaceDefaultImageRequest, GetWorkspaceDefaultImageResponse, GetWorkspaceEditorCredentialsRequest, GetWorkspaceEditorCredentialsResponse, GetWorkspaceOwnerTokenRequest, GetWorkspaceOwnerTokenResponse, GetWorkspaceRequest, GetWorkspaceResponse, ListWorkspacesRequest, ListWorkspacesResponse, ParseContextURLRequest, ParseContextURLResponse, SendHeartBeatRequest, SendHeartBeatResponse, StartWorkspaceRequest, StartWorkspaceResponse, UpdateWorkspaceRequest, UpdateWorkspaceResponse, WatchWorkspaceStatusRequest, WatchWorkspaceStatusResponse } from "./workspace_pb.js"; import { MethodKind } from "@bufbuild/protobuf"; /** @@ -79,6 +79,29 @@ export const WorkspaceService = { O: StartWorkspaceResponse, kind: MethodKind.Unary, }, + /** + * UpdateWorkspace updates the workspace. + * + * @generated from rpc gitpod.v1.WorkspaceService.UpdateWorkspace + */ + updateWorkspace: { + name: "UpdateWorkspace", + I: UpdateWorkspaceRequest, + O: UpdateWorkspaceResponse, + kind: MethodKind.Unary, + }, + /** + * ParseContextURL parses a context URL and returns the workspace metadata and spec. + * Not implemented yet. + * + * @generated from rpc gitpod.v1.WorkspaceService.ParseContextURL + */ + parseContextURL: { + name: "ParseContextURL", + I: ParseContextURLRequest, + O: ParseContextURLResponse, + kind: MethodKind.Unary, + }, /** * GetWorkspaceDefaultImage returns the default workspace image of specified * workspace. diff --git a/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts b/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts index 66f8481801ad41..1e47b834994d23 100644 --- a/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts +++ b/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts @@ -10,9 +10,10 @@ // @ts-nocheck import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; -import { Message, proto3, protoInt64, Timestamp } from "@bufbuild/protobuf"; +import { Duration, Message, proto3, protoInt64, Timestamp } from "@bufbuild/protobuf"; import { PaginationRequest, PaginationResponse } from "./pagination_pb.js"; import { EditorReference } from "./editor_pb.js"; +import { EnvironmentVariable } from "./envvar_pb.js"; /** * Admission level describes who can access a workspace instance and its ports. @@ -284,18 +285,18 @@ export class ListWorkspacesRequest extends Message { */ export class ListWorkspacesResponse extends Message { /** - * workspaces are the workspaces that matched the query + * pagination contains the pagination options for listing workspaces * - * @generated from field: repeated gitpod.v1.Workspace workspaces = 1; + * @generated from field: gitpod.v1.PaginationResponse pagination = 1; */ - workspaces: Workspace[] = []; + pagination?: PaginationResponse; /** - * pagination contains the pagination options for listing workspaces + * workspaces are the workspaces that matched the query * - * @generated from field: gitpod.v1.PaginationResponse pagination = 2; + * @generated from field: repeated gitpod.v1.Workspace workspaces = 2; */ - pagination?: PaginationResponse; + workspaces: Workspace[] = []; constructor(data?: PartialMessage) { super(); @@ -305,8 +306,8 @@ export class ListWorkspacesResponse extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "gitpod.v1.ListWorkspacesResponse"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "workspaces", kind: "message", T: Workspace, repeated: true }, - { no: 2, name: "pagination", kind: "message", T: PaginationResponse }, + { no: 1, name: "pagination", kind: "message", T: PaginationResponse }, + { no: 2, name: "workspaces", kind: "message", T: Workspace, repeated: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): ListWorkspacesResponse { @@ -327,95 +328,55 @@ export class ListWorkspacesResponse extends Message { } /** + * Required fields: + * - metadata.organization_id + * - metadata.configuration_id + * * @generated from message gitpod.v1.CreateAndStartWorkspaceRequest */ export class CreateAndStartWorkspaceRequest extends Message { /** - * organization_id is the ID of the organization to create the workspace - * - * +required - * - * @generated from field: string organization_id = 1; - */ - organizationId = ""; - - /** - * configuration_id is the ID of the configuration to use + * metadata is data associated with this workspace that's required for other parts of Gitpod to function * - * @generated from field: string configuration_id = 2; + * @generated from field: gitpod.v1.WorkspaceMetadata metadata = 2; */ - configurationId = ""; + metadata?: WorkspaceMetadata; /** - * source describes the source refer of workspace. - * - * +required - * * @generated from oneof gitpod.v1.CreateAndStartWorkspaceRequest.source */ source: { /** - * git describes the source refer of workspace - * Obtain available git using the ContextService.ParseContext operation if - * not sure about it. + * context_url is the URL from which the workspace is created * - * @generated from field: gitpod.v1.CreateAndStartWorkspaceRequest.Git git = 3; + * @generated from field: gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL context_url = 3; */ - value: CreateAndStartWorkspaceRequest_Git; - case: "git"; + value: CreateAndStartWorkspaceRequest_ContextURL; + case: "contextUrl"; } | { /** - * context_url is for backward compatiblity with the current dashboard, use - * ContextService.ParseContext get get a Git source instead + * spec is the configuration of the workspace that's required for the to start the workspace * - * @generated from field: string context_url = 4 [deprecated = true]; - * @deprecated + * @generated from field: gitpod.v1.WorkspaceSpec spec = 4; */ - value: string; - case: "contextUrl"; + value: WorkspaceSpec; + case: "spec"; } | { case: undefined; value?: undefined } = { case: undefined }; /** - * additional_env_variables provide additional environment variables to the - * workspace. - * It will take precedence over environment variables provided by - * the user and the configuration + * editor specifies the editor that will be used with this workspace. * - * @generated from field: repeated gitpod.v1.WorkspaceEnvironmentVariable additional_env_variables = 5; - */ - additionalEnvVariables: WorkspaceEnvironmentVariable[] = []; - - /** - * @generated from field: string region = 6; - */ - region = ""; - - /** - * @generated from field: string workspace_class = 7; - */ - workspaceClass = ""; - - /** - * @generated from field: gitpod.v1.EditorReference editor = 8; + * @generated from field: gitpod.v1.EditorReference editor = 5; */ editor?: EditorReference; - /** - * @generated from field: string name = 9; - */ - name = ""; - - /** - * @generated from field: bool pinned = 10; - */ - pinned = false; - /** * force_default_config indicates that the workspace should be created with * the default configuration instead of the configuration provided in * `.gitpod.yml` file * - * @generated from field: bool force_default_config = 11; + * @generated from field: bool force_default_config = 7 [deprecated = true]; + * @deprecated */ forceDefaultConfig = false; @@ -427,17 +388,11 @@ export class CreateAndStartWorkspaceRequest extends Message [ - { no: 1, name: "organization_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "configuration_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 3, name: "git", kind: "message", T: CreateAndStartWorkspaceRequest_Git, oneof: "source" }, - { no: 4, name: "context_url", kind: "scalar", T: 9 /* ScalarType.STRING */, oneof: "source" }, - { no: 5, name: "additional_env_variables", kind: "message", T: WorkspaceEnvironmentVariable, repeated: true }, - { no: 6, name: "region", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 7, name: "workspace_class", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 8, name: "editor", kind: "message", T: EditorReference }, - { no: 9, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 10, name: "pinned", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, - { no: 11, name: "force_default_config", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 2, name: "metadata", kind: "message", T: WorkspaceMetadata }, + { no: 3, name: "context_url", kind: "message", T: CreateAndStartWorkspaceRequest_ContextURL, oneof: "source" }, + { no: 4, name: "spec", kind: "message", T: WorkspaceSpec, oneof: "source" }, + { no: 5, name: "editor", kind: "message", T: EditorReference }, + { no: 7, name: "force_default_config", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): CreateAndStartWorkspaceRequest { @@ -458,59 +413,49 @@ export class CreateAndStartWorkspaceRequest extends Message { - /** - * clone_url is the URL of the repository to clone - * - * @generated from field: string clone_url = 1; - */ - cloneUrl = ""; - +export class CreateAndStartWorkspaceRequest_ContextURL extends Message { /** - * ref is an alternatively symbolic. e.g. refs/tags/v1.0, - * empty string means the default branch of the repository + * url is the URL from which the workspace is created * - * @generated from field: string ref = 2; + * @generated from field: string url = 1; */ - ref = ""; + url = ""; /** - * create_local_branch is the branch you want to create based on provided - * clone_url and ref when workspace started + * workspace_class is the class of the workspace we ought to start * - * @generated from field: string create_local_branch = 3; + * @generated from field: string workspace_class = 2; */ - createLocalBranch = ""; + workspaceClass = ""; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "gitpod.v1.CreateAndStartWorkspaceRequest.Git"; + static readonly typeName = "gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "clone_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "ref", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 3, name: "create_local_branch", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 1, name: "url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "workspace_class", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): CreateAndStartWorkspaceRequest_Git { - return new CreateAndStartWorkspaceRequest_Git().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): CreateAndStartWorkspaceRequest_ContextURL { + return new CreateAndStartWorkspaceRequest_ContextURL().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): CreateAndStartWorkspaceRequest_Git { - return new CreateAndStartWorkspaceRequest_Git().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): CreateAndStartWorkspaceRequest_ContextURL { + return new CreateAndStartWorkspaceRequest_ContextURL().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): CreateAndStartWorkspaceRequest_Git { - return new CreateAndStartWorkspaceRequest_Git().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): CreateAndStartWorkspaceRequest_ContextURL { + return new CreateAndStartWorkspaceRequest_ContextURL().fromJsonString(jsonString, options); } - static equals(a: CreateAndStartWorkspaceRequest_Git | PlainMessage | undefined, b: CreateAndStartWorkspaceRequest_Git | PlainMessage | undefined): boolean { - return proto3.util.equals(CreateAndStartWorkspaceRequest_Git, a, b); + static equals(a: CreateAndStartWorkspaceRequest_ContextURL | PlainMessage | undefined, b: CreateAndStartWorkspaceRequest_ContextURL | PlainMessage | undefined): boolean { + return proto3.util.equals(CreateAndStartWorkspaceRequest_ContextURL, a, b); } } @@ -565,7 +510,8 @@ export class StartWorkspaceRequest extends Message { workspaceId = ""; /** - * @generated from field: bool force_default_config = 2; + * @generated from field: bool force_default_config = 2 [deprecated = true]; + * @deprecated */ forceDefaultConfig = false; @@ -979,419 +925,765 @@ export class GetWorkspaceEditorCredentialsResponse extends Message { /** + * ID is a unique identifier of this workspace. No other workspace with the same name must be managed by this workspace manager + * * @generated from field: string id = 1; */ id = ""; /** - * prebuild indicates it is a prebuild - * TODO(ak) model prebuilds as a separate resource + * Metadata is data associated with this workspace that's required for other parts of Gitpod to function * - * @generated from field: bool prebuild = 2; + * @generated from field: gitpod.v1.WorkspaceMetadata metadata = 2; */ - prebuild = false; + metadata?: WorkspaceMetadata; /** - * @generated from field: string organization_id = 3; + * Spec is the configuration of the workspace that's required for the ws-manager to start the workspace + * + * @generated from field: gitpod.v1.WorkspaceSpec spec = 3; */ - organizationId = ""; + spec?: WorkspaceSpec; /** - * @generated from field: string name = 4; + * Status is the current status of the workspace + * + * @generated from field: gitpod.v1.WorkspaceStatus status = 4; */ - name = ""; + status?: WorkspaceStatus; - /** - * @generated from field: bool pinned = 5; - */ - pinned = false; + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.Workspace"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "metadata", kind: "message", T: WorkspaceMetadata }, + { no: 3, name: "spec", kind: "message", T: WorkspaceSpec }, + { no: 4, name: "status", kind: "message", T: WorkspaceStatus }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): Workspace { + return new Workspace().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): Workspace { + return new Workspace().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): Workspace { + return new Workspace().fromJsonString(jsonString, options); + } + + static equals(a: Workspace | PlainMessage | undefined, b: Workspace | PlainMessage | undefined): boolean { + return proto3.util.equals(Workspace, a, b); + } +} +/** + * WorkspaceMetadata is data associated with a workspace that's required for other parts of the system to function + * + * @generated from message gitpod.v1.WorkspaceMetadata + */ +export class WorkspaceMetadata extends Message { /** - * @generated from field: gitpod.v1.WorkspaceStatus status = 6; + * organization_id is the ID of the organization that contains the workspace + * + * @generated from field: string owner_id = 1; */ - status?: WorkspaceStatus; + ownerId = ""; /** - * additional_environment_variables provide additional environment variables - * which take precedence over environment variables provided by the project - * and user. + * owner is the ID of the Gitpod user to whom we'll bill this workspace and who we consider responsible for its content * - * +optional - * - * @generated from field: repeated gitpod.v1.WorkspaceEnvironmentVariable additional_environment_variables = 7; + * @generated from field: string organization_id = 2; */ - additionalEnvironmentVariables: WorkspaceEnvironmentVariable[] = []; + organizationId = ""; /** - * region specifies the region in which the workspace will be created. - * Obtain available regions using the ListRegions operation. - * - * +optional defaults to the user's default region + * configuration_id is the ID of the configuration used by this workspace * - * @generated from field: string region = 8; + * @generated from field: string configuration_id = 3; */ - region = ""; + configurationId = ""; /** - * workspace_class specifies the workspace class with which to create the - * workspace. Obtain available workspace classes using the ListWorkspaceClass - * operation. - * - * +optional defaults to the class configured on the project or the cluster's - * default class. + * Annotations are key/value pairs that gets attached to the workspace. + * +internal - not yet implemented * - * @generated from field: string workspace_class = 9; + * @generated from field: map annotations = 4; */ - workspaceClass = ""; + annotations: { [key: string]: string } = {}; /** - * editor specifies the editor that will be used with this workspace. - * Obtain available editors using the EditorService.ListEditors operation. + * name is the name of the workspace as specified by the user * - * +optional defaults to the default editor of the user - * - * @generated from field: gitpod.v1.EditorReference editor = 10; + * @generated from field: string name = 5; */ - editor?: EditorReference; + name = ""; /** - * context_url is the normalized URL from which the workspace was created - * TODO(ak) replace with resolveContextURL API + * pinned indicates whether the workspace is pinned * - * @generated from field: string context_url = 11; + * @generated from field: bool pinned = 6; */ - contextUrl = ""; + pinned = false; /** - * Prebuild ID is the unique identifier of the prebuild - * from which this workspace was created - * +optional if empty then this workspace was not created from a prebuild + * original_context_url is the normalized URL from which the workspace was created * - * @generated from field: string prebuild_id = 12; + * @generated from field: string original_context_url = 7; */ - prebuildId = ""; + originalContextUrl = ""; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "gitpod.v1.Workspace"; + static readonly typeName = "gitpod.v1.WorkspaceMetadata"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "prebuild", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, - { no: 3, name: "organization_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 4, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 5, name: "pinned", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, - { no: 6, name: "status", kind: "message", T: WorkspaceStatus }, - { no: 7, name: "additional_environment_variables", kind: "message", T: WorkspaceEnvironmentVariable, repeated: true }, - { no: 8, name: "region", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 9, name: "workspace_class", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 10, name: "editor", kind: "message", T: EditorReference }, - { no: 11, name: "context_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 12, name: "prebuild_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 1, name: "owner_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "organization_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "configuration_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "annotations", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "scalar", T: 9 /* ScalarType.STRING */} }, + { no: 5, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 6, name: "pinned", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 7, name: "original_context_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): Workspace { - return new Workspace().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceMetadata { + return new WorkspaceMetadata().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): Workspace { - return new Workspace().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceMetadata { + return new WorkspaceMetadata().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): Workspace { - return new Workspace().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): WorkspaceMetadata { + return new WorkspaceMetadata().fromJsonString(jsonString, options); } - static equals(a: Workspace | PlainMessage | undefined, b: Workspace | PlainMessage | undefined): boolean { - return proto3.util.equals(Workspace, a, b); + static equals(a: WorkspaceMetadata | PlainMessage | undefined, b: WorkspaceMetadata | PlainMessage | undefined): boolean { + return proto3.util.equals(WorkspaceMetadata, a, b); } } /** - * @generated from message gitpod.v1.WorkspaceStatus + * WorkspaceSpec specifies the configuration of a workspace for a workspace start + * + * @generated from message gitpod.v1.WorkspaceSpec */ -export class WorkspaceStatus extends Message { +export class WorkspaceSpec extends Message { /** - * Phase is a simple, high-level summary of where the workspace is in its - * lifecycle. The phase is not intended to be a comprehensive rollup of - * observations of the workspace state, nor is it intended to be a - * comprehensive state machine. + * initializer configures how the workspace is to be initialized * - * @generated from field: gitpod.v1.WorkspacePhase phase = 1; + * @generated from field: gitpod.v1.WorkspaceInitializer initializer = 1; */ - phase?: WorkspacePhase; + initializer?: WorkspaceInitializer; /** - * message is an optional human-readable message detailing the current phase + * Type denots the kind of workspace we ought to start * - * @generated from field: string message = 2; + * @generated from field: gitpod.v1.WorkspaceSpec.WorkspaceType type = 2; */ - message = ""; + type = WorkspaceSpec_WorkspaceType.UNSPECIFIED; /** - * workspace_url is the URL of the workspace. Only present when the phase is - * running. + * ports is the set of ports which ought to be exposed to the internet * - * @generated from field: string workspace_url = 3; + * @generated from field: repeated gitpod.v1.WorkspacePort ports = 3; */ - workspaceUrl = ""; + ports: WorkspacePort[] = []; /** - * git_status details the Git working copy status of the workspace. - * Note: this is a best-effort field and more often than not will not be - * present. Its absence does not indicate the absence of a working copy. + * envvars are user-defined environment variables which ought to be available in the workspace (shim'ed environment) * - * @generated from field: gitpod.v1.WorkspaceGitStatus git_status = 4; + * @generated from field: repeated gitpod.v1.EnvironmentVariable environment_variables = 4; */ - gitStatus?: WorkspaceGitStatus; + environmentVariables: EnvironmentVariable[] = []; /** - * ports lists the network ports currently available/known of this workspace + * Git configures the Git user in the workspace * - * @generated from field: repeated gitpod.v1.WorkspacePort ports = 5; + * @generated from field: gitpod.v1.WorkspaceSpec.GitSpec git = 5; */ - ports: WorkspacePort[] = []; + git?: WorkspaceSpec_GitSpec; + + /** + * Timeout configures the workspace timeout + * + * @generated from field: gitpod.v1.WorkspaceSpec.Timeout timeout = 6; + */ + timeout?: WorkspaceSpec_Timeout; /** - * Admission describes who can access a workspace instance and its ports. + * admission controlls who can access the workspace and its ports. * - * @generated from field: gitpod.v1.AdmissionLevel admission = 6; + * @generated from field: gitpod.v1.AdmissionLevel admission = 7; */ admission = AdmissionLevel.UNSPECIFIED; /** - * Instance ID is the unique identifier of the workspace instance + * Class denotes the class of the workspace we ought to start * - * @generated from field: string instance_id = 7; + * @generated from field: string class = 8; */ - instanceId = ""; + class = ""; /** - * Conditions contains observations of the workspace's current phase. + * ssh_public_keys is user's uploaded ssh public keys * - * @generated from field: gitpod.v1.WorkspaceConditions conditions = 8; + * @generated from field: repeated string ssh_public_keys = 9; */ - conditions?: WorkspaceConditions; + sshPublicKeys: string[] = []; - constructor(data?: PartialMessage) { + /** + * subassembly_references is a list of workspace IDs that this workspace depends on. + * For example: + * index.docker.io/gitpod-io/subassmeblies/code:latest + * + * @generated from field: repeated string subassembly_references = 10; + */ + subassemblyReferences: string[] = []; + + /** + * last_user_activity is the time when the user last interacted with the workspace + * + * @generated from field: google.protobuf.Timestamp last_user_activity = 11; + */ + lastUserActivity?: Timestamp; + + /** + * log_url is the URL where we stream the workspace's logs to. + * Can be changed when the workspace is PENDING or STOPPED. + * + * @generated from field: string log_url = 12; + */ + logUrl = ""; + + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "gitpod.v1.WorkspaceStatus"; + static readonly typeName = "gitpod.v1.WorkspaceSpec"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "phase", kind: "message", T: WorkspacePhase }, - { no: 2, name: "message", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 3, name: "workspace_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 4, name: "git_status", kind: "message", T: WorkspaceGitStatus }, - { no: 5, name: "ports", kind: "message", T: WorkspacePort, repeated: true }, - { no: 6, name: "admission", kind: "enum", T: proto3.getEnumType(AdmissionLevel) }, - { no: 7, name: "instance_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 8, name: "conditions", kind: "message", T: WorkspaceConditions }, + { no: 1, name: "initializer", kind: "message", T: WorkspaceInitializer }, + { no: 2, name: "type", kind: "enum", T: proto3.getEnumType(WorkspaceSpec_WorkspaceType) }, + { no: 3, name: "ports", kind: "message", T: WorkspacePort, repeated: true }, + { no: 4, name: "environment_variables", kind: "message", T: EnvironmentVariable, repeated: true }, + { no: 5, name: "git", kind: "message", T: WorkspaceSpec_GitSpec }, + { no: 6, name: "timeout", kind: "message", T: WorkspaceSpec_Timeout }, + { no: 7, name: "admission", kind: "enum", T: proto3.getEnumType(AdmissionLevel) }, + { no: 8, name: "class", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 9, name: "ssh_public_keys", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 10, name: "subassembly_references", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 11, name: "last_user_activity", kind: "message", T: Timestamp }, + { no: 12, name: "log_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceStatus { - return new WorkspaceStatus().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceSpec { + return new WorkspaceSpec().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceStatus { - return new WorkspaceStatus().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceSpec { + return new WorkspaceSpec().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): WorkspaceStatus { - return new WorkspaceStatus().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): WorkspaceSpec { + return new WorkspaceSpec().fromJsonString(jsonString, options); } - static equals(a: WorkspaceStatus | PlainMessage | undefined, b: WorkspaceStatus | PlainMessage | undefined): boolean { - return proto3.util.equals(WorkspaceStatus, a, b); + static equals(a: WorkspaceSpec | PlainMessage | undefined, b: WorkspaceSpec | PlainMessage | undefined): boolean { + return proto3.util.equals(WorkspaceSpec, a, b); } } /** - * @generated from message gitpod.v1.WorkspaceConditions + * WorkspaceType specifies the purpose/use of a workspace. Different workspace types are handled differently by all parts of the system. + * + * @generated from enum gitpod.v1.WorkspaceSpec.WorkspaceType */ -export class WorkspaceConditions extends Message { +export enum WorkspaceSpec_WorkspaceType { + /** + * @generated from enum value: WORKSPACE_TYPE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + /** - * failed contains technical details for the failure of the workspace. - * +optional If this field is empty, the workspace has not failed. + * Regular workspaces are your off-the-mill workspaces intended for users. They are directly user-facing and hence are most important. * - * @generated from field: string failed = 1; + * @generated from enum value: WORKSPACE_TYPE_REGULAR = 1; */ - failed = ""; + REGULAR = 1, /** - * timeout contains the reason the workspace has timed out. - * +optional If this field is empty, the workspace has not timed out. + * Prebuild workspaces are workspaces used to pre-build the content of other workspaces. They run headless and have no direct user-interaction. * - * @generated from field: string timeout = 2; + * @generated from enum value: WORKSPACE_TYPE_PREBUILD = 2; */ - timeout = ""; + PREBUILD = 2, +} +// Retrieve enum metadata with: proto3.getEnumType(WorkspaceSpec_WorkspaceType) +proto3.util.setEnumType(WorkspaceSpec_WorkspaceType, "gitpod.v1.WorkspaceSpec.WorkspaceType", [ + { no: 0, name: "WORKSPACE_TYPE_UNSPECIFIED" }, + { no: 1, name: "WORKSPACE_TYPE_REGULAR" }, + { no: 2, name: "WORKSPACE_TYPE_PREBUILD" }, +]); + +/** + * Timeout configures the workspace timeout + * + * @generated from message gitpod.v1.WorkspaceSpec.Timeout + */ +export class WorkspaceSpec_Timeout extends Message { + /** + * inacitivity is the maximum time of inactivity before the workspace is stopped or paused + * + * @generated from field: google.protobuf.Duration inactivity = 1; + */ + inactivity?: Duration; + + /** + * inacitivity is the maximum time of disconnection before the workspace is stopped or paused + * set to zero to disable. + * + * @generated from field: google.protobuf.Duration disconnected = 2; + */ + disconnected?: Duration; + + /** + * maximum lifetime of the workspace + * + * @generated from field: google.protobuf.Duration maximum_lifetime = 3; + */ + maximumLifetime?: Duration; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "gitpod.v1.WorkspaceConditions"; + static readonly typeName = "gitpod.v1.WorkspaceSpec.Timeout"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "failed", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "timeout", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 1, name: "inactivity", kind: "message", T: Duration }, + { no: 2, name: "disconnected", kind: "message", T: Duration }, + { no: 3, name: "maximum_lifetime", kind: "message", T: Duration }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceConditions { - return new WorkspaceConditions().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceSpec_Timeout { + return new WorkspaceSpec_Timeout().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceConditions { - return new WorkspaceConditions().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceSpec_Timeout { + return new WorkspaceSpec_Timeout().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): WorkspaceConditions { - return new WorkspaceConditions().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): WorkspaceSpec_Timeout { + return new WorkspaceSpec_Timeout().fromJsonString(jsonString, options); } - static equals(a: WorkspaceConditions | PlainMessage | undefined, b: WorkspaceConditions | PlainMessage | undefined): boolean { - return proto3.util.equals(WorkspaceConditions, a, b); + static equals(a: WorkspaceSpec_Timeout | PlainMessage | undefined, b: WorkspaceSpec_Timeout | PlainMessage | undefined): boolean { + return proto3.util.equals(WorkspaceSpec_Timeout, a, b); } } /** - * @generated from message gitpod.v1.WorkspacePort + * GitSpec configures the Git available within the workspace + * + * @generated from message gitpod.v1.WorkspaceSpec.GitSpec */ -export class WorkspacePort extends Message { - /** - * port number - * - * @generated from field: uint64 port = 1; - */ - port = protoInt64.zero; - - /** - * policy of this port - * - * @generated from field: gitpod.v1.WorkspacePort.Policy policy = 2; - */ - policy = WorkspacePort_Policy.UNSPECIFIED; - +export class WorkspaceSpec_GitSpec extends Message { /** - * url that can be used to access the port + * The Git username * - * @generated from field: string url = 3; + * @generated from field: string username = 1; */ - url = ""; + username = ""; /** - * backend protocol of this port + * The Git email address * - * @generated from field: gitpod.v1.WorkspacePort.Protocol protocol = 4; + * @generated from field: string email = 2; */ - protocol = WorkspacePort_Protocol.UNSPECIFIED; + email = ""; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "gitpod.v1.WorkspacePort"; + static readonly typeName = "gitpod.v1.WorkspaceSpec.GitSpec"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "port", kind: "scalar", T: 4 /* ScalarType.UINT64 */ }, - { no: 2, name: "policy", kind: "enum", T: proto3.getEnumType(WorkspacePort_Policy) }, - { no: 3, name: "url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 4, name: "protocol", kind: "enum", T: proto3.getEnumType(WorkspacePort_Protocol) }, + { no: 1, name: "username", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "email", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): WorkspacePort { - return new WorkspacePort().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceSpec_GitSpec { + return new WorkspaceSpec_GitSpec().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): WorkspacePort { - return new WorkspacePort().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceSpec_GitSpec { + return new WorkspaceSpec_GitSpec().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): WorkspacePort { - return new WorkspacePort().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): WorkspaceSpec_GitSpec { + return new WorkspaceSpec_GitSpec().fromJsonString(jsonString, options); } - static equals(a: WorkspacePort | PlainMessage | undefined, b: WorkspacePort | PlainMessage | undefined): boolean { - return proto3.util.equals(WorkspacePort, a, b); + static equals(a: WorkspaceSpec_GitSpec | PlainMessage | undefined, b: WorkspaceSpec_GitSpec | PlainMessage | undefined): boolean { + return proto3.util.equals(WorkspaceSpec_GitSpec, a, b); } } /** - * Policy defines the accssbility policy of a workspace port is guarded by an - * authentication in the proxy + * WorkspaceStatus describes a workspace status * - * @generated from enum gitpod.v1.WorkspacePort.Policy + * @generated from message gitpod.v1.WorkspaceStatus */ -export enum WorkspacePort_Policy { +export class WorkspaceStatus extends Message { /** - * @generated from enum value: POLICY_UNSPECIFIED = 0; + * version of the status update. Workspace instances themselves are unversioned, + * but their statuus has different versions. + * The value of this field has no semantic meaning (e.g. don't interpret it as + * as a timestemp), but it can be used to impose a partial order. + * If a.status_version < b.status_version then a was the status before b. + * + * @generated from field: uint64 status_version = 1; */ - UNSPECIFIED = 0, + statusVersion = protoInt64.zero; /** - * Private means the port is accessible by the workspace owner only using - * the workspace port URL + * the phase of a workspace is a simple, high-level summary of where the workspace is in its lifecycle * - * @generated from enum value: POLICY_PRIVATE = 1; + * @generated from field: gitpod.v1.WorkspacePhase phase = 2; */ - PRIVATE = 1, + phase?: WorkspacePhase; /** - * Public means the port is accessible by everybody using the workspace port - * URL + * workspace_url contains the URL at which the workspace can be accessed. + * This field is only set if the workspace is running. * - * @generated from enum value: POLICY_PUBLIC = 2; + * @generated from field: string workspace_url = 3; */ - PUBLIC = 2, -} -// Retrieve enum metadata with: proto3.getEnumType(WorkspacePort_Policy) -proto3.util.setEnumType(WorkspacePort_Policy, "gitpod.v1.WorkspacePort.Policy", [ - { no: 0, name: "POLICY_UNSPECIFIED" }, - { no: 1, name: "POLICY_PRIVATE" }, - { no: 2, name: "POLICY_PUBLIC" }, -]); + workspaceUrl = ""; -/** - * Protocol defines the backend protocol of port - * - * @generated from enum gitpod.v1.WorkspacePort.Protocol - */ -export enum WorkspacePort_Protocol { /** - * @generated from enum value: PROTOCOL_UNSPECIFIED = 0; + * conditions detail the current state of the workspace + * + * @generated from field: gitpod.v1.WorkspaceStatus.WorkspaceConditions conditions = 4; */ - UNSPECIFIED = 0, + conditions?: WorkspaceStatus_WorkspaceConditions; /** - * Http means the port backend is http + * prebuild_result contains the result of a prebuild. Only if the workspace is * - * @generated from enum value: PROTOCOL_HTTP = 1; + * @generated from field: gitpod.v1.WorkspaceStatus.PrebuildResult prebuild_result = 5; */ - HTTP = 1, + prebuildResult?: WorkspaceStatus_PrebuildResult; /** - * Https means the port backend is https + * git_status details the Git working copy status of the workspace. + * Note: this is a best-effort field and more often than not will not be present. Its absence does not + * indicate the absence of a working copy. * - * @generated from enum value: PROTOCOL_HTTPS = 2; + * @generated from field: gitpod.v1.WorkspaceGitStatus git_status = 6; */ - HTTPS = 2, -} -// Retrieve enum metadata with: proto3.getEnumType(WorkspacePort_Protocol) -proto3.util.setEnumType(WorkspacePort_Protocol, "gitpod.v1.WorkspacePort.Protocol", [ - { no: 0, name: "PROTOCOL_UNSPECIFIED" }, - { no: 1, name: "PROTOCOL_HTTP" }, - { no: 2, name: "PROTOCOL_HTTPS" }, -]); + gitStatus?: WorkspaceGitStatus; -/** - * @generated from message gitpod.v1.WorkspaceGitStatus + /** + * instance_id is the ID of the workspace instance - do not use, interpret or rely on this field + * unless you know what you're doing. + * + * @generated from field: string instance_id = 7 [deprecated = true]; + * @deprecated + */ + instanceId = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.WorkspaceStatus"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "status_version", kind: "scalar", T: 4 /* ScalarType.UINT64 */ }, + { no: 2, name: "phase", kind: "message", T: WorkspacePhase }, + { no: 3, name: "workspace_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "conditions", kind: "message", T: WorkspaceStatus_WorkspaceConditions }, + { no: 5, name: "prebuild_result", kind: "message", T: WorkspaceStatus_PrebuildResult }, + { no: 6, name: "git_status", kind: "message", T: WorkspaceGitStatus }, + { no: 7, name: "instance_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceStatus { + return new WorkspaceStatus().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceStatus { + return new WorkspaceStatus().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): WorkspaceStatus { + return new WorkspaceStatus().fromJsonString(jsonString, options); + } + + static equals(a: WorkspaceStatus | PlainMessage | undefined, b: WorkspaceStatus | PlainMessage | undefined): boolean { + return proto3.util.equals(WorkspaceStatus, a, b); + } +} + +/** + * WorkspaceCondition gives more detailed information as to the state of the workspace. Which condition actually + * has a value depends on the phase the workspace is in. + * + * @generated from message gitpod.v1.WorkspaceStatus.WorkspaceConditions + */ +export class WorkspaceStatus_WorkspaceConditions extends Message { + /** + * failed contains the reason the workspace failed to operate. If this field is empty, the workspace has not failed. + * + * @generated from field: string failed = 1; + */ + failed = ""; + + /** + * failed_reason contains the reason the workspace failed to operate. + * This field is only set if the workspace has failed. + * + * @generated from field: gitpod.v1.WorkspaceStatus.WorkspaceConditions.FailedReason failed_reason = 2; + */ + failedReason = WorkspaceStatus_WorkspaceConditions_FailedReason.UNSPECIFIED; + + /** + * timeout contains the reason the workspace has timed out. If this field is empty, the workspace has not timed out. + * + * @generated from field: string timeout = 3; + */ + timeout = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.WorkspaceStatus.WorkspaceConditions"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "failed", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "failed_reason", kind: "enum", T: proto3.getEnumType(WorkspaceStatus_WorkspaceConditions_FailedReason) }, + { no: 3, name: "timeout", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceStatus_WorkspaceConditions { + return new WorkspaceStatus_WorkspaceConditions().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceStatus_WorkspaceConditions { + return new WorkspaceStatus_WorkspaceConditions().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): WorkspaceStatus_WorkspaceConditions { + return new WorkspaceStatus_WorkspaceConditions().fromJsonString(jsonString, options); + } + + static equals(a: WorkspaceStatus_WorkspaceConditions | PlainMessage | undefined, b: WorkspaceStatus_WorkspaceConditions | PlainMessage | undefined): boolean { + return proto3.util.equals(WorkspaceStatus_WorkspaceConditions, a, b); + } +} + +/** + * @generated from enum gitpod.v1.WorkspaceStatus.WorkspaceConditions.FailedReason + */ +export enum WorkspaceStatus_WorkspaceConditions_FailedReason { + /** + * @generated from enum value: FAILED_REASON_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * @generated from enum value: FAILED_REASON_CONTENT_INITIALIZATION_FAILED = 1; + */ + CONTENT_INITIALIZATION_FAILED = 1, + + /** + * @generated from enum value: FAILED_REASON_BACKUP_FAILED = 2; + */ + BACKUP_FAILED = 2, + + /** + * @generated from enum value: FAILED_REASON_IMAGE_PULL_FAILURE = 3; + */ + IMAGE_PULL_FAILURE = 3, + + /** + * @generated from enum value: FAILED_REASON_UNEXPECTED_TERMINATION = 4; + */ + UNEXPECTED_TERMINATION = 4, +} +// Retrieve enum metadata with: proto3.getEnumType(WorkspaceStatus_WorkspaceConditions_FailedReason) +proto3.util.setEnumType(WorkspaceStatus_WorkspaceConditions_FailedReason, "gitpod.v1.WorkspaceStatus.WorkspaceConditions.FailedReason", [ + { no: 0, name: "FAILED_REASON_UNSPECIFIED" }, + { no: 1, name: "FAILED_REASON_CONTENT_INITIALIZATION_FAILED" }, + { no: 2, name: "FAILED_REASON_BACKUP_FAILED" }, + { no: 3, name: "FAILED_REASON_IMAGE_PULL_FAILURE" }, + { no: 4, name: "FAILED_REASON_UNEXPECTED_TERMINATION" }, +]); + +/** + * @generated from message gitpod.v1.WorkspaceStatus.PrebuildResult + */ +export class WorkspaceStatus_PrebuildResult extends Message { + /** + * Snapshot points to the content of the prebuild. This string is opaque to the cluster manager, + * and must be returned unaltered. + * + * @generated from field: string snapshot = 1; + */ + snapshot = ""; + + /** + * The prebuild's error message + * + * @generated from field: string error_message = 2; + */ + errorMessage = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.WorkspaceStatus.PrebuildResult"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "snapshot", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "error_message", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceStatus_PrebuildResult { + return new WorkspaceStatus_PrebuildResult().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceStatus_PrebuildResult { + return new WorkspaceStatus_PrebuildResult().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): WorkspaceStatus_PrebuildResult { + return new WorkspaceStatus_PrebuildResult().fromJsonString(jsonString, options); + } + + static equals(a: WorkspaceStatus_PrebuildResult | PlainMessage | undefined, b: WorkspaceStatus_PrebuildResult | PlainMessage | undefined): boolean { + return proto3.util.equals(WorkspaceStatus_PrebuildResult, a, b); + } +} + +/** + * @generated from message gitpod.v1.WorkspacePort + */ +export class WorkspacePort extends Message { + /** + * port number + * + * @generated from field: uint64 port = 1; + */ + port = protoInt64.zero; + + /** + * policy of this port + * + * @generated from field: gitpod.v1.AdmissionLevel admission = 2; + */ + admission = AdmissionLevel.UNSPECIFIED; + + /** + * url that can be used to access the port + * + * @generated from field: string url = 3; + */ + url = ""; + + /** + * backend protocol of this port + * + * @generated from field: gitpod.v1.WorkspacePort.Protocol protocol = 4; + */ + protocol = WorkspacePort_Protocol.UNSPECIFIED; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.WorkspacePort"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "port", kind: "scalar", T: 4 /* ScalarType.UINT64 */ }, + { no: 2, name: "admission", kind: "enum", T: proto3.getEnumType(AdmissionLevel) }, + { no: 3, name: "url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "protocol", kind: "enum", T: proto3.getEnumType(WorkspacePort_Protocol) }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): WorkspacePort { + return new WorkspacePort().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): WorkspacePort { + return new WorkspacePort().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): WorkspacePort { + return new WorkspacePort().fromJsonString(jsonString, options); + } + + static equals(a: WorkspacePort | PlainMessage | undefined, b: WorkspacePort | PlainMessage | undefined): boolean { + return proto3.util.equals(WorkspacePort, a, b); + } +} + +/** + * Protocol defines the backend protocol of port + * + * @generated from enum gitpod.v1.WorkspacePort.Protocol + */ +export enum WorkspacePort_Protocol { + /** + * @generated from enum value: PROTOCOL_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * Http means the port backend is http + * + * @generated from enum value: PROTOCOL_HTTP = 1; + */ + HTTP = 1, + + /** + * Https means the port backend is https + * + * @generated from enum value: PROTOCOL_HTTPS = 2; + */ + HTTPS = 2, +} +// Retrieve enum metadata with: proto3.getEnumType(WorkspacePort_Protocol) +proto3.util.setEnumType(WorkspacePort_Protocol, "gitpod.v1.WorkspacePort.Protocol", [ + { no: 0, name: "PROTOCOL_UNSPECIFIED" }, + { no: 1, name: "PROTOCOL_HTTP" }, + { no: 2, name: "PROTOCOL_HTTPS" }, +]); + +/** + * @generated from message gitpod.v1.WorkspaceGitStatus */ export class WorkspaceGitStatus extends Message { /** @@ -1615,20 +1907,28 @@ export enum WorkspacePhase_Phase { */ INTERRUPTED = 7, + /** + * Paused means the workspace is currently unavailable, akin to stopped, + * but faster to wake up. + * + * @generated from enum value: PHASE_PAUSED = 8; + */ + PAUSED = 8, + /** * Stopping means that the workspace is currently shutting down. It could go * to stopped every moment. * - * @generated from enum value: PHASE_STOPPING = 8; + * @generated from enum value: PHASE_STOPPING = 9; */ - STOPPING = 8, + STOPPING = 9, /** * Stopped means the workspace ended regularly because it was shut down. * - * @generated from enum value: PHASE_STOPPED = 9; + * @generated from enum value: PHASE_STOPPED = 10; */ - STOPPED = 9, + STOPPED = 10, } // Retrieve enum metadata with: proto3.getEnumType(WorkspacePhase_Phase) proto3.util.setEnumType(WorkspacePhase_Phase, "gitpod.v1.WorkspacePhase.Phase", [ @@ -1640,49 +1940,967 @@ proto3.util.setEnumType(WorkspacePhase_Phase, "gitpod.v1.WorkspacePhase.Phase", { no: 5, name: "PHASE_INITIALIZING" }, { no: 6, name: "PHASE_RUNNING" }, { no: 7, name: "PHASE_INTERRUPTED" }, - { no: 8, name: "PHASE_STOPPING" }, - { no: 9, name: "PHASE_STOPPED" }, + { no: 8, name: "PHASE_PAUSED" }, + { no: 9, name: "PHASE_STOPPING" }, + { no: 10, name: "PHASE_STOPPED" }, ]); /** - * @generated from message gitpod.v1.WorkspaceEnvironmentVariable + * WorkspaceInitializer specifies how a workspace is to be initialized + * + * @generated from message gitpod.v1.WorkspaceInitializer */ -export class WorkspaceEnvironmentVariable extends Message { +export class WorkspaceInitializer extends Message { /** - * @generated from field: string name = 1; + * @generated from field: repeated gitpod.v1.WorkspaceInitializer.Spec specs = 1; */ - name = ""; + specs: WorkspaceInitializer_Spec[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.WorkspaceInitializer"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "specs", kind: "message", T: WorkspaceInitializer_Spec, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceInitializer { + return new WorkspaceInitializer().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceInitializer { + return new WorkspaceInitializer().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): WorkspaceInitializer { + return new WorkspaceInitializer().fromJsonString(jsonString, options); + } + + static equals(a: WorkspaceInitializer | PlainMessage | undefined, b: WorkspaceInitializer | PlainMessage | undefined): boolean { + return proto3.util.equals(WorkspaceInitializer, a, b); + } +} + +/** + * @generated from message gitpod.v1.WorkspaceInitializer.Spec + */ +export class WorkspaceInitializer_Spec extends Message { + /** + * @generated from oneof gitpod.v1.WorkspaceInitializer.Spec.spec + */ + spec: { + /** + * @generated from field: gitpod.v1.GitInitializer git = 1; + */ + value: GitInitializer; + case: "git"; + } | { + /** + * @generated from field: gitpod.v1.SnapshotInitializer snapshot = 2; + */ + value: SnapshotInitializer; + case: "snapshot"; + } | { + /** + * @generated from field: gitpod.v1.PrebuildInitializer prebuild = 3; + */ + value: PrebuildInitializer; + case: "prebuild"; + } | { + /** + * @generated from field: gitpod.v1.FileDownloadInitializer download = 4; + */ + value: FileDownloadInitializer; + case: "download"; + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.WorkspaceInitializer.Spec"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "git", kind: "message", T: GitInitializer, oneof: "spec" }, + { no: 2, name: "snapshot", kind: "message", T: SnapshotInitializer, oneof: "spec" }, + { no: 3, name: "prebuild", kind: "message", T: PrebuildInitializer, oneof: "spec" }, + { no: 4, name: "download", kind: "message", T: FileDownloadInitializer, oneof: "spec" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceInitializer_Spec { + return new WorkspaceInitializer_Spec().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceInitializer_Spec { + return new WorkspaceInitializer_Spec().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): WorkspaceInitializer_Spec { + return new WorkspaceInitializer_Spec().fromJsonString(jsonString, options); + } + + static equals(a: WorkspaceInitializer_Spec | PlainMessage | undefined, b: WorkspaceInitializer_Spec | PlainMessage | undefined): boolean { + return proto3.util.equals(WorkspaceInitializer_Spec, a, b); + } +} + +/** + * @generated from message gitpod.v1.GitInitializer + */ +export class GitInitializer extends Message { + /** + * remote_uri is the Git remote origin + * + * @generated from field: string remote_uri = 1; + */ + remoteUri = ""; + + /** + * upstream_Remote_uri is the fork upstream of a repository + * + * @generated from field: string upstream_remote_uri = 2; + */ + upstreamRemoteUri = ""; + + /** + * the target mode determines what gets checked out + * + * @generated from field: gitpod.v1.GitInitializer.CloneTargetMode target_mode = 3; + */ + targetMode = GitInitializer_CloneTargetMode.UNSPECIFIED; + + /** + * the value for the clone target mode - use depends on the target mode + * + * @generated from field: string clone_taget = 4; + */ + cloneTaget = ""; + + /** + * a path relative to the workspace root in which the code will be checked out to + * + * @generated from field: string checkout_location = 5; + */ + checkoutLocation = ""; + + /** + * config specifies the Git configuration for this workspace + * + * @generated from field: gitpod.v1.GitInitializer.GitConfig config = 6; + */ + config?: GitInitializer_GitConfig; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.GitInitializer"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "remote_uri", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "upstream_remote_uri", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "target_mode", kind: "enum", T: proto3.getEnumType(GitInitializer_CloneTargetMode) }, + { no: 4, name: "clone_taget", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 5, name: "checkout_location", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 6, name: "config", kind: "message", T: GitInitializer_GitConfig }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GitInitializer { + return new GitInitializer().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GitInitializer { + return new GitInitializer().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GitInitializer { + return new GitInitializer().fromJsonString(jsonString, options); + } + + static equals(a: GitInitializer | PlainMessage | undefined, b: GitInitializer | PlainMessage | undefined): boolean { + return proto3.util.equals(GitInitializer, a, b); + } +} + +/** + * CloneTargetMode is the target state in which we want to leave a GitWorkspace + * + * @generated from enum gitpod.v1.GitInitializer.CloneTargetMode + */ +export enum GitInitializer_CloneTargetMode { + /** + * @generated from enum value: CLONE_TARGET_MODE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * REMOTE_HEAD has the local WS point at the remote branch head + * + * @generated from enum value: CLONE_TARGET_MODE_REMOTE_HEAD = 1; + */ + REMOTE_HEAD = 1, + + /** + * REMOTE_COMMIT has the local WS point at a specific commit + * + * @generated from enum value: CLONE_TARGET_MODE_REMOTE_COMMIT = 2; + */ + REMOTE_COMMIT = 2, + + /** + * REMOTE_BRANCH has the local WS point at a remote branch + * + * @generated from enum value: CLONE_TARGET_MODE_REMOTE_BRANCH = 3; + */ + REMOTE_BRANCH = 3, + + /** + * LOCAL_BRANCH creates a local branch in the workspace + * + * @generated from enum value: CLONE_TARGET_MODE_LOCAL_BRANCH = 4; + */ + LOCAL_BRANCH = 4, +} +// Retrieve enum metadata with: proto3.getEnumType(GitInitializer_CloneTargetMode) +proto3.util.setEnumType(GitInitializer_CloneTargetMode, "gitpod.v1.GitInitializer.CloneTargetMode", [ + { no: 0, name: "CLONE_TARGET_MODE_UNSPECIFIED" }, + { no: 1, name: "CLONE_TARGET_MODE_REMOTE_HEAD" }, + { no: 2, name: "CLONE_TARGET_MODE_REMOTE_COMMIT" }, + { no: 3, name: "CLONE_TARGET_MODE_REMOTE_BRANCH" }, + { no: 4, name: "CLONE_TARGET_MODE_LOCAL_BRANCH" }, +]); + +/** + * AuthMethod is the means of authentication used during clone + * + * @generated from enum gitpod.v1.GitInitializer.AuthMethod + */ +export enum GitInitializer_AuthMethod { + /** + * NO_AUTH disables authentication during clone + * + * @generated from enum value: AUTH_METHOD_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * BASIC_AUTH uses HTTP basic auth during clone (fails if repo is not cloned through http) + * + * @generated from enum value: AUTH_METHOD_BASIC_AUTH = 1; + */ + BASIC_AUTH = 1, + + /** + * BASIC_AUTH_OTS uses HTTP basic auth during the clone with the secrets coming from the OTS URL. + * Fails if either the OTS download or the clone fail. + * + * @generated from enum value: AUTH_METHOD_BASIC_AUTH_OTS = 2; + */ + BASIC_AUTH_OTS = 2, +} +// Retrieve enum metadata with: proto3.getEnumType(GitInitializer_AuthMethod) +proto3.util.setEnumType(GitInitializer_AuthMethod, "gitpod.v1.GitInitializer.AuthMethod", [ + { no: 0, name: "AUTH_METHOD_UNSPECIFIED" }, + { no: 1, name: "AUTH_METHOD_BASIC_AUTH" }, + { no: 2, name: "AUTH_METHOD_BASIC_AUTH_OTS" }, +]); + +/** + * @generated from message gitpod.v1.GitInitializer.GitConfig + */ +export class GitInitializer_GitConfig extends Message { + /** + * custom config values to be set on clone provided through `.gitpod.yml` + * + * @generated from field: map custom_config = 1; + */ + customConfig: { [key: string]: string } = {}; + + /** + * authentication method + * + * @generated from field: gitpod.v1.GitInitializer.AuthMethod authentication = 2; + */ + authentication = GitInitializer_AuthMethod.UNSPECIFIED; + + /** + * auth_user is the username used to authenticate the clone + * + * @generated from field: string auth_user = 3; + */ + authUser = ""; + + /** + * auth_password is the password used to authenticate the clone (can also be an API token) + * + * @generated from field: string auth_password = 4; + */ + authPassword = ""; + + /** + * auth_ots is a URL where one can download the authentication secret (:) + * using a GET request. + * + * @generated from field: string auth_ots = 5; + */ + authOts = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.GitInitializer.GitConfig"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "custom_config", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "scalar", T: 9 /* ScalarType.STRING */} }, + { no: 2, name: "authentication", kind: "enum", T: proto3.getEnumType(GitInitializer_AuthMethod) }, + { no: 3, name: "auth_user", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "auth_password", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 5, name: "auth_ots", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GitInitializer_GitConfig { + return new GitInitializer_GitConfig().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GitInitializer_GitConfig { + return new GitInitializer_GitConfig().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GitInitializer_GitConfig { + return new GitInitializer_GitConfig().fromJsonString(jsonString, options); + } + + static equals(a: GitInitializer_GitConfig | PlainMessage | undefined, b: GitInitializer_GitConfig | PlainMessage | undefined): boolean { + return proto3.util.equals(GitInitializer_GitConfig, a, b); + } +} + +/** + * @generated from message gitpod.v1.SnapshotInitializer + */ +export class SnapshotInitializer extends Message { + /** + * reference of the snapshot to restore + * + * @generated from field: string snapshot_id = 1; + */ + snapshotId = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.SnapshotInitializer"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "snapshot_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SnapshotInitializer { + return new SnapshotInitializer().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SnapshotInitializer { + return new SnapshotInitializer().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SnapshotInitializer { + return new SnapshotInitializer().fromJsonString(jsonString, options); + } + + static equals(a: SnapshotInitializer | PlainMessage | undefined, b: SnapshotInitializer | PlainMessage | undefined): boolean { + return proto3.util.equals(SnapshotInitializer, a, b); + } +} + +/** + * @generated from message gitpod.v1.PrebuildInitializer + */ +export class PrebuildInitializer extends Message { + /** + * reference of the prebuild to restore + * + * @generated from field: string prebuild_id = 1; + */ + prebuildId = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.PrebuildInitializer"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "prebuild_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PrebuildInitializer { + return new PrebuildInitializer().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PrebuildInitializer { + return new PrebuildInitializer().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PrebuildInitializer { + return new PrebuildInitializer().fromJsonString(jsonString, options); + } + + static equals(a: PrebuildInitializer | PlainMessage | undefined, b: PrebuildInitializer | PlainMessage | undefined): boolean { + return proto3.util.equals(PrebuildInitializer, a, b); + } +} + +/** + * FileDownloadInitializer downloads files and uses them as workspace content. + * + * @generated from message gitpod.v1.FileDownloadInitializer + */ +export class FileDownloadInitializer extends Message { + /** + * @generated from field: repeated gitpod.v1.FileDownloadInitializer.FileInfo files = 1; + */ + files: FileDownloadInitializer_FileInfo[] = []; + + /** + * @generated from field: string target_location = 2; + */ + targetLocation = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.FileDownloadInitializer"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "files", kind: "message", T: FileDownloadInitializer_FileInfo, repeated: true }, + { no: 2, name: "target_location", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FileDownloadInitializer { + return new FileDownloadInitializer().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FileDownloadInitializer { + return new FileDownloadInitializer().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FileDownloadInitializer { + return new FileDownloadInitializer().fromJsonString(jsonString, options); + } + + static equals(a: FileDownloadInitializer | PlainMessage | undefined, b: FileDownloadInitializer | PlainMessage | undefined): boolean { + return proto3.util.equals(FileDownloadInitializer, a, b); + } +} + +/** + * @generated from message gitpod.v1.FileDownloadInitializer.FileInfo + */ +export class FileDownloadInitializer_FileInfo extends Message { + /** + * @generated from field: string url = 1; + */ + url = ""; + + /** + * file_path is relative to the target_location, e.g. if target_location is in `/workspace/myrepo` + * a file_path of `foobar/file` would produce a file in `/workspace/myrepo/foobar/file`. + * file_path must include the filename. The FileDownloadInitializer will create any parent directories + * necessary to place the file. + * + * @generated from field: string file_path = 2; + */ + filePath = ""; + + /** + * digest is a hash of the file content in the OCI digest format (see https://github.com/opencontainers/image-spec/blob/master/descriptor.md#digests). + * This information is used to compute subsequent + * content versions, and to validate the file content was downloaded correctly. + * + * @generated from field: string digest = 3; + */ + digest = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.FileDownloadInitializer.FileInfo"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "file_path", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "digest", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FileDownloadInitializer_FileInfo { + return new FileDownloadInitializer_FileInfo().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FileDownloadInitializer_FileInfo { + return new FileDownloadInitializer_FileInfo().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FileDownloadInitializer_FileInfo { + return new FileDownloadInitializer_FileInfo().fromJsonString(jsonString, options); + } + + static equals(a: FileDownloadInitializer_FileInfo | PlainMessage | undefined, b: FileDownloadInitializer_FileInfo | PlainMessage | undefined): boolean { + return proto3.util.equals(FileDownloadInitializer_FileInfo, a, b); + } +} + +/** + * GitStatus describes the current Git working copy status, akin to a combination of "git status" and "git branch" + * + * @generated from message gitpod.v1.GitStatus + */ +export class GitStatus extends Message { + /** + * branch is branch we're currently on + * + * @generated from field: string branch = 1; + */ + branch = ""; + + /** + * latest_commit is the most recent commit on the current branch + * + * @generated from field: string latest_commit = 2; + */ + latestCommit = ""; + + /** + * uncommited_files is the number of uncommitted files, possibly truncated + * + * @generated from field: repeated string uncommited_files = 3; + */ + uncommitedFiles: string[] = []; + + /** + * the total number of uncommited files + * + * @generated from field: int64 total_uncommited_files = 6; + */ + totalUncommitedFiles = protoInt64.zero; + + /** + * untracked_files is the number of untracked files in the workspace, possibly truncated + * + * @generated from field: repeated string untracked_files = 4; + */ + untrackedFiles: string[] = []; + + /** + * the total number of untracked files + * + * @generated from field: int64 total_untracked_files = 7; + */ + totalUntrackedFiles = protoInt64.zero; + + /** + * unpushed_commits is the number of unpushed changes in the workspace, possibly truncated + * + * @generated from field: repeated string unpushed_commits = 5; + */ + unpushedCommits: string[] = []; + + /** + * the total number of unpushed changes + * + * @generated from field: int64 total_unpushed_commits = 8; + */ + totalUnpushedCommits = protoInt64.zero; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.GitStatus"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "branch", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "latest_commit", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "uncommited_files", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 6, name: "total_uncommited_files", kind: "scalar", T: 3 /* ScalarType.INT64 */ }, + { no: 4, name: "untracked_files", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 7, name: "total_untracked_files", kind: "scalar", T: 3 /* ScalarType.INT64 */ }, + { no: 5, name: "unpushed_commits", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 8, name: "total_unpushed_commits", kind: "scalar", T: 3 /* ScalarType.INT64 */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GitStatus { + return new GitStatus().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GitStatus { + return new GitStatus().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GitStatus { + return new GitStatus().fromJsonString(jsonString, options); + } + + static equals(a: GitStatus | PlainMessage | undefined, b: GitStatus | PlainMessage | undefined): boolean { + return proto3.util.equals(GitStatus, a, b); + } +} + +/** + * @generated from message gitpod.v1.UpdateWorkspaceRequest + */ +export class UpdateWorkspaceRequest extends Message { + /** + * workspace_id specifies the workspace to update + * + * +required + * + * @generated from field: string workspace_id = 1; + */ + workspaceId = ""; + + /** + * metadata is data associated with this workspace that's required for other parts of Gitpod to function + * + * @generated from field: optional gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceMetadata metadata = 2; + */ + metadata?: UpdateWorkspaceRequest_UpdateWorkspaceMetadata; + + /** + * spec is the configuration of the workspace that's required for the ws-manager to start the workspace + * + * @generated from field: optional gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec spec = 3; + */ + spec?: UpdateWorkspaceRequest_UpdateWorkspaceSpec; + + /** + * git_status updates the git status of the workspace - this is only here during the migration + * + * @generated from field: optional gitpod.v1.WorkspaceGitStatus git_status = 4 [deprecated = true]; + * @deprecated + */ + gitStatus?: WorkspaceGitStatus; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.UpdateWorkspaceRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "workspace_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "metadata", kind: "message", T: UpdateWorkspaceRequest_UpdateWorkspaceMetadata, opt: true }, + { no: 3, name: "spec", kind: "message", T: UpdateWorkspaceRequest_UpdateWorkspaceSpec, opt: true }, + { no: 4, name: "git_status", kind: "message", T: WorkspaceGitStatus, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UpdateWorkspaceRequest { + return new UpdateWorkspaceRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UpdateWorkspaceRequest { + return new UpdateWorkspaceRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UpdateWorkspaceRequest { + return new UpdateWorkspaceRequest().fromJsonString(jsonString, options); + } + + static equals(a: UpdateWorkspaceRequest | PlainMessage | undefined, b: UpdateWorkspaceRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(UpdateWorkspaceRequest, a, b); + } +} + +/** + * @generated from message gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceMetadata + */ +export class UpdateWorkspaceRequest_UpdateWorkspaceMetadata extends Message { + /** + * name is the name of the workspace as specified by the user + * + * @generated from field: optional string name = 1; + */ + name?: string; + + /** + * pinned indicates whether the workspace is pinned + * + * @generated from field: optional bool pinned = 2; + */ + pinned?: boolean; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceMetadata"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 2, name: "pinned", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UpdateWorkspaceRequest_UpdateWorkspaceMetadata { + return new UpdateWorkspaceRequest_UpdateWorkspaceMetadata().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UpdateWorkspaceRequest_UpdateWorkspaceMetadata { + return new UpdateWorkspaceRequest_UpdateWorkspaceMetadata().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UpdateWorkspaceRequest_UpdateWorkspaceMetadata { + return new UpdateWorkspaceRequest_UpdateWorkspaceMetadata().fromJsonString(jsonString, options); + } + + static equals(a: UpdateWorkspaceRequest_UpdateWorkspaceMetadata | PlainMessage | undefined, b: UpdateWorkspaceRequest_UpdateWorkspaceMetadata | PlainMessage | undefined): boolean { + return proto3.util.equals(UpdateWorkspaceRequest_UpdateWorkspaceMetadata, a, b); + } +} + +/** + * @generated from message gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout + */ +export class UpdateWorkspaceRequest_UpdateTimeout extends Message { + /** + * inacitivity is the maximum time of inactivity before the workspace is stopped or paused + * + * @generated from field: optional google.protobuf.Duration inactivity = 1; + */ + inactivity?: Duration; + + /** + * inacitivity is the maximum time of disconnection before the workspace is stopped or paused + * + * @generated from field: optional google.protobuf.Duration disconnected = 2; + */ + disconnected?: Duration; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "inactivity", kind: "message", T: Duration, opt: true }, + { no: 2, name: "disconnected", kind: "message", T: Duration, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UpdateWorkspaceRequest_UpdateTimeout { + return new UpdateWorkspaceRequest_UpdateTimeout().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UpdateWorkspaceRequest_UpdateTimeout { + return new UpdateWorkspaceRequest_UpdateTimeout().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UpdateWorkspaceRequest_UpdateTimeout { + return new UpdateWorkspaceRequest_UpdateTimeout().fromJsonString(jsonString, options); + } + + static equals(a: UpdateWorkspaceRequest_UpdateTimeout | PlainMessage | undefined, b: UpdateWorkspaceRequest_UpdateTimeout | PlainMessage | undefined): boolean { + return proto3.util.equals(UpdateWorkspaceRequest_UpdateTimeout, a, b); + } +} + +/** + * Note(cw): Ports cannot be updated here in favour of UpdateWorkspacePorts call which exists so that + * we can update individual ports. + * + * @generated from message gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec + */ +export class UpdateWorkspaceRequest_UpdateWorkspaceSpec extends Message { + /** + * timeout configures the workspace timeout + * + * @generated from field: optional gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout timeout = 1; + */ + timeout?: UpdateWorkspaceRequest_UpdateTimeout; + + /** + * admission controlls who can access the workspace and its ports. + * + * @generated from field: optional gitpod.v1.AdmissionLevel admission = 2; + */ + admission?: AdmissionLevel; + + /** + * Note(cw): repeated fields have implicit presence. There's a difference between passing an empty list or nothing. + * + * @generated from field: repeated string ssh_public_keys = 3; + */ + sshPublicKeys: string[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "timeout", kind: "message", T: UpdateWorkspaceRequest_UpdateTimeout, opt: true }, + { no: 2, name: "admission", kind: "enum", T: proto3.getEnumType(AdmissionLevel), opt: true }, + { no: 3, name: "ssh_public_keys", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UpdateWorkspaceRequest_UpdateWorkspaceSpec { + return new UpdateWorkspaceRequest_UpdateWorkspaceSpec().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UpdateWorkspaceRequest_UpdateWorkspaceSpec { + return new UpdateWorkspaceRequest_UpdateWorkspaceSpec().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UpdateWorkspaceRequest_UpdateWorkspaceSpec { + return new UpdateWorkspaceRequest_UpdateWorkspaceSpec().fromJsonString(jsonString, options); + } + + static equals(a: UpdateWorkspaceRequest_UpdateWorkspaceSpec | PlainMessage | undefined, b: UpdateWorkspaceRequest_UpdateWorkspaceSpec | PlainMessage | undefined): boolean { + return proto3.util.equals(UpdateWorkspaceRequest_UpdateWorkspaceSpec, a, b); + } +} + +/** + * @generated from message gitpod.v1.UpdateWorkspaceResponse + */ +export class UpdateWorkspaceResponse extends Message { + /** + * @generated from field: gitpod.v1.Workspace workspace = 1; + */ + workspace?: Workspace; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.UpdateWorkspaceResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "workspace", kind: "message", T: Workspace }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UpdateWorkspaceResponse { + return new UpdateWorkspaceResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UpdateWorkspaceResponse { + return new UpdateWorkspaceResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UpdateWorkspaceResponse { + return new UpdateWorkspaceResponse().fromJsonString(jsonString, options); + } + + static equals(a: UpdateWorkspaceResponse | PlainMessage | undefined, b: UpdateWorkspaceResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(UpdateWorkspaceResponse, a, b); + } +} + +/** + * @generated from message gitpod.v1.ParseContextURLRequest + */ +export class ParseContextURLRequest extends Message { + /** + * context_url is the URL to parse + * + * @generated from field: string context_url = 1; + */ + contextUrl = ""; + + /** + * configuration_id is the ID of the configuration to use + * + * @generated from field: string configuration_id = 2; + */ + configurationId = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.ParseContextURLRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "context_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "configuration_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ParseContextURLRequest { + return new ParseContextURLRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ParseContextURLRequest { + return new ParseContextURLRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ParseContextURLRequest { + return new ParseContextURLRequest().fromJsonString(jsonString, options); + } + + static equals(a: ParseContextURLRequest | PlainMessage | undefined, b: ParseContextURLRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(ParseContextURLRequest, a, b); + } +} + +/** + * @generated from message gitpod.v1.ParseContextURLResponse + */ +export class ParseContextURLResponse extends Message { + /** + * @generated from field: gitpod.v1.WorkspaceMetadata metadata = 1; + */ + metadata?: WorkspaceMetadata; /** - * @generated from field: string value = 2; + * @generated from field: gitpod.v1.WorkspaceSpec spec = 2; */ - value = ""; + spec?: WorkspaceSpec; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "gitpod.v1.WorkspaceEnvironmentVariable"; + static readonly typeName = "gitpod.v1.ParseContextURLResponse"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "value", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 1, name: "metadata", kind: "message", T: WorkspaceMetadata }, + { no: 2, name: "spec", kind: "message", T: WorkspaceSpec }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceEnvironmentVariable { - return new WorkspaceEnvironmentVariable().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): ParseContextURLResponse { + return new ParseContextURLResponse().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceEnvironmentVariable { - return new WorkspaceEnvironmentVariable().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): ParseContextURLResponse { + return new ParseContextURLResponse().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): WorkspaceEnvironmentVariable { - return new WorkspaceEnvironmentVariable().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): ParseContextURLResponse { + return new ParseContextURLResponse().fromJsonString(jsonString, options); } - static equals(a: WorkspaceEnvironmentVariable | PlainMessage | undefined, b: WorkspaceEnvironmentVariable | PlainMessage | undefined): boolean { - return proto3.util.equals(WorkspaceEnvironmentVariable, a, b); + static equals(a: ParseContextURLResponse | PlainMessage | undefined, b: ParseContextURLResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(ParseContextURLResponse, a, b); } } From 35dcd589bdd946ef2c5655c667993526250ff4e8 Mon Sep 17 00:00:00 2001 From: Huiwen Date: Tue, 28 Nov 2023 07:50:11 +0000 Subject: [PATCH 2/8] Fix build --- .../toggle-workspace-pinned-mutation.ts | 7 +- .../toggle-workspace-shared-mutation.ts | 7 +- .../update-workspace-description-mutation.ts | 7 +- .../src/service/json-rpc-workspace-client.ts | 33 +- .../dashboard/src/start/StartWorkspace.tsx | 20 +- .../src/workspaces/CreateWorkspacePage.tsx | 27 +- .../src/workspaces/DeleteWorkspaceModal.tsx | 2 +- .../src/workspaces/RenameWorkspaceModal.tsx | 2 +- .../src/workspaces/WorkspaceEntry.tsx | 8 +- .../src/workspaces/WorkspaceOverflowMenu.tsx | 10 +- .../dashboard/src/workspaces/Workspaces.tsx | 10 +- .../public-api/gitpod/v1/workspace.proto | 2 + components/public-api/go/v1/workspace.pb.go | 968 +++++++++--------- .../src/public-api-converter.spec.ts | 273 +++-- .../src/public-api-converter.ts | 210 +++- .../typescript/src/gitpod/v1/workspace_pb.ts | 6 + .../server/src/api/envvar-service-api.ts | 5 +- .../server/src/api/workspace-service-api.ts | 31 +- 18 files changed, 950 insertions(+), 678 deletions(-) diff --git a/components/dashboard/src/data/workspaces/toggle-workspace-pinned-mutation.ts b/components/dashboard/src/data/workspaces/toggle-workspace-pinned-mutation.ts index 3308310dc2f6c6..af010d6c829aaf 100644 --- a/components/dashboard/src/data/workspaces/toggle-workspace-pinned-mutation.ts +++ b/components/dashboard/src/data/workspaces/toggle-workspace-pinned-mutation.ts @@ -8,7 +8,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query"; import { getGitpodService } from "../../service/service"; import { getListWorkspacesQueryKey, ListWorkspacesQueryResult } from "./list-workspaces-query"; import { useCurrentOrg } from "../organizations/orgs-query"; -import { Workspace } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; +import { Workspace, WorkspaceMetadata } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; type ToggleWorkspacePinnedArgs = { workspaceId: string; @@ -33,7 +33,10 @@ export const useToggleWorkspacedPinnedMutation = () => { return info; } const workspace = new Workspace(info); - workspace.pinned = !workspace.pinned; + if (!workspace.metadata) { + workspace.metadata = new WorkspaceMetadata(); + } + workspace.metadata.pinned = !workspace.metadata.pinned; return workspace; }); }); diff --git a/components/dashboard/src/data/workspaces/toggle-workspace-shared-mutation.ts b/components/dashboard/src/data/workspaces/toggle-workspace-shared-mutation.ts index 48346e7fcee1d3..bdc22d5b9eb4d1 100644 --- a/components/dashboard/src/data/workspaces/toggle-workspace-shared-mutation.ts +++ b/components/dashboard/src/data/workspaces/toggle-workspace-shared-mutation.ts @@ -8,7 +8,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query"; import { getGitpodService } from "../../service/service"; import { getListWorkspacesQueryKey, ListWorkspacesQueryResult } from "./list-workspaces-query"; import { useCurrentOrg } from "../organizations/orgs-query"; -import { AdmissionLevel, Workspace } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; +import { AdmissionLevel, Workspace, WorkspaceSpec } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; type ToggleWorkspaceSharedArgs = { workspaceId: string; @@ -44,9 +44,10 @@ export const useToggleWorkspaceSharedMutation = () => { } const workspace = new Workspace(info); - if (workspace.status) { - workspace.status.admission = level; + if (!workspace.spec) { + workspace.spec = new WorkspaceSpec(); } + workspace.spec.admission = level; return workspace; }); }); diff --git a/components/dashboard/src/data/workspaces/update-workspace-description-mutation.ts b/components/dashboard/src/data/workspaces/update-workspace-description-mutation.ts index cd3c34c7d49dbf..1d2ede145d9687 100644 --- a/components/dashboard/src/data/workspaces/update-workspace-description-mutation.ts +++ b/components/dashboard/src/data/workspaces/update-workspace-description-mutation.ts @@ -8,7 +8,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query"; import { getGitpodService } from "../../service/service"; import { getListWorkspacesQueryKey, ListWorkspacesQueryResult } from "./list-workspaces-query"; import { useCurrentOrg } from "../organizations/orgs-query"; -import { Workspace } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; +import { Workspace, WorkspaceMetadata } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; type UpdateWorkspaceDescriptionArgs = { workspaceId: string; @@ -36,7 +36,10 @@ export const useUpdateWorkspaceDescriptionMutation = () => { // TODO: Once the update description response includes an updated record, // we can return that instead of having to know what to merge manually (same for other mutations) const workspace = new Workspace(info); - workspace.name = newDescription; + if (!workspace.metadata) { + workspace.metadata = new WorkspaceMetadata(); + } + workspace.metadata.name = newDescription; return workspace; }); }); diff --git a/components/dashboard/src/service/json-rpc-workspace-client.ts b/components/dashboard/src/service/json-rpc-workspace-client.ts index 246444eb5d9f0d..cc8ac2537cb609 100644 --- a/components/dashboard/src/service/json-rpc-workspace-client.ts +++ b/components/dashboard/src/service/json-rpc-workspace-client.ts @@ -28,6 +28,10 @@ import { SendHeartBeatResponse, WorkspacePhase_Phase, GetWorkspaceDefaultImageResponse_Source, + ParseContextURLRequest, + ParseContextURLResponse, + UpdateWorkspaceRequest, + UpdateWorkspaceResponse, } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; import { converter } from "./public-api"; import { getGitpodService } from "./service"; @@ -131,22 +135,25 @@ export class JsonRpcWorkspaceClient implements PromiseClient, + _options?: CallOptions | undefined, + ): Promise { + throw new ApplicationError(ErrorCodes.UNIMPLEMENTED, "not implemented"); + } + + async parseContextURL( + request: PartialMessage, + _options?: CallOptions | undefined, + ): Promise { + throw new ApplicationError(ErrorCodes.UNIMPLEMENTED, "not implemented"); + } } diff --git a/components/dashboard/src/start/StartWorkspace.tsx b/components/dashboard/src/start/StartWorkspace.tsx index eba9a44fbe2472..9821cb1f97cf93 100644 --- a/components/dashboard/src/start/StartWorkspace.tsx +++ b/components/dashboard/src/start/StartWorkspace.tsx @@ -28,6 +28,7 @@ import { StartWorkspaceResponse, Workspace, WorkspacePhase_Phase, + WorkspaceSpec_WorkspaceType, } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; import { PartialMessage } from "@bufbuild/protobuf"; @@ -169,7 +170,7 @@ export default class StartWorkspace extends React.ComponentPreparing workspace …

; - const contextURL = this.state.workspace?.contextUrl; - const useLatest = this.state.workspace?.editor?.version === "latest"; + const contextURL = this.state.workspace?.metadata?.originalContextUrl; + const useLatest = this.state.workspace?.spec?.editor?.version === "latest"; switch (this.state?.workspace?.status?.phase?.name) { // unknown indicates an issue within the system in that it cannot determine the actual phase of diff --git a/components/dashboard/src/workspaces/CreateWorkspacePage.tsx b/components/dashboard/src/workspaces/CreateWorkspacePage.tsx index bace526dec4a9d..7a89270e0243fd 100644 --- a/components/dashboard/src/workspaces/CreateWorkspacePage.tsx +++ b/components/dashboard/src/workspaces/CreateWorkspacePage.tsx @@ -37,7 +37,7 @@ import { SelectAccountModal } from "../user-settings/SelectAccountModal"; import { settingsPathIntegrations } from "../user-settings/settings.routes"; import { WorkspaceEntry } from "./WorkspaceEntry"; import { AuthProviderType } from "@gitpod/public-api/lib/gitpod/v1/authprovider_pb"; -import { WorkspacePhase_Phase } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; +import { WorkspaceMetadata, WorkspacePhase_Phase } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; import { Button } from "@podkit/buttons/Button"; import { LoadingButton } from "@podkit/buttons/LoadingButton"; import { CreateAndStartWorkspaceRequest } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; @@ -172,7 +172,14 @@ export function CreateWorkspacePage() { const [selectAccountError, setSelectAccountError] = useState(undefined); const createWorkspace = useCallback( - async (options?: Omit, "contextUrl" | "organizationId">) => { + /** + * options will omit + * - source.url + * - source.workspaceClass + * - metadata.organizationId + * - metadata.configurationId + */ + async (options?: PartialMessage) => { // add options from search params const opts = options || {}; @@ -192,9 +199,6 @@ export function CreateWorkspacePage() { opts.forceDefaultConfig = true; } - if (!opts.workspaceClass) { - opts.workspaceClass = selectedWsClass; - } if (!opts.editor) { opts.editor = { name: selectedIde, @@ -210,14 +214,21 @@ export function CreateWorkspacePage() { // we wait at least 5 secs const timeout = new Promise((resolve) => setTimeout(resolve, 5000)); + if (!opts.metadata) { + opts.metadata = new WorkspaceMetadata(); + } + opts.metadata.organizationId = organizationId; + opts.metadata.configurationId = selectedProjectID; + const result = await createWorkspaceMutation.createWorkspace({ source: { case: "contextUrl", - value: contextURL, + value: { + url: contextURL, + workspaceClass: selectedWsClass, + }, }, ...opts, - organizationId, - configurationId: selectedProjectID, }); await storeAutoStartOptions(); await timeout; diff --git a/components/dashboard/src/workspaces/DeleteWorkspaceModal.tsx b/components/dashboard/src/workspaces/DeleteWorkspaceModal.tsx index 51c1de3db57a93..547703921fc747 100644 --- a/components/dashboard/src/workspaces/DeleteWorkspaceModal.tsx +++ b/components/dashboard/src/workspaces/DeleteWorkspaceModal.tsx @@ -33,7 +33,7 @@ export const DeleteWorkspaceModal: FunctionComponent = ({ workspace, onCl areYouSureText="Are you sure you want to delete this workspace?" children={{ name: workspace.id, - description: workspace.name, + description: workspace.metadata?.name, }} buttonText="Delete Workspace" warningText={deleteWorkspace.isError ? "There was a problem deleting your workspace." : undefined} diff --git a/components/dashboard/src/workspaces/RenameWorkspaceModal.tsx b/components/dashboard/src/workspaces/RenameWorkspaceModal.tsx index c7e5be563e4950..0d8b1c13e1b5e5 100644 --- a/components/dashboard/src/workspaces/RenameWorkspaceModal.tsx +++ b/components/dashboard/src/workspaces/RenameWorkspaceModal.tsx @@ -16,7 +16,7 @@ type Props = { }; export const RenameWorkspaceModal: FunctionComponent = ({ workspace, onClose }) => { const [errorMessage, setErrorMessage] = useState(""); - const [description, setDescription] = useState(workspace.name || ""); + const [description, setDescription] = useState(workspace.metadata?.name || ""); const updateDescription = useUpdateWorkspaceDescriptionMutation(); const updateWorkspaceDescription = useCallback(async () => { diff --git a/components/dashboard/src/workspaces/WorkspaceEntry.tsx b/components/dashboard/src/workspaces/WorkspaceEntry.tsx index 57ca1b71620f01..0bc3aa3a042cee 100644 --- a/components/dashboard/src/workspaces/WorkspaceEntry.tsx +++ b/components/dashboard/src/workspaces/WorkspaceEntry.tsx @@ -27,8 +27,8 @@ export const WorkspaceEntry: FunctionComponent = ({ info, shortVersion }) const workspace = info; const currentBranch = gitStatus?.branch || ""; const project = getProjectPath(workspace); - const normalizedContextUrl = workspace.contextUrl; - const normalizedContextUrlDescription = workspace.contextUrl; // Instead of showing nothing, we prefer to show the raw content instead + const normalizedContextUrl = workspace.metadata!.originalContextUrl; + const normalizedContextUrlDescription = workspace.metadata!.originalContextUrl; // Instead of showing nothing, we prefer to show the raw content instead const changeMenuState = (state: boolean) => { setMenuActive(state); @@ -69,7 +69,7 @@ export const WorkspaceEntry: FunctionComponent = ({ info, shortVersion }) <>
- {workspace.name} + {workspace.metadata!.name}
@@ -105,5 +105,5 @@ export const WorkspaceEntry: FunctionComponent = ({ info, shortVersion }) export function getProjectPath(ws: Workspace) { // TODO: Remove and call papi ContextService - return ws.contextUrl.replace("https://", ""); + return ws.metadata!.originalContextUrl.replace("https://", ""); } diff --git a/components/dashboard/src/workspaces/WorkspaceOverflowMenu.tsx b/components/dashboard/src/workspaces/WorkspaceOverflowMenu.tsx index 953dd742f69d0b..9b8b95be7e7881 100644 --- a/components/dashboard/src/workspaces/WorkspaceOverflowMenu.tsx +++ b/components/dashboard/src/workspaces/WorkspaceOverflowMenu.tsx @@ -60,15 +60,13 @@ export const WorkspaceEntryOverflowMenu: FunctionComponent { const newLevel = - workspace.status?.admission === AdmissionLevel.EVERYONE - ? AdmissionLevel.OWNER_ONLY - : AdmissionLevel.EVERYONE; + workspace.spec?.admission === AdmissionLevel.EVERYONE ? AdmissionLevel.OWNER_ONLY : AdmissionLevel.EVERYONE; toggleWorkspaceShared.mutate({ workspaceId: workspace.id, level: newLevel, }); - }, [toggleWorkspaceShared, workspace.id, workspace.status?.admission]); + }, [toggleWorkspaceShared, workspace.id, workspace.spec?.admission]); const togglePinned = useCallback(() => { toggleWorkspacePinned.mutate({ @@ -129,12 +127,12 @@ export const WorkspaceEntryOverflowMenu: FunctionComponent { const { filteredActiveWorkspaces, filteredInactiveWorkspaces } = useMemo(() => { const filteredActiveWorkspaces = activeWorkspaces.filter( (info) => - `${info.name}${info.id}${info.contextUrl}${info.status?.gitStatus?.cloneUrl}${info.status?.gitStatus?.branch}` + `${info.metadata!.name}${info.id}${info.metadata!.originalContextUrl}${ + info.status?.gitStatus?.cloneUrl + }${info.status?.gitStatus?.branch}` .toLowerCase() .indexOf(searchTerm.toLowerCase()) !== -1, ); const filteredInactiveWorkspaces = inactiveWorkspaces.filter( (info) => - `${info.name}${info.id}${info.contextUrl}${info.status?.gitStatus?.cloneUrl}${info.status?.gitStatus?.branch}` + `${info.metadata!.name}${info.id}${info.metadata!.originalContextUrl}${ + info.status?.gitStatus?.cloneUrl + }${info.status?.gitStatus?.branch}` .toLowerCase() .indexOf(searchTerm.toLowerCase()) !== -1, ); @@ -201,5 +205,5 @@ function isWorkspaceActive(info: Workspace): boolean { const twentyfourHoursAgo = hoursBefore(new Date().toISOString(), 24); const isStopped = info.status?.phase?.name === WorkspacePhase_Phase.STOPPED; - return info.pinned || !isStopped || isDateSmallerOrEqual(twentyfourHoursAgo, lastSessionStart); + return info.metadata!.pinned || !isStopped || isDateSmallerOrEqual(twentyfourHoursAgo, lastSessionStart); } diff --git a/components/public-api/gitpod/v1/workspace.proto b/components/public-api/gitpod/v1/workspace.proto index b80e982768118a..ce031b3e09e8d3 100644 --- a/components/public-api/gitpod/v1/workspace.proto +++ b/components/public-api/gitpod/v1/workspace.proto @@ -310,6 +310,8 @@ message WorkspaceSpec { // log_url is the URL where we stream the workspace's logs to. // Can be changed when the workspace is PENDING or STOPPED. string log_url = 12; + + EditorReference editor = 13; } // WorkspaceStatus describes a workspace status diff --git a/components/public-api/go/v1/workspace.pb.go b/components/public-api/go/v1/workspace.pb.go index 96f88233b5c0bb..9e3216e5956475 100644 --- a/components/public-api/go/v1/workspace.pb.go +++ b/components/public-api/go/v1/workspace.pb.go @@ -1716,7 +1716,8 @@ type WorkspaceSpec struct { LastUserActivity *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=last_user_activity,json=lastUserActivity,proto3" json:"last_user_activity,omitempty"` // log_url is the URL where we stream the workspace's logs to. // Can be changed when the workspace is PENDING or STOPPED. - LogUrl string `protobuf:"bytes,12,opt,name=log_url,json=logUrl,proto3" json:"log_url,omitempty"` + LogUrl string `protobuf:"bytes,12,opt,name=log_url,json=logUrl,proto3" json:"log_url,omitempty"` + Editor *EditorReference `protobuf:"bytes,13,opt,name=editor,proto3" json:"editor,omitempty"` } func (x *WorkspaceSpec) Reset() { @@ -1835,6 +1836,13 @@ func (x *WorkspaceSpec) GetLogUrl() string { return "" } +func (x *WorkspaceSpec) GetEditor() *EditorReference { + if x != nil { + return x.Editor + } + return nil +} + // WorkspaceStatus describes a workspace status type WorkspaceStatus struct { state protoimpl.MessageState @@ -3779,7 +3787,7 @@ var file_gitpod_v1_workspace_proto_rawDesc = []byte{ 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, 0x87, 0x08, 0x0a, 0x0d, 0x57, 0x6f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbb, 0x08, 0x0a, 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x41, 0x0a, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, @@ -3821,430 +3829,433 @@ var file_gitpod_v1_workspace_proto_rawDesc = []byte{ 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x6f, 0x67, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x67, 0x55, 0x72, 0x6c, - 0x1a, 0xc9, 0x01, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x39, 0x0a, 0x0a, - 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x69, 0x6e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, - 0x6d, 0x5f, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, 0x61, 0x78, - 0x69, 0x6d, 0x75, 0x6d, 0x4c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x1a, 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, 0x68, 0x0a, 0x0d, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x57, 0x4f, - 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x57, 0x4f, - 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x47, - 0x55, 0x4c, 0x41, 0x52, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, - 0x41, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, - 0x44, 0x10, 0x02, 0x22, 0xe6, 0x06, 0x0a, 0x0f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2f, - 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x55, 0x72, 0x6c, 0x12, 0x4e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x52, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, - 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3c, 0x0a, 0x0a, 0x67, 0x69, 0x74, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, + 0x12, 0x32, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x64, 0x69, + 0x74, 0x6f, 0x72, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x65, 0x64, + 0x69, 0x74, 0x6f, 0x72, 0x1a, 0xc9, 0x01, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x12, 0x39, 0x0a, 0x0a, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0a, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x0c, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x10, 0x6d, 0x61, + 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x4c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, + 0x1a, 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, 0x68, 0x0a, + 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, + 0x0a, 0x1a, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, + 0x0a, 0x16, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x52, 0x45, 0x47, 0x55, 0x4c, 0x41, 0x52, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x57, 0x4f, + 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x45, + 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x02, 0x22, 0xe6, 0x06, 0x0a, 0x0f, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, + 0x61, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x4e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x47, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x67, 0x69, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, - 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x1a, 0xfb, 0x02, 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, 0x60, 0x0a, 0x0d, 0x66, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, - 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0xcf, 0x01, 0x0a, 0x0c, 0x46, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x19, 0x46, 0x41, 0x49, 0x4c, - 0x45, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2f, 0x0a, 0x2b, 0x46, 0x41, 0x49, 0x4c, 0x45, - 0x44, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, - 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x46, 0x41, 0x49, 0x4c, - 0x45, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, - 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x46, 0x41, 0x49, - 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, - 0x5f, 0x50, 0x55, 0x4c, 0x4c, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x03, 0x12, - 0x28, 0x0a, 0x24, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, - 0x5f, 0x55, 0x4e, 0x45, 0x58, 0x50, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x54, 0x45, 0x52, 0x4d, - 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x1a, 0x51, 0x0a, 0x0e, 0x50, 0x72, 0x65, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xfa, 0x01, 0x0a, - 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x70, 0x6f, - 0x72, 0x74, 0x12, 0x37, 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, - 0x31, 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, 0x10, 0x0a, 0x03, 0x75, - 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x3d, 0x0a, - 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x4b, 0x0a, 0x08, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x52, 0x4f, 0x54, - 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x48, - 0x54, 0x54, 0x50, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, - 0x4c, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, 0x02, 0x22, 0x8d, 0x03, 0x0a, 0x12, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x16, 0x0a, - 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, - 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, - 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x75, - 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x06, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, - 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x74, 0x72, 0x61, 0x63, - 0x6b, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x70, 0x75, - 0x73, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0f, 0x75, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x70, - 0x75, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x70, 0x75, 0x73, 0x68, - 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0x81, 0x03, 0x0a, 0x0e, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x50, 0x68, 0x61, 0x73, 0x65, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x4c, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 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, 0x12, 0x6c, 0x61, 0x73, - 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, - 0xeb, 0x01, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, - 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, - 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, - 0x4d, 0x41, 0x47, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x50, - 0x48, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x12, - 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, - 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, - 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, - 0x41, 0x53, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x15, 0x0a, - 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x55, 0x50, 0x54, - 0x45, 0x44, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x41, - 0x55, 0x53, 0x45, 0x44, 0x10, 0x08, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, - 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, - 0x41, 0x53, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x0a, 0x22, 0xd0, 0x02, - 0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x69, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x69, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x73, 0x70, 0x65, - 0x63, 0x73, 0x1a, 0xfb, 0x01, 0x0a, 0x04, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2d, 0x0a, 0x03, 0x67, - 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x72, 0x48, 0x00, 0x52, 0x03, 0x67, 0x69, 0x74, 0x12, 0x3c, 0x0a, 0x08, 0x73, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, - 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, - 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x40, 0x0a, 0x08, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, - 0x61, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, - 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, - 0x22, 0xbb, 0x07, 0x0a, 0x0e, 0x47, 0x69, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x75, 0x72, - 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x55, - 0x72, 0x69, 0x12, 0x2e, 0x0a, 0x13, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x11, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x55, - 0x72, 0x69, 0x12, 0x4a, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x6f, - 0x64, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x65, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x54, 0x61, 0x67, 0x65, 0x74, 0x12, - 0x2b, 0x0a, 0x11, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x6f, 0x75, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, + 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x63, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x52, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x50, 0x72, + 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0e, 0x70, 0x72, + 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3c, 0x0a, 0x0a, + 0x67, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x09, 0x67, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0b, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x02, 0x18, 0x01, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x1a, + 0xfb, 0x02, 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, + 0x60, 0x0a, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0xcf, 0x01, 0x0a, 0x0c, + 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x19, + 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2f, 0x0a, 0x2b, 0x46, + 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, + 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, + 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x42, 0x41, + 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x24, 0x0a, + 0x20, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x49, + 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x55, 0x4c, 0x4c, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, + 0x45, 0x10, 0x03, 0x12, 0x28, 0x0a, 0x24, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, + 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x45, 0x58, 0x50, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, + 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x1a, 0x51, 0x0a, + 0x0e, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0xfa, 0x01, 0x0a, 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, + 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x37, 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 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, + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, + 0x6c, 0x12, 0x3d, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x2e, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x22, 0x4b, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x14, + 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, + 0x4f, 0x4c, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x52, 0x4f, + 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, 0x02, 0x22, 0x8d, 0x03, + 0x0a, 0x12, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x69, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x75, 0x72, + 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x55, 0x72, + 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x29, + 0x0a, 0x10, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x55, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, + 0x27, 0x0a, 0x0f, 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, + 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, + 0x6b, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x5f, 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, + 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, + 0x75, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x75, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x75, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, + 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0x81, 0x03, + 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, + 0x12, 0x33, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 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, + 0x12, 0x6c, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x69, 0x6d, 0x65, 0x22, 0xeb, 0x01, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, + 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x52, + 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x48, 0x41, + 0x53, 0x45, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x02, 0x12, + 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, + 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, + 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, + 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x11, + 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, + 0x06, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, + 0x52, 0x55, 0x50, 0x54, 0x45, 0x44, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x48, 0x41, 0x53, + 0x45, 0x5f, 0x50, 0x41, 0x55, 0x53, 0x45, 0x44, 0x10, 0x08, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, + 0x41, 0x53, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x11, + 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, + 0x0a, 0x22, 0xd0, 0x02, 0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x70, + 0x65, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x05, 0x73, 0x70, 0x65, 0x63, 0x73, 0x1a, 0xfb, 0x01, 0x0a, 0x04, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x2d, 0x0a, 0x03, 0x67, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x49, 0x6e, 0x69, 0x74, - 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0xd3, 0x02, 0x0a, 0x09, 0x47, 0x69, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5a, 0x0a, 0x0d, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x49, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x4c, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x69, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x48, 0x00, 0x52, 0x03, 0x67, 0x69, 0x74, 0x12, 0x3c, + 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, + 0x48, 0x00, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x08, + 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x48, 0x00, + 0x52, 0x08, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x40, 0x0a, 0x08, 0x64, 0x6f, + 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, + 0x48, 0x00, 0x52, 0x08, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x06, 0x0a, 0x04, + 0x73, 0x70, 0x65, 0x63, 0x22, 0xbb, 0x07, 0x0a, 0x0e, 0x47, 0x69, 0x74, 0x49, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x55, 0x72, 0x69, 0x12, 0x2e, 0x0a, 0x13, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x55, 0x72, 0x69, 0x12, 0x4a, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x75, 0x74, 0x68, 0x55, 0x73, 0x65, 0x72, 0x12, 0x23, - 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x50, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6f, 0x74, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4f, 0x74, 0x73, 0x1a, 0x3f, - 0x0a, 0x11, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 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, - 0xc5, 0x01, 0x0a, 0x0f, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, - 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4c, 0x4f, 0x4e, 0x45, 0x5f, 0x54, 0x41, 0x52, - 0x47, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4c, 0x4f, 0x4e, 0x45, 0x5f, - 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, - 0x54, 0x45, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x4c, 0x4f, - 0x4e, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, - 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x23, - 0x0a, 0x1f, 0x43, 0x4c, 0x4f, 0x4e, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x4d, - 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, 0x42, 0x52, 0x41, 0x4e, 0x43, - 0x48, 0x10, 0x03, 0x12, 0x22, 0x0a, 0x1e, 0x43, 0x4c, 0x4f, 0x4e, 0x45, 0x5f, 0x54, 0x41, 0x52, - 0x47, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x5f, 0x42, - 0x52, 0x41, 0x4e, 0x43, 0x48, 0x10, 0x04, 0x22, 0x65, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x4d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4d, 0x45, - 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, - 0x44, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x10, 0x01, 0x12, 0x1e, - 0x0a, 0x1a, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x42, 0x41, - 0x53, 0x49, 0x43, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4f, 0x54, 0x53, 0x10, 0x02, 0x22, 0x36, - 0x0a, 0x13, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x22, 0x36, 0x0a, 0x13, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x1f, 0x0a, - 0x0b, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0xd8, - 0x01, 0x0a, 0x17, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x49, - 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x70, - 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, - 0x61, 0x64, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x46, 0x69, - 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x27, 0x0a, - 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x51, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0xe7, 0x02, 0x0a, 0x09, 0x47, 0x69, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, - 0x23, 0x0a, 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, - 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, - 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, - 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, - 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x32, - 0x0a, 0x15, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, - 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x6c, - 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x75, 0x6e, - 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x34, 0x0a, - 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x5f, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x73, 0x22, 0xd6, 0x06, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x5a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x00, - 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x12, 0x4e, 0x0a, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x69, - 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x48, 0x01, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, - 0x0a, 0x67, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x42, 0x02, 0x18, 0x01, 0x48, 0x02, 0x52, 0x09, 0x67, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x88, 0x01, 0x01, 0x1a, 0x63, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x70, 0x69, 0x6e, 0x6e, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x06, 0x70, 0x69, 0x6e, 0x6e, - 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x09, - 0x0a, 0x07, 0x5f, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x1a, 0xb3, 0x01, 0x0a, 0x0d, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3e, 0x0a, 0x0a, 0x69, - 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x69, 0x6e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x0c, 0x64, - 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x0c, - 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, - 0x0d, 0x0a, 0x0b, 0x5f, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x42, 0x0f, - 0x0a, 0x0d, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x1a, - 0xe5, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4e, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x48, 0x00, 0x52, 0x07, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x3c, 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x48, 0x01, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x73, 0x68, 0x5f, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, - 0x73, 0x73, 0x68, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x0a, 0x0a, - 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x61, 0x64, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x42, 0x0d, 0x0a, - 0x0b, 0x5f, 0x67, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x4d, 0x0a, 0x17, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x64, 0x0a, 0x16, 0x50, - 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x22, 0x81, 0x01, 0x0a, 0x17, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x2a, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x44, 0x4d, 0x49, 0x53, - 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x44, 0x4d, 0x49, - 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x4f, 0x57, 0x4e, 0x45, - 0x52, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x44, 0x4d, 0x49, - 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x56, 0x45, 0x52, - 0x59, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x32, 0xf5, 0x08, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x47, - 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x69, - 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x69, - 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, - 0x0a, 0x14, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x57, 0x0a, 0x0e, 0x4c, - 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x20, 0x2e, - 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, - 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x54, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x6f, + 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x65, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x54, 0x61, + 0x67, 0x65, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x3b, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, + 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x47, 0x69, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0xd3, 0x02, + 0x0a, 0x09, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5a, 0x0a, 0x0d, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x69, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x47, 0x69, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4c, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, + 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x24, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x75, 0x73, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x75, 0x74, 0x68, 0x55, 0x73, + 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, + 0x6f, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4f, + 0x74, 0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 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, 0xc5, 0x01, 0x0a, 0x0f, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x54, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4c, 0x4f, 0x4e, 0x45, + 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4c, + 0x4f, 0x4e, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, + 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x10, 0x01, 0x12, 0x23, 0x0a, + 0x1f, 0x43, 0x4c, 0x4f, 0x4e, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x4d, 0x4f, + 0x44, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, + 0x10, 0x02, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x4c, 0x4f, 0x4e, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, + 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, 0x42, + 0x52, 0x41, 0x4e, 0x43, 0x48, 0x10, 0x03, 0x12, 0x22, 0x0a, 0x1e, 0x43, 0x4c, 0x4f, 0x4e, 0x45, + 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x4f, 0x43, + 0x41, 0x4c, 0x5f, 0x42, 0x52, 0x41, 0x4e, 0x43, 0x48, 0x10, 0x04, 0x22, 0x65, 0x0a, 0x0a, 0x41, + 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x55, 0x54, + 0x48, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4d, + 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x5f, 0x41, 0x55, 0x54, 0x48, + 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, + 0x44, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4f, 0x54, 0x53, + 0x10, 0x02, 0x22, 0x36, 0x0a, 0x13, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, + 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x22, 0x36, 0x0a, 0x13, 0x50, 0x72, + 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x49, 0x64, 0x22, 0xd8, 0x01, 0x0a, 0x17, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x41, + 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x6f, + 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x51, 0x0a, 0x08, 0x46, 0x69, + 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, + 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0xe7, 0x02, + 0x0a, 0x09, 0x47, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x62, + 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x72, 0x61, + 0x6e, 0x63, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0f, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x63, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x75, 0x6e, 0x74, + 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0e, 0x75, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x69, 0x6c, + 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x74, 0x72, + 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, + 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x70, 0x75, 0x73, 0x68, + 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0f, 0x75, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x73, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x70, 0x75, 0x73, + 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x65, 0x64, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0xd6, 0x06, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x5a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, + 0x01, 0x12, 0x4e, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x35, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x01, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x88, 0x01, + 0x01, 0x12, 0x45, 0x0a, 0x0a, 0x67, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x69, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x42, 0x02, 0x18, 0x01, 0x48, 0x02, 0x52, 0x09, 0x67, 0x69, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x88, 0x01, 0x01, 0x1a, 0x63, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, + 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x06, + 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x1a, 0xb3, 0x01, + 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, + 0x3e, 0x0a, 0x0a, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x0a, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x88, 0x01, 0x01, 0x12, + 0x42, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x01, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, + 0x74, 0x79, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x1a, 0xe5, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4e, 0x0a, 0x07, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x48, 0x00, 0x52, + 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x3c, 0x0a, 0x09, 0x61, + 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x48, 0x01, 0x52, 0x09, 0x61, 0x64, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x73, 0x68, + 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0d, 0x73, 0x73, 0x68, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x0c, 0x0a, + 0x0a, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x5f, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x73, 0x70, 0x65, + 0x63, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x67, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x4d, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x77, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, + 0x64, 0x0a, 0x16, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, + 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x81, 0x01, 0x0a, 0x17, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, + 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x2a, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x1b, 0x41, + 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, + 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, + 0x4f, 0x57, 0x4e, 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, + 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, + 0x45, 0x56, 0x45, 0x52, 0x59, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x32, 0xf5, 0x08, 0x0a, 0x10, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x51, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x6b, 0x0a, 0x14, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, + 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, + 0x57, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, - 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, 0x57, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, + 0x61, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x41, 0x6e, 0x64, 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, 0x57, 0x0a, 0x0e, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 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, 0x5a, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, + 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x55, 0x52, 0x4c, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, - 0x0f, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, - 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, - 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x18, 0x47, 0x65, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x54, 0x0a, 0x0d, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, - 0x74, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, + 0x18, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x39, - 0x5a, 0x37, 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, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2d, - 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, + 0x74, 0x42, 0x65, 0x61, 0x74, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, 0x47, 0x65, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, + 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x1d, + 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, + 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x2f, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x42, 0x39, 0x5a, 0x37, 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, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4350,65 +4361,66 @@ var file_gitpod_v1_workspace_proto_depIdxs = []int32{ 45, // 21: gitpod.v1.WorkspaceSpec.timeout:type_name -> gitpod.v1.WorkspaceSpec.Timeout 0, // 22: gitpod.v1.WorkspaceSpec.admission:type_name -> gitpod.v1.AdmissionLevel 60, // 23: gitpod.v1.WorkspaceSpec.last_user_activity:type_name -> google.protobuf.Timestamp - 32, // 24: gitpod.v1.WorkspaceStatus.phase:type_name -> gitpod.v1.WorkspacePhase - 47, // 25: gitpod.v1.WorkspaceStatus.conditions:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions - 48, // 26: gitpod.v1.WorkspaceStatus.prebuild_result:type_name -> gitpod.v1.WorkspaceStatus.PrebuildResult - 31, // 27: gitpod.v1.WorkspaceStatus.git_status:type_name -> gitpod.v1.WorkspaceGitStatus - 0, // 28: gitpod.v1.WorkspacePort.admission:type_name -> gitpod.v1.AdmissionLevel - 4, // 29: gitpod.v1.WorkspacePort.protocol:type_name -> gitpod.v1.WorkspacePort.Protocol - 5, // 30: gitpod.v1.WorkspacePhase.name:type_name -> gitpod.v1.WorkspacePhase.Phase - 60, // 31: gitpod.v1.WorkspacePhase.last_transition_time:type_name -> google.protobuf.Timestamp - 49, // 32: gitpod.v1.WorkspaceInitializer.specs:type_name -> gitpod.v1.WorkspaceInitializer.Spec - 6, // 33: gitpod.v1.GitInitializer.target_mode:type_name -> gitpod.v1.GitInitializer.CloneTargetMode - 50, // 34: gitpod.v1.GitInitializer.config:type_name -> gitpod.v1.GitInitializer.GitConfig - 52, // 35: gitpod.v1.FileDownloadInitializer.files:type_name -> gitpod.v1.FileDownloadInitializer.FileInfo - 53, // 36: gitpod.v1.UpdateWorkspaceRequest.metadata:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceMetadata - 55, // 37: gitpod.v1.UpdateWorkspaceRequest.spec:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec - 31, // 38: gitpod.v1.UpdateWorkspaceRequest.git_status:type_name -> gitpod.v1.WorkspaceGitStatus - 26, // 39: gitpod.v1.UpdateWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace - 27, // 40: gitpod.v1.ParseContextURLResponse.metadata:type_name -> gitpod.v1.WorkspaceMetadata - 28, // 41: gitpod.v1.ParseContextURLResponse.spec:type_name -> gitpod.v1.WorkspaceSpec - 61, // 42: gitpod.v1.WorkspaceSpec.Timeout.inactivity:type_name -> google.protobuf.Duration - 61, // 43: gitpod.v1.WorkspaceSpec.Timeout.disconnected:type_name -> google.protobuf.Duration - 61, // 44: gitpod.v1.WorkspaceSpec.Timeout.maximum_lifetime:type_name -> google.protobuf.Duration - 3, // 45: gitpod.v1.WorkspaceStatus.WorkspaceConditions.failed_reason:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions.FailedReason - 34, // 46: gitpod.v1.WorkspaceInitializer.Spec.git:type_name -> gitpod.v1.GitInitializer - 35, // 47: gitpod.v1.WorkspaceInitializer.Spec.snapshot:type_name -> gitpod.v1.SnapshotInitializer - 36, // 48: gitpod.v1.WorkspaceInitializer.Spec.prebuild:type_name -> gitpod.v1.PrebuildInitializer - 37, // 49: gitpod.v1.WorkspaceInitializer.Spec.download:type_name -> gitpod.v1.FileDownloadInitializer - 51, // 50: gitpod.v1.GitInitializer.GitConfig.custom_config:type_name -> gitpod.v1.GitInitializer.GitConfig.CustomConfigEntry - 7, // 51: gitpod.v1.GitInitializer.GitConfig.authentication:type_name -> gitpod.v1.GitInitializer.AuthMethod - 61, // 52: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout.inactivity:type_name -> google.protobuf.Duration - 61, // 53: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout.disconnected:type_name -> google.protobuf.Duration - 54, // 54: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec.timeout:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout - 0, // 55: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec.admission:type_name -> gitpod.v1.AdmissionLevel - 8, // 56: gitpod.v1.WorkspaceService.GetWorkspace:input_type -> gitpod.v1.GetWorkspaceRequest - 10, // 57: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:input_type -> gitpod.v1.WatchWorkspaceStatusRequest - 12, // 58: gitpod.v1.WorkspaceService.ListWorkspaces:input_type -> gitpod.v1.ListWorkspacesRequest - 14, // 59: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:input_type -> gitpod.v1.CreateAndStartWorkspaceRequest - 16, // 60: gitpod.v1.WorkspaceService.StartWorkspace:input_type -> gitpod.v1.StartWorkspaceRequest - 39, // 61: gitpod.v1.WorkspaceService.UpdateWorkspace:input_type -> gitpod.v1.UpdateWorkspaceRequest - 41, // 62: gitpod.v1.WorkspaceService.ParseContextURL:input_type -> gitpod.v1.ParseContextURLRequest - 18, // 63: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:input_type -> gitpod.v1.GetWorkspaceDefaultImageRequest - 20, // 64: gitpod.v1.WorkspaceService.SendHeartBeat:input_type -> gitpod.v1.SendHeartBeatRequest - 22, // 65: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:input_type -> gitpod.v1.GetWorkspaceOwnerTokenRequest - 24, // 66: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:input_type -> gitpod.v1.GetWorkspaceEditorCredentialsRequest - 9, // 67: gitpod.v1.WorkspaceService.GetWorkspace:output_type -> gitpod.v1.GetWorkspaceResponse - 11, // 68: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:output_type -> gitpod.v1.WatchWorkspaceStatusResponse - 13, // 69: gitpod.v1.WorkspaceService.ListWorkspaces:output_type -> gitpod.v1.ListWorkspacesResponse - 15, // 70: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:output_type -> gitpod.v1.CreateAndStartWorkspaceResponse - 17, // 71: gitpod.v1.WorkspaceService.StartWorkspace:output_type -> gitpod.v1.StartWorkspaceResponse - 40, // 72: gitpod.v1.WorkspaceService.UpdateWorkspace:output_type -> gitpod.v1.UpdateWorkspaceResponse - 42, // 73: gitpod.v1.WorkspaceService.ParseContextURL:output_type -> gitpod.v1.ParseContextURLResponse - 19, // 74: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:output_type -> gitpod.v1.GetWorkspaceDefaultImageResponse - 21, // 75: gitpod.v1.WorkspaceService.SendHeartBeat:output_type -> gitpod.v1.SendHeartBeatResponse - 23, // 76: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:output_type -> gitpod.v1.GetWorkspaceOwnerTokenResponse - 25, // 77: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:output_type -> gitpod.v1.GetWorkspaceEditorCredentialsResponse - 67, // [67:78] is the sub-list for method output_type - 56, // [56:67] is the sub-list for method input_type - 56, // [56:56] is the sub-list for extension type_name - 56, // [56:56] is the sub-list for extension extendee - 0, // [0:56] is the sub-list for field type_name + 58, // 24: gitpod.v1.WorkspaceSpec.editor:type_name -> gitpod.v1.EditorReference + 32, // 25: gitpod.v1.WorkspaceStatus.phase:type_name -> gitpod.v1.WorkspacePhase + 47, // 26: gitpod.v1.WorkspaceStatus.conditions:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions + 48, // 27: gitpod.v1.WorkspaceStatus.prebuild_result:type_name -> gitpod.v1.WorkspaceStatus.PrebuildResult + 31, // 28: gitpod.v1.WorkspaceStatus.git_status:type_name -> gitpod.v1.WorkspaceGitStatus + 0, // 29: gitpod.v1.WorkspacePort.admission:type_name -> gitpod.v1.AdmissionLevel + 4, // 30: gitpod.v1.WorkspacePort.protocol:type_name -> gitpod.v1.WorkspacePort.Protocol + 5, // 31: gitpod.v1.WorkspacePhase.name:type_name -> gitpod.v1.WorkspacePhase.Phase + 60, // 32: gitpod.v1.WorkspacePhase.last_transition_time:type_name -> google.protobuf.Timestamp + 49, // 33: gitpod.v1.WorkspaceInitializer.specs:type_name -> gitpod.v1.WorkspaceInitializer.Spec + 6, // 34: gitpod.v1.GitInitializer.target_mode:type_name -> gitpod.v1.GitInitializer.CloneTargetMode + 50, // 35: gitpod.v1.GitInitializer.config:type_name -> gitpod.v1.GitInitializer.GitConfig + 52, // 36: gitpod.v1.FileDownloadInitializer.files:type_name -> gitpod.v1.FileDownloadInitializer.FileInfo + 53, // 37: gitpod.v1.UpdateWorkspaceRequest.metadata:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceMetadata + 55, // 38: gitpod.v1.UpdateWorkspaceRequest.spec:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec + 31, // 39: gitpod.v1.UpdateWorkspaceRequest.git_status:type_name -> gitpod.v1.WorkspaceGitStatus + 26, // 40: gitpod.v1.UpdateWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace + 27, // 41: gitpod.v1.ParseContextURLResponse.metadata:type_name -> gitpod.v1.WorkspaceMetadata + 28, // 42: gitpod.v1.ParseContextURLResponse.spec:type_name -> gitpod.v1.WorkspaceSpec + 61, // 43: gitpod.v1.WorkspaceSpec.Timeout.inactivity:type_name -> google.protobuf.Duration + 61, // 44: gitpod.v1.WorkspaceSpec.Timeout.disconnected:type_name -> google.protobuf.Duration + 61, // 45: gitpod.v1.WorkspaceSpec.Timeout.maximum_lifetime:type_name -> google.protobuf.Duration + 3, // 46: gitpod.v1.WorkspaceStatus.WorkspaceConditions.failed_reason:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions.FailedReason + 34, // 47: gitpod.v1.WorkspaceInitializer.Spec.git:type_name -> gitpod.v1.GitInitializer + 35, // 48: gitpod.v1.WorkspaceInitializer.Spec.snapshot:type_name -> gitpod.v1.SnapshotInitializer + 36, // 49: gitpod.v1.WorkspaceInitializer.Spec.prebuild:type_name -> gitpod.v1.PrebuildInitializer + 37, // 50: gitpod.v1.WorkspaceInitializer.Spec.download:type_name -> gitpod.v1.FileDownloadInitializer + 51, // 51: gitpod.v1.GitInitializer.GitConfig.custom_config:type_name -> gitpod.v1.GitInitializer.GitConfig.CustomConfigEntry + 7, // 52: gitpod.v1.GitInitializer.GitConfig.authentication:type_name -> gitpod.v1.GitInitializer.AuthMethod + 61, // 53: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout.inactivity:type_name -> google.protobuf.Duration + 61, // 54: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout.disconnected:type_name -> google.protobuf.Duration + 54, // 55: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec.timeout:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout + 0, // 56: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec.admission:type_name -> gitpod.v1.AdmissionLevel + 8, // 57: gitpod.v1.WorkspaceService.GetWorkspace:input_type -> gitpod.v1.GetWorkspaceRequest + 10, // 58: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:input_type -> gitpod.v1.WatchWorkspaceStatusRequest + 12, // 59: gitpod.v1.WorkspaceService.ListWorkspaces:input_type -> gitpod.v1.ListWorkspacesRequest + 14, // 60: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:input_type -> gitpod.v1.CreateAndStartWorkspaceRequest + 16, // 61: gitpod.v1.WorkspaceService.StartWorkspace:input_type -> gitpod.v1.StartWorkspaceRequest + 39, // 62: gitpod.v1.WorkspaceService.UpdateWorkspace:input_type -> gitpod.v1.UpdateWorkspaceRequest + 41, // 63: gitpod.v1.WorkspaceService.ParseContextURL:input_type -> gitpod.v1.ParseContextURLRequest + 18, // 64: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:input_type -> gitpod.v1.GetWorkspaceDefaultImageRequest + 20, // 65: gitpod.v1.WorkspaceService.SendHeartBeat:input_type -> gitpod.v1.SendHeartBeatRequest + 22, // 66: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:input_type -> gitpod.v1.GetWorkspaceOwnerTokenRequest + 24, // 67: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:input_type -> gitpod.v1.GetWorkspaceEditorCredentialsRequest + 9, // 68: gitpod.v1.WorkspaceService.GetWorkspace:output_type -> gitpod.v1.GetWorkspaceResponse + 11, // 69: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:output_type -> gitpod.v1.WatchWorkspaceStatusResponse + 13, // 70: gitpod.v1.WorkspaceService.ListWorkspaces:output_type -> gitpod.v1.ListWorkspacesResponse + 15, // 71: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:output_type -> gitpod.v1.CreateAndStartWorkspaceResponse + 17, // 72: gitpod.v1.WorkspaceService.StartWorkspace:output_type -> gitpod.v1.StartWorkspaceResponse + 40, // 73: gitpod.v1.WorkspaceService.UpdateWorkspace:output_type -> gitpod.v1.UpdateWorkspaceResponse + 42, // 74: gitpod.v1.WorkspaceService.ParseContextURL:output_type -> gitpod.v1.ParseContextURLResponse + 19, // 75: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:output_type -> gitpod.v1.GetWorkspaceDefaultImageResponse + 21, // 76: gitpod.v1.WorkspaceService.SendHeartBeat:output_type -> gitpod.v1.SendHeartBeatResponse + 23, // 77: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:output_type -> gitpod.v1.GetWorkspaceOwnerTokenResponse + 25, // 78: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:output_type -> gitpod.v1.GetWorkspaceEditorCredentialsResponse + 68, // [68:79] is the sub-list for method output_type + 57, // [57:68] is the sub-list for method input_type + 57, // [57:57] is the sub-list for extension type_name + 57, // [57:57] is the sub-list for extension extendee + 0, // [0:57] is the sub-list for field type_name } func init() { file_gitpod_v1_workspace_proto_init() } diff --git a/components/public-api/typescript-common/src/public-api-converter.spec.ts b/components/public-api/typescript-common/src/public-api-converter.spec.ts index e637e281d6d515..64898cd3f954df 100644 --- a/components/public-api/typescript-common/src/public-api-converter.spec.ts +++ b/components/public-api/typescript-common/src/public-api-converter.spec.ts @@ -8,10 +8,10 @@ import { Timestamp, toPlainMessage } from "@bufbuild/protobuf"; import { AdmissionLevel, - WorkspaceEnvironmentVariable, + Workspace, WorkspacePhase_Phase, - WorkspacePort_Policy, WorkspacePort_Protocol, + WorkspaceSpec_WorkspaceType, } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; import { expect } from "chai"; import { PartialConfiguration, PublicAPIConverter } from "./public-api-converter"; @@ -43,6 +43,7 @@ import { } from "@gitpod/public-api/lib/gitpod/v1/authprovider_pb"; import { ConfigurationEnvironmentVariable, + EnvironmentVariable, EnvironmentVariableAdmission, UserEnvironmentVariable, } from "@gitpod/public-api/lib/gitpod/v1/envvar_pb"; @@ -273,18 +274,51 @@ describe("PublicAPIConverter", () => { }, } as any); expect(workspace).to.deep.equal( - { + new Workspace({ id: "akosyakov-parceldemo-4crqn25qlwi", - prebuild: false, - organizationId: "ec76db37-9a48-4e2d-a78e-0ec7d2b4d2c0", - name: "akosyakov/parcel-demo - master", - pinned: false, + spec: { + ports: [], + type: WorkspaceSpec_WorkspaceType.REGULAR, + admission: AdmissionLevel.OWNER_ONLY, + environmentVariables: [], + initializer: { + specs: [ + { + spec: { + case: "git", + value: { + remoteUri: "https://github.com/akosyakov/parcel-demo", + checkoutLocation: "parcel-demo", + config: {}, + }, + }, + }, + ], + }, + git: { + username: "", + email: "", + }, + class: "g1-standard", + editor: { + name: "code", + version: "stable", + }, + }, + metadata: { + ownerId: "827df1c8-d42d-4a69-bc38-64089af1f711", + configurationId: "", + organizationId: "ec76db37-9a48-4e2d-a78e-0ec7d2b4d2c0", + name: "akosyakov/parcel-demo - master", + pinned: false, + originalContextUrl: "https://github.com/akosyakov/parcel-demo", + }, status: { + statusVersion: Timestamp.fromDate(new Date("2023-10-16T20:18:24.923Z")).seconds, phase: { name: WorkspacePhase_Phase.CREATING, lastTransitionTime: Timestamp.fromDate(new Date("2023-10-16T20:18:24.923Z")), }, - message: "", workspaceUrl: "https://akosyakov-parceldemo-4crqn25qlwi.ws-dev.ak-public-26583c8c5c.preview.gitpod-dev.com", gitStatus: { @@ -298,24 +332,13 @@ describe("PublicAPIConverter", () => { unpushedCommits: [], untrackedFiles: [], }, - ports: [], - admission: AdmissionLevel.OWNER_ONLY, instanceId: "226695b4-f10a-471a-a219-9b657645bf78", conditions: { failed: "", timeout: "", }, }, - additionalEnvironmentVariables: [], - region: "dev", - prebuildId: "", - workspaceClass: "g1-standard", - editor: { - name: "code", - version: "stable", - }, - contextUrl: "https://github.com/akosyakov/parcel-demo", - }, + }), "created", ); workspace = converter.toWorkspace( @@ -396,18 +419,59 @@ describe("PublicAPIConverter", () => { workspace, ); expect(workspace).to.deep.equal( - { + new Workspace({ id: "akosyakov-parceldemo-4crqn25qlwi", - prebuild: false, - organizationId: "ec76db37-9a48-4e2d-a78e-0ec7d2b4d2c0", - name: "akosyakov/parcel-demo - master", - pinned: false, + spec: { + type: WorkspaceSpec_WorkspaceType.REGULAR, + editor: { + name: "code", + version: "stable", + }, + ports: [ + { + admission: AdmissionLevel.EVERYONE, + port: BigInt(1234), + protocol: WorkspacePort_Protocol.HTTP, + url: "https://1234-akosyakov-parceldemo-4crqn25qlwi.ws-dev.ak-public-26583c8c5c.preview.gitpod-dev.com", + }, + ], + admission: AdmissionLevel.OWNER_ONLY, + environmentVariables: [], + class: "g1-standard", + initializer: { + specs: [ + { + spec: { + case: "git", + value: { + remoteUri: "https://github.com/akosyakov/parcel-demo", + checkoutLocation: "parcel-demo", + config: {}, + }, + }, + }, + ], + }, + git: { + username: "", + email: "", + }, + }, + metadata: { + ownerId: "827df1c8-d42d-4a69-bc38-64089af1f711", + organizationId: "ec76db37-9a48-4e2d-a78e-0ec7d2b4d2c0", + annotations: {}, + configurationId: "", + name: "akosyakov/parcel-demo - master", + pinned: false, + originalContextUrl: "https://github.com/akosyakov/parcel-demo", + }, status: { + statusVersion: Timestamp.fromDate(new Date("2023-10-16T20:18:53.451Z")).seconds, phase: { name: WorkspacePhase_Phase.RUNNING, lastTransitionTime: Timestamp.fromDate(new Date("2023-10-16T20:18:53.451Z")), }, - message: "", workspaceUrl: "https://akosyakov-parceldemo-4crqn25qlwi.ws-dev.ak-public-26583c8c5c.preview.gitpod-dev.com", gitStatus: { @@ -421,31 +485,13 @@ describe("PublicAPIConverter", () => { unpushedCommits: ["2203d16: tests"], untrackedFiles: [], }, - ports: [ - { - policy: WorkspacePort_Policy.PUBLIC, - port: BigInt(1234), - protocol: WorkspacePort_Protocol.HTTP, - url: "https://1234-akosyakov-parceldemo-4crqn25qlwi.ws-dev.ak-public-26583c8c5c.preview.gitpod-dev.com", - }, - ], - admission: AdmissionLevel.OWNER_ONLY, instanceId: "226695b4-f10a-471a-a219-9b657645bf78", conditions: { failed: "", timeout: "", }, }, - additionalEnvironmentVariables: [], - region: "dev", - prebuildId: "", - workspaceClass: "g1-standard", - editor: { - name: "code", - version: "stable", - }, - contextUrl: "https://github.com/akosyakov/parcel-demo", - }, + }), "running", ); workspace = converter.toWorkspace( @@ -537,18 +583,59 @@ describe("PublicAPIConverter", () => { workspace, ); expect(workspace).to.deep.equal( - { + new Workspace({ id: "akosyakov-parceldemo-4crqn25qlwi", - prebuild: false, - organizationId: "ec76db37-9a48-4e2d-a78e-0ec7d2b4d2c0", - name: "akosyakov/parcel-demo - master", - pinned: false, + spec: { + editor: { + name: "code", + version: "stable", + }, + ports: [ + { + admission: AdmissionLevel.EVERYONE, + port: BigInt(1234), + protocol: WorkspacePort_Protocol.HTTP, + url: "https://1234-akosyakov-parceldemo-4crqn25qlwi.ws-dev.ak-public-26583c8c5c.preview.gitpod-dev.com", + }, + ], + type: WorkspaceSpec_WorkspaceType.REGULAR, + admission: AdmissionLevel.OWNER_ONLY, + environmentVariables: [], + initializer: { + specs: [ + { + spec: { + case: "git", + value: { + remoteUri: "https://github.com/akosyakov/parcel-demo", + checkoutLocation: "parcel-demo", + config: {}, + }, + }, + }, + ], + }, + git: { + username: "", + email: "", + }, + class: "g1-standard", + }, + metadata: { + ownerId: "827df1c8-d42d-4a69-bc38-64089af1f711", + configurationId: "", + organizationId: "ec76db37-9a48-4e2d-a78e-0ec7d2b4d2c0", + name: "akosyakov/parcel-demo - master", + pinned: false, + originalContextUrl: "https://github.com/akosyakov/parcel-demo", + }, status: { + statusVersion: Timestamp.fromDate(new Date("2023-10-16T20:36:16.205Z")).seconds, + phase: { name: WorkspacePhase_Phase.STOPPED, lastTransitionTime: Timestamp.fromDate(new Date("2023-10-16T20:36:16.205Z")), }, - message: "", workspaceUrl: "https://akosyakov-parceldemo-4crqn25qlwi.ws-dev.ak-public-26583c8c5c.preview.gitpod-dev.com", gitStatus: { @@ -562,31 +649,13 @@ describe("PublicAPIConverter", () => { unpushedCommits: ["2203d16: tests"], untrackedFiles: [], }, - ports: [ - { - policy: WorkspacePort_Policy.PUBLIC, - port: BigInt(1234), - protocol: WorkspacePort_Protocol.HTTP, - url: "https://1234-akosyakov-parceldemo-4crqn25qlwi.ws-dev.ak-public-26583c8c5c.preview.gitpod-dev.com", - }, - ], - admission: AdmissionLevel.OWNER_ONLY, instanceId: "226695b4-f10a-471a-a219-9b657645bf78", conditions: { failed: "", timeout: "", }, }, - additionalEnvironmentVariables: [], - region: "dev", - prebuildId: "", - workspaceClass: "g1-standard", - editor: { - name: "code", - version: "stable", - }, - contextUrl: "https://github.com/akosyakov/parcel-demo", - }, + }), "stopped", ); workspace = converter.toWorkspace( @@ -660,18 +729,51 @@ describe("PublicAPIConverter", () => { workspace, ); expect(workspace).to.deep.equal( - { + new Workspace({ id: "akosyakov-parceldemo-4crqn25qlwi", - prebuild: false, - organizationId: "ec76db37-9a48-4e2d-a78e-0ec7d2b4d2c0", - name: "akosyakov/parcel-demo - master", - pinned: false, + metadata: { + ownerId: "827df1c8-d42d-4a69-bc38-64089af1f711", + organizationId: "ec76db37-9a48-4e2d-a78e-0ec7d2b4d2c0", + configurationId: "", + name: "akosyakov/parcel-demo - master", + pinned: false, + originalContextUrl: "https://github.com/akosyakov/parcel-demo", + }, + spec: { + editor: { + name: "code", + version: "stable", + }, + environmentVariables: [], + type: WorkspaceSpec_WorkspaceType.REGULAR, + git: { + username: "", + email: "", + }, + ports: [], + admission: AdmissionLevel.OWNER_ONLY, + class: "g1-standard", + initializer: { + specs: [ + { + spec: { + case: "git", + value: { + remoteUri: "https://github.com/akosyakov/parcel-demo", + checkoutLocation: "parcel-demo", + config: {}, + }, + }, + }, + ], + }, + }, status: { + statusVersion: Timestamp.fromDate(new Date("2023-10-16T20:38:51.092Z")).seconds, phase: { name: WorkspacePhase_Phase.RUNNING, lastTransitionTime: Timestamp.fromDate(new Date("2023-10-16T20:38:51.092Z")), }, - message: "", workspaceUrl: "https://akosyakov-parceldemo-4crqn25qlwi.ws-dev.ak-public-26583c8c5c.preview.gitpod-dev.com", gitStatus: { @@ -685,24 +787,13 @@ describe("PublicAPIConverter", () => { unpushedCommits: ["2203d16: tests"], untrackedFiles: [], }, - ports: [], - admission: AdmissionLevel.OWNER_ONLY, instanceId: "e1148a46-a311-4215-8421-37cd3b907ee9", conditions: { failed: "", timeout: "", }, }, - additionalEnvironmentVariables: [], - region: "dev", - prebuildId: "", - workspaceClass: "g1-standard", - editor: { - name: "code", - version: "stable", - }, - contextUrl: "https://github.com/akosyakov/parcel-demo", - }, + }), "restarted", ); }); @@ -878,7 +969,7 @@ describe("PublicAPIConverter", () => { }); }); - describe("toWorkspaceEnvironmentVariables", () => { + describe("toEnvironmentVariables", () => { const wsCtx: WithEnvvarsContext = { title: "title", envvars: [ @@ -888,9 +979,9 @@ describe("PublicAPIConverter", () => { }, ], }; - const envVars = [new WorkspaceEnvironmentVariable({ name: "FOO", value: "bar" })]; + const envVars = [new EnvironmentVariable({ name: "FOO", value: "bar" })]; it("should convert workspace environment variable types", () => { - const result = converter.toWorkspaceEnvironmentVariables(wsCtx); + const result = converter.toEnvironmentVariables(wsCtx); expect(result).to.deep.equal(envVars); }); }); diff --git a/components/public-api/typescript-common/src/public-api-converter.ts b/components/public-api/typescript-common/src/public-api-converter.ts index a33d6ec1adeba5..0cdf16d09b0616 100644 --- a/components/public-api/typescript-common/src/public-api-converter.ts +++ b/components/public-api/typescript-common/src/public-api-converter.ts @@ -39,21 +39,31 @@ import { } from "@gitpod/public-api/lib/gitpod/v1/organization_pb"; import { AdmissionLevel, + GitInitializer, + GitInitializer_GitConfig, + PrebuildInitializer, + SnapshotInitializer, Workspace, - WorkspaceConditions, - WorkspaceEnvironmentVariable, WorkspaceGitStatus, + WorkspaceInitializer, + WorkspaceInitializer_Spec, + WorkspaceMetadata, WorkspacePhase, WorkspacePhase_Phase, WorkspacePort, - WorkspacePort_Policy, WorkspacePort_Protocol, + WorkspaceSpec, + WorkspaceSpec_GitSpec, + WorkspaceSpec_WorkspaceType, WorkspaceStatus, + WorkspaceStatus_PrebuildResult, + WorkspaceStatus_WorkspaceConditions, } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; import { EditorReference } from "@gitpod/public-api/lib/gitpod/v1/editor_pb"; import { SSHPublicKey } from "@gitpod/public-api/lib/gitpod/v1/ssh_pb"; import { ConfigurationEnvironmentVariable, + EnvironmentVariable, EnvironmentVariableAdmission, UserEnvironmentVariable, } from "@gitpod/public-api/lib/gitpod/v1/envvar_pb"; @@ -84,6 +94,7 @@ import { Token, SuggestedRepository as SuggestedRepositoryProtocol, UserSSHPublicKeyValue, + SnapshotContext, } from "@gitpod/gitpod-protocol/lib//protocol"; import { OrgMemberInfo, @@ -118,45 +129,122 @@ export class PublicAPIConverter { toWorkspace(arg: WorkspaceInfo | WorkspaceInstance, current?: Workspace): Workspace { const workspace = current ?? new Workspace(); + workspace.spec = this.toWorkspaceSpec(arg, workspace.spec); + workspace.status = this.toWorkspaceStatus(arg, workspace.status); + workspace.metadata = this.toWorkspaceMetadata(arg, workspace.metadata); if ("workspace" in arg) { workspace.id = arg.workspace.id; - workspace.prebuild = arg.workspace.type === "prebuild"; - workspace.organizationId = arg.workspace.organizationId; - workspace.name = arg.workspace.description; - workspace.pinned = arg.workspace.pinned ?? false; - - const contextUrl = ContextURL.normalize(arg.workspace); - if (contextUrl) { - workspace.contextUrl = contextUrl; + if (arg.latestInstance) { + return this.toWorkspace(arg.latestInstance, workspace); } + return workspace; + } + return workspace; + } + + toWorkspaceSpec(arg: WorkspaceInfo | WorkspaceInstance, current?: WorkspaceSpec): WorkspaceSpec { + const spec = new WorkspaceSpec(current); + if ("workspace" in arg) { + spec.admission = this.toAdmission(arg.workspace.shareable); + spec.initializer = new WorkspaceInitializer(spec.initializer); + spec.type = + arg.workspace.type === "prebuild" + ? WorkspaceSpec_WorkspaceType.PREBUILD + : WorkspaceSpec_WorkspaceType.REGULAR; + spec.environmentVariables = this.toEnvironmentVariables(arg.workspace.context); + if (WithPrebuild.is(arg.workspace.context)) { - workspace.prebuildId = arg.workspace.context.prebuildWorkspaceId; + const initializerSpec = new WorkspaceInitializer_Spec({ + spec: { + case: "prebuild", + value: new PrebuildInitializer({ + prebuildId: arg.workspace.context.prebuildWorkspaceId, + }), + }, + }); + spec.initializer.specs.push(initializerSpec); + } else if (CommitContext.is(arg.workspace.context)) { + const initializerSpec = new WorkspaceInitializer_Spec({ + spec: { + case: "git", + value: new GitInitializer({ + remoteUri: arg.workspace.context.normalizedContextURL, + upstreamRemoteUri: arg.workspace.context.upstreamRemoteURI, + // TODO: + // targetMode + // cloneTaget + checkoutLocation: arg.workspace.context.checkoutLocation, + // TODO: config + config: new GitInitializer_GitConfig(), + }), + }, + }); + spec.initializer.specs.push(initializerSpec); + } else if (SnapshotContext.is(arg.workspace.context)) { + const initializerSpec = new WorkspaceInitializer_Spec({ + spec: { + case: "snapshot", + value: new SnapshotInitializer({ + snapshotId: arg.workspace.context.snapshotId, + }), + }, + }); + spec.initializer.specs.push(initializerSpec); } + // TODO: else if FileDownloadInitializer - const status = new WorkspaceStatus(); - const phase = new WorkspacePhase(); - phase.lastTransitionTime = Timestamp.fromDate(new Date(arg.workspace.creationTime)); - status.phase = phase; - status.admission = this.toAdmission(arg.workspace.shareable); - status.gitStatus = this.toGitStatus(arg.workspace); - workspace.status = status; - workspace.additionalEnvironmentVariables = this.toWorkspaceEnvironmentVariables(arg.workspace.context); + spec.git = new WorkspaceSpec_GitSpec({ + // TODO: + // username: "", + // email: "", + }); if (arg.latestInstance) { - return this.toWorkspace(arg.latestInstance, workspace); + return this.toWorkspaceSpec(arg.latestInstance, spec); } - return workspace; + return spec; + } + spec.editor = this.toEditor(arg.configuration.ideConfig); + spec.ports = this.toPorts(arg.status.exposedPorts); + if (arg.status.timeout) { + // TODO: timeout + } + if (arg.workspaceClass) { + spec.class = arg.workspaceClass; + } + // TODO: ssh_public_keys + // TODO: subassembly_references + // TODO: log_url + return spec; + } + + toWorkspaceStatus(arg: WorkspaceInfo | WorkspaceInstance, current?: WorkspaceStatus): WorkspaceStatus { + const status = new WorkspaceStatus(current); + status.phase = new WorkspacePhase(status.phase); + + if ("workspace" in arg) { + if (arg.workspace.type === "prebuild") { + status.prebuildResult = new WorkspaceStatus_PrebuildResult({ + // TODO: + // snapshot: "", + // errorMessage: "", + }); + } + // TODO: timeout + status.phase.lastTransitionTime = Timestamp.fromDate(new Date(arg.workspace.creationTime)); + status.gitStatus = this.toGitStatus(arg.workspace); + return status; } - const status = workspace.status ?? new WorkspaceStatus(); - workspace.status = status; - const phase = status.phase ?? new WorkspacePhase(); - phase.name = this.toPhase(arg); - status.phase = phase; + status.workspaceUrl = arg.ideUrl; + status.conditions = this.toWorkspaceConditions(arg.status.conditions); let lastTransitionTime = new Date(arg.creationTime).getTime(); - if (phase.lastTransitionTime) { - lastTransitionTime = Math.max(lastTransitionTime, new Date(phase.lastTransitionTime.toDate()).getTime()); + if (status.phase.lastTransitionTime) { + lastTransitionTime = Math.max( + lastTransitionTime, + new Date(status.phase.lastTransitionTime.toDate()).getTime(), + ); } if (arg.deployedTime) { lastTransitionTime = Math.max(lastTransitionTime, new Date(arg.deployedTime).getTime()); @@ -170,30 +258,48 @@ export class PublicAPIConverter { if (arg.stoppedTime) { lastTransitionTime = Math.max(lastTransitionTime, new Date(arg.stoppedTime).getTime()); } - phase.lastTransitionTime = Timestamp.fromDate(new Date(lastTransitionTime)); + status.phase.lastTransitionTime = Timestamp.fromDate(new Date(lastTransitionTime)); + // TODO: could be improved? But by original status source producer + status.statusVersion = status.phase.lastTransitionTime.seconds; + + status.phase.name = this.toPhase(arg); status.instanceId = arg.id; if (arg.status.message) { - status.message = arg.status.message; + status.conditions = new WorkspaceStatus_WorkspaceConditions({ + failed: arg.status.message, + }); + arg.status.conditions.failed; } - status.workspaceUrl = arg.ideUrl; - status.ports = this.toPorts(arg.status.exposedPorts); - status.conditions = this.toWorkspaceConditions(arg.status.conditions); status.gitStatus = this.toGitStatus(arg, status.gitStatus); - workspace.region = arg.region; - if (arg.workspaceClass) { - workspace.workspaceClass = arg.workspaceClass; - } - workspace.editor = this.toEditor(arg.configuration.ideConfig); - return workspace; + return status; } - toWorkspaceConditions(conditions: WorkspaceInstanceConditions): WorkspaceConditions { - return new WorkspaceConditions({ + toWorkspaceMetadata(arg: WorkspaceInfo | WorkspaceInstance, current?: WorkspaceMetadata): WorkspaceMetadata { + const metadata = new WorkspaceMetadata(current); + if ("workspace" in arg) { + metadata.ownerId = arg.workspace.ownerId; + metadata.configurationId = arg.workspace.projectId ?? ""; + // TODO: annotation + metadata.organizationId = arg.workspace.organizationId; + metadata.name = arg.workspace.description; + metadata.pinned = arg.workspace.pinned ?? false; + const contextUrl = ContextURL.normalize(arg.workspace); + if (contextUrl) { + metadata.originalContextUrl = contextUrl; + } + } + return metadata; + } + + toWorkspaceConditions(conditions: WorkspaceInstanceConditions): WorkspaceStatus_WorkspaceConditions { + const result = new WorkspaceStatus_WorkspaceConditions({ failed: conditions.failed, timeout: conditions.timeout, }); + // TODO: failedReason + return result; } toEditor(ideConfig: ConfigurationIdeConfig | undefined): EditorReference | undefined { @@ -447,15 +553,15 @@ export class PublicAPIConverter { return new ApplicationError(ErrorCodes.INTERNAL_SERVER_ERROR, reason.rawMessage); } - toWorkspaceEnvironmentVariables(context: WorkspaceContext): WorkspaceEnvironmentVariable[] { + toEnvironmentVariables(context: WorkspaceContext): EnvironmentVariable[] { if (WithEnvvarsContext.is(context)) { return context.envvars.map((envvar) => this.toWorkspaceEnvironmentVariable(envvar)); } return []; } - toWorkspaceEnvironmentVariable(envVar: EnvVarWithValue): WorkspaceEnvironmentVariable { - const result = new WorkspaceEnvironmentVariable(); + toWorkspaceEnvironmentVariable(envVar: EnvVarWithValue): EnvironmentVariable { + const result = new EnvironmentVariable(); result.name = envVar.name; result.value = envVar.value; return result; @@ -501,7 +607,7 @@ export class PublicAPIConverter { if (port.url) { result.url = port.url; } - result.policy = this.toPortPolicy(port.visibility); + result.admission = this.toAdmission(port.visibility === "public"); result.protocol = this.toPortProtocol(port.protocol); return result; } @@ -515,15 +621,6 @@ export class PublicAPIConverter { } } - toPortPolicy(visibility: string | undefined): WorkspacePort_Policy { - switch (visibility) { - case "public": - return WorkspacePort_Policy.PUBLIC; - default: - return WorkspacePort_Policy.PRIVATE; - } - } - toGitStatus( arg: WorkspaceInfo | ProtocolWorkspace | WorkspaceInstance, current?: WorkspaceGitStatus, @@ -580,6 +677,9 @@ export class PublicAPIConverter { return WorkspacePhase_Phase.RUNNING; case "interrupted": return WorkspacePhase_Phase.INTERRUPTED; + // TODO: + // case "pause": + // return WorkspacePhase_Phase.PAUSED; case "stopping": return WorkspacePhase_Phase.STOPPING; case "stopped": diff --git a/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts b/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts index 1e47b834994d23..b44976e6f72551 100644 --- a/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts +++ b/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts @@ -1166,6 +1166,11 @@ export class WorkspaceSpec extends Message { */ logUrl = ""; + /** + * @generated from field: gitpod.v1.EditorReference editor = 13; + */ + editor?: EditorReference; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -1186,6 +1191,7 @@ export class WorkspaceSpec extends Message { { no: 10, name: "subassembly_references", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, { no: 11, name: "last_user_activity", kind: "message", T: Timestamp }, { no: 12, name: "log_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 13, name: "editor", kind: "message", T: EditorReference }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceSpec { diff --git a/components/server/src/api/envvar-service-api.ts b/components/server/src/api/envvar-service-api.ts index e1a0207d3753a8..6a47bf3b0907d8 100644 --- a/components/server/src/api/envvar-service-api.ts +++ b/components/server/src/api/envvar-service-api.ts @@ -26,7 +26,7 @@ import { DeleteConfigurationEnvironmentVariableResponse, ResolveWorkspaceEnvironmentVariablesResponse, ResolveWorkspaceEnvironmentVariablesRequest, - ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable, + EnvironmentVariable, } from "@gitpod/public-api/lib/gitpod/v1/envvar_pb"; import { inject, injectable } from "inversify"; import { EnvVarService } from "../user/env-var-service"; @@ -215,8 +215,7 @@ export class EnvironmentVariableServiceAPI implements ServiceImpl - new ResolveWorkspaceEnvironmentVariablesResponse_EnvironmentVariable({ name: i.name, value: i.value }), + (i) => new EnvironmentVariable({ name: i.name, value: i.value }), ); return response; diff --git a/components/server/src/api/workspace-service-api.ts b/components/server/src/api/workspace-service-api.ts index 8c26fb7baec43c..d9c50825f2e0aa 100644 --- a/components/server/src/api/workspace-service-api.ts +++ b/components/server/src/api/workspace-service-api.ts @@ -26,6 +26,10 @@ import { SendHeartBeatRequest, SendHeartBeatResponse, GetWorkspaceDefaultImageResponse_Source, + ParseContextURLRequest, + ParseContextURLResponse, + UpdateWorkspaceRequest, + UpdateWorkspaceResponse, } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; import { inject, injectable } from "inversify"; import { WorkspaceService } from "../workspace/workspace-service"; @@ -114,28 +118,31 @@ export class WorkspaceServiceAPI implements ServiceImpl { + throw new ApplicationError(ErrorCodes.UNIMPLEMENTED, "not implemented"); + } + + async parseContextURL(req: ParseContextURLRequest): Promise { + throw new ApplicationError(ErrorCodes.UNIMPLEMENTED, "not implemented"); + } } From 014b39bc570abfb5ea87688a28f3cacf6ce45203 Mon Sep 17 00:00:00 2001 From: Huiwen Date: Wed, 29 Nov 2023 10:31:10 +0000 Subject: [PATCH 3/8] update proto --- components/public-api/gitpod/v1/workspace.proto | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/components/public-api/gitpod/v1/workspace.proto b/components/public-api/gitpod/v1/workspace.proto index ce031b3e09e8d3..47c7afdb671f14 100644 --- a/components/public-api/gitpod/v1/workspace.proto +++ b/components/public-api/gitpod/v1/workspace.proto @@ -114,26 +114,26 @@ message CreateAndStartWorkspaceRequest { // workspace_class is the class of the workspace we ought to start string workspace_class = 2; + + // editor specifies the editor that will be used with this workspace. + EditorReference editor = 3; } // metadata is data associated with this workspace that's required for other parts of Gitpod to function - WorkspaceMetadata metadata = 2; + WorkspaceMetadata metadata = 1; oneof source { // context_url is the URL from which the workspace is created - ContextURL context_url = 3; + ContextURL context_url = 2; // spec is the configuration of the workspace that's required for the to start the workspace - WorkspaceSpec spec = 4; + WorkspaceSpec spec = 3; } - // editor specifies the editor that will be used with this workspace. - EditorReference editor = 5; - // force_default_config indicates that the workspace should be created with // the default configuration instead of the configuration provided in // `.gitpod.yml` file - bool force_default_config = 7 [deprecated = true]; + bool force_default_config = 4 [deprecated = true]; } message CreateAndStartWorkspaceResponse { From bd69a0557d6030b5493aec4ae18b72221ed0eae9 Mon Sep 17 00:00:00 2001 From: Huiwen Date: Wed, 29 Nov 2023 10:41:12 +0000 Subject: [PATCH 4/8] fix rebase --- components/dashboard/src/data/setup.tsx | 2 +- .../src/workspaces/CreateWorkspacePage.tsx | 4 +- components/public-api/go/v1/workspace.pb.go | 132 +++++++++--------- .../typescript/src/gitpod/v1/workspace_pb.ts | 32 ++--- 4 files changed, 85 insertions(+), 85 deletions(-) diff --git a/components/dashboard/src/data/setup.tsx b/components/dashboard/src/data/setup.tsx index 28d2ac4ea6a0e0..b023b6f6f0417d 100644 --- a/components/dashboard/src/data/setup.tsx +++ b/components/dashboard/src/data/setup.tsx @@ -31,7 +31,7 @@ import * as SSHClasses from "@gitpod/public-api/lib/gitpod/v1/ssh_pb"; // This is used to version the cache // If data we cache changes in a non-backwards compatible way, increment this version // That will bust any previous cache versions a client may have stored -const CACHE_VERSION = "10"; +const CACHE_VERSION = "11"; export function noPersistence(queryKey: QueryKey): QueryKey { return [...queryKey, "no-persistence"]; diff --git a/components/dashboard/src/workspaces/CreateWorkspacePage.tsx b/components/dashboard/src/workspaces/CreateWorkspacePage.tsx index 7a89270e0243fd..1679975e1caf9c 100644 --- a/components/dashboard/src/workspaces/CreateWorkspacePage.tsx +++ b/components/dashboard/src/workspaces/CreateWorkspacePage.tsx @@ -199,8 +199,8 @@ export function CreateWorkspacePage() { opts.forceDefaultConfig = true; } - if (!opts.editor) { - opts.editor = { + if (opts.source?.case === "contextUrl") { + opts.source.value.editor = { name: selectedIde, version: useLatestIde ? "latest" : undefined, }; diff --git a/components/public-api/go/v1/workspace.pb.go b/components/public-api/go/v1/workspace.pb.go index 9e3216e5956475..b089e2a85144c6 100644 --- a/components/public-api/go/v1/workspace.pb.go +++ b/components/public-api/go/v1/workspace.pb.go @@ -851,20 +851,18 @@ type CreateAndStartWorkspaceRequest struct { unknownFields protoimpl.UnknownFields // metadata is data associated with this workspace that's required for other parts of Gitpod to function - Metadata *WorkspaceMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` + Metadata *WorkspaceMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` // Types that are assignable to Source: // // *CreateAndStartWorkspaceRequest_ContextUrl // *CreateAndStartWorkspaceRequest_Spec Source isCreateAndStartWorkspaceRequest_Source `protobuf_oneof:"source"` - // editor specifies the editor that will be used with this workspace. - Editor *EditorReference `protobuf:"bytes,5,opt,name=editor,proto3" json:"editor,omitempty"` // force_default_config indicates that the workspace should be created with // the default configuration instead of the configuration provided in // `.gitpod.yml` file // // Deprecated: Do not use. - ForceDefaultConfig bool `protobuf:"varint,7,opt,name=force_default_config,json=forceDefaultConfig,proto3" json:"force_default_config,omitempty"` + ForceDefaultConfig bool `protobuf:"varint,4,opt,name=force_default_config,json=forceDefaultConfig,proto3" json:"force_default_config,omitempty"` } func (x *CreateAndStartWorkspaceRequest) Reset() { @@ -927,13 +925,6 @@ func (x *CreateAndStartWorkspaceRequest) GetSpec() *WorkspaceSpec { return nil } -func (x *CreateAndStartWorkspaceRequest) GetEditor() *EditorReference { - if x != nil { - return x.Editor - } - return nil -} - // Deprecated: Do not use. func (x *CreateAndStartWorkspaceRequest) GetForceDefaultConfig() bool { if x != nil { @@ -948,12 +939,12 @@ type isCreateAndStartWorkspaceRequest_Source interface { type CreateAndStartWorkspaceRequest_ContextUrl struct { // context_url is the URL from which the workspace is created - ContextUrl *CreateAndStartWorkspaceRequest_ContextURL `protobuf:"bytes,3,opt,name=context_url,json=contextUrl,proto3,oneof"` + ContextUrl *CreateAndStartWorkspaceRequest_ContextURL `protobuf:"bytes,2,opt,name=context_url,json=contextUrl,proto3,oneof"` } type CreateAndStartWorkspaceRequest_Spec struct { // spec is the configuration of the workspace that's required for the to start the workspace - Spec *WorkspaceSpec `protobuf:"bytes,4,opt,name=spec,proto3,oneof"` + Spec *WorkspaceSpec `protobuf:"bytes,3,opt,name=spec,proto3,oneof"` } func (*CreateAndStartWorkspaceRequest_ContextUrl) isCreateAndStartWorkspaceRequest_Source() {} @@ -2863,6 +2854,8 @@ type CreateAndStartWorkspaceRequest_ContextURL struct { Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` // workspace_class is the class of the workspace we ought to start WorkspaceClass string `protobuf:"bytes,2,opt,name=workspace_class,json=workspaceClass,proto3" json:"workspace_class,omitempty"` + // editor specifies the editor that will be used with this workspace. + Editor *EditorReference `protobuf:"bytes,3,opt,name=editor,proto3" json:"editor,omitempty"` } func (x *CreateAndStartWorkspaceRequest_ContextURL) Reset() { @@ -2911,6 +2904,13 @@ func (x *CreateAndStartWorkspaceRequest_ContextURL) GetWorkspaceClass() string { return "" } +func (x *CreateAndStartWorkspaceRequest_ContextURL) GetEditor() *EditorReference { + if x != nil { + return x.Editor + } + return nil +} + // Timeout configures the workspace timeout type WorkspaceSpec_Timeout struct { state protoimpl.MessageState @@ -3665,30 +3665,30 @@ var file_gitpod_v1_workspace_proto_rawDesc = []byte{ 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0xa0, 0x03, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x57, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, + 0x74, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, - 0x72, 0x6c, 0x12, 0x2e, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x72, 0x6c, 0x12, 0x2e, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x04, 0x73, 0x70, - 0x65, 0x63, 0x12, 0x32, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x45, - 0x64, 0x69, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, - 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x12, 0x34, 0x0a, 0x14, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x44, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x47, 0x0a, 0x0a, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, - 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x27, 0x0a, 0x0f, - 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, + 0x65, 0x63, 0x12, 0x34, 0x0a, 0x14, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x42, 0x02, 0x18, 0x01, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x7b, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, + 0x73, 0x12, 0x32, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x64, + 0x69, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x65, + 0x64, 0x69, 0x74, 0x6f, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x55, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, @@ -4331,9 +4331,9 @@ var file_gitpod_v1_workspace_proto_goTypes = []interface{}{ (*UpdateWorkspaceRequest_UpdateWorkspaceSpec)(nil), // 55: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec (*PaginationRequest)(nil), // 56: gitpod.v1.PaginationRequest (*PaginationResponse)(nil), // 57: gitpod.v1.PaginationResponse - (*EditorReference)(nil), // 58: gitpod.v1.EditorReference - (*EnvironmentVariable)(nil), // 59: gitpod.v1.EnvironmentVariable - (*timestamppb.Timestamp)(nil), // 60: google.protobuf.Timestamp + (*EnvironmentVariable)(nil), // 58: gitpod.v1.EnvironmentVariable + (*timestamppb.Timestamp)(nil), // 59: google.protobuf.Timestamp + (*EditorReference)(nil), // 60: gitpod.v1.EditorReference (*durationpb.Duration)(nil), // 61: google.protobuf.Duration } var file_gitpod_v1_workspace_proto_depIdxs = []int32{ @@ -4345,41 +4345,41 @@ var file_gitpod_v1_workspace_proto_depIdxs = []int32{ 27, // 5: gitpod.v1.CreateAndStartWorkspaceRequest.metadata:type_name -> gitpod.v1.WorkspaceMetadata 43, // 6: gitpod.v1.CreateAndStartWorkspaceRequest.context_url:type_name -> gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL 28, // 7: gitpod.v1.CreateAndStartWorkspaceRequest.spec:type_name -> gitpod.v1.WorkspaceSpec - 58, // 8: gitpod.v1.CreateAndStartWorkspaceRequest.editor:type_name -> gitpod.v1.EditorReference - 26, // 9: gitpod.v1.CreateAndStartWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace - 26, // 10: gitpod.v1.StartWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace - 1, // 11: gitpod.v1.GetWorkspaceDefaultImageResponse.source:type_name -> gitpod.v1.GetWorkspaceDefaultImageResponse.Source - 27, // 12: gitpod.v1.Workspace.metadata:type_name -> gitpod.v1.WorkspaceMetadata - 28, // 13: gitpod.v1.Workspace.spec:type_name -> gitpod.v1.WorkspaceSpec - 29, // 14: gitpod.v1.Workspace.status:type_name -> gitpod.v1.WorkspaceStatus - 44, // 15: gitpod.v1.WorkspaceMetadata.annotations:type_name -> gitpod.v1.WorkspaceMetadata.AnnotationsEntry - 33, // 16: gitpod.v1.WorkspaceSpec.initializer:type_name -> gitpod.v1.WorkspaceInitializer - 2, // 17: gitpod.v1.WorkspaceSpec.type:type_name -> gitpod.v1.WorkspaceSpec.WorkspaceType - 30, // 18: gitpod.v1.WorkspaceSpec.ports:type_name -> gitpod.v1.WorkspacePort - 59, // 19: gitpod.v1.WorkspaceSpec.environment_variables:type_name -> gitpod.v1.EnvironmentVariable - 46, // 20: gitpod.v1.WorkspaceSpec.git:type_name -> gitpod.v1.WorkspaceSpec.GitSpec - 45, // 21: gitpod.v1.WorkspaceSpec.timeout:type_name -> gitpod.v1.WorkspaceSpec.Timeout - 0, // 22: gitpod.v1.WorkspaceSpec.admission:type_name -> gitpod.v1.AdmissionLevel - 60, // 23: gitpod.v1.WorkspaceSpec.last_user_activity:type_name -> google.protobuf.Timestamp - 58, // 24: gitpod.v1.WorkspaceSpec.editor:type_name -> gitpod.v1.EditorReference - 32, // 25: gitpod.v1.WorkspaceStatus.phase:type_name -> gitpod.v1.WorkspacePhase - 47, // 26: gitpod.v1.WorkspaceStatus.conditions:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions - 48, // 27: gitpod.v1.WorkspaceStatus.prebuild_result:type_name -> gitpod.v1.WorkspaceStatus.PrebuildResult - 31, // 28: gitpod.v1.WorkspaceStatus.git_status:type_name -> gitpod.v1.WorkspaceGitStatus - 0, // 29: gitpod.v1.WorkspacePort.admission:type_name -> gitpod.v1.AdmissionLevel - 4, // 30: gitpod.v1.WorkspacePort.protocol:type_name -> gitpod.v1.WorkspacePort.Protocol - 5, // 31: gitpod.v1.WorkspacePhase.name:type_name -> gitpod.v1.WorkspacePhase.Phase - 60, // 32: gitpod.v1.WorkspacePhase.last_transition_time:type_name -> google.protobuf.Timestamp - 49, // 33: gitpod.v1.WorkspaceInitializer.specs:type_name -> gitpod.v1.WorkspaceInitializer.Spec - 6, // 34: gitpod.v1.GitInitializer.target_mode:type_name -> gitpod.v1.GitInitializer.CloneTargetMode - 50, // 35: gitpod.v1.GitInitializer.config:type_name -> gitpod.v1.GitInitializer.GitConfig - 52, // 36: gitpod.v1.FileDownloadInitializer.files:type_name -> gitpod.v1.FileDownloadInitializer.FileInfo - 53, // 37: gitpod.v1.UpdateWorkspaceRequest.metadata:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceMetadata - 55, // 38: gitpod.v1.UpdateWorkspaceRequest.spec:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec - 31, // 39: gitpod.v1.UpdateWorkspaceRequest.git_status:type_name -> gitpod.v1.WorkspaceGitStatus - 26, // 40: gitpod.v1.UpdateWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace - 27, // 41: gitpod.v1.ParseContextURLResponse.metadata:type_name -> gitpod.v1.WorkspaceMetadata - 28, // 42: gitpod.v1.ParseContextURLResponse.spec:type_name -> gitpod.v1.WorkspaceSpec + 26, // 8: gitpod.v1.CreateAndStartWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace + 26, // 9: gitpod.v1.StartWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace + 1, // 10: gitpod.v1.GetWorkspaceDefaultImageResponse.source:type_name -> gitpod.v1.GetWorkspaceDefaultImageResponse.Source + 27, // 11: gitpod.v1.Workspace.metadata:type_name -> gitpod.v1.WorkspaceMetadata + 28, // 12: gitpod.v1.Workspace.spec:type_name -> gitpod.v1.WorkspaceSpec + 29, // 13: gitpod.v1.Workspace.status:type_name -> gitpod.v1.WorkspaceStatus + 44, // 14: gitpod.v1.WorkspaceMetadata.annotations:type_name -> gitpod.v1.WorkspaceMetadata.AnnotationsEntry + 33, // 15: gitpod.v1.WorkspaceSpec.initializer:type_name -> gitpod.v1.WorkspaceInitializer + 2, // 16: gitpod.v1.WorkspaceSpec.type:type_name -> gitpod.v1.WorkspaceSpec.WorkspaceType + 30, // 17: gitpod.v1.WorkspaceSpec.ports:type_name -> gitpod.v1.WorkspacePort + 58, // 18: gitpod.v1.WorkspaceSpec.environment_variables:type_name -> gitpod.v1.EnvironmentVariable + 46, // 19: gitpod.v1.WorkspaceSpec.git:type_name -> gitpod.v1.WorkspaceSpec.GitSpec + 45, // 20: gitpod.v1.WorkspaceSpec.timeout:type_name -> gitpod.v1.WorkspaceSpec.Timeout + 0, // 21: gitpod.v1.WorkspaceSpec.admission:type_name -> gitpod.v1.AdmissionLevel + 59, // 22: gitpod.v1.WorkspaceSpec.last_user_activity:type_name -> google.protobuf.Timestamp + 60, // 23: gitpod.v1.WorkspaceSpec.editor:type_name -> gitpod.v1.EditorReference + 32, // 24: gitpod.v1.WorkspaceStatus.phase:type_name -> gitpod.v1.WorkspacePhase + 47, // 25: gitpod.v1.WorkspaceStatus.conditions:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions + 48, // 26: gitpod.v1.WorkspaceStatus.prebuild_result:type_name -> gitpod.v1.WorkspaceStatus.PrebuildResult + 31, // 27: gitpod.v1.WorkspaceStatus.git_status:type_name -> gitpod.v1.WorkspaceGitStatus + 0, // 28: gitpod.v1.WorkspacePort.admission:type_name -> gitpod.v1.AdmissionLevel + 4, // 29: gitpod.v1.WorkspacePort.protocol:type_name -> gitpod.v1.WorkspacePort.Protocol + 5, // 30: gitpod.v1.WorkspacePhase.name:type_name -> gitpod.v1.WorkspacePhase.Phase + 59, // 31: gitpod.v1.WorkspacePhase.last_transition_time:type_name -> google.protobuf.Timestamp + 49, // 32: gitpod.v1.WorkspaceInitializer.specs:type_name -> gitpod.v1.WorkspaceInitializer.Spec + 6, // 33: gitpod.v1.GitInitializer.target_mode:type_name -> gitpod.v1.GitInitializer.CloneTargetMode + 50, // 34: gitpod.v1.GitInitializer.config:type_name -> gitpod.v1.GitInitializer.GitConfig + 52, // 35: gitpod.v1.FileDownloadInitializer.files:type_name -> gitpod.v1.FileDownloadInitializer.FileInfo + 53, // 36: gitpod.v1.UpdateWorkspaceRequest.metadata:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceMetadata + 55, // 37: gitpod.v1.UpdateWorkspaceRequest.spec:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec + 31, // 38: gitpod.v1.UpdateWorkspaceRequest.git_status:type_name -> gitpod.v1.WorkspaceGitStatus + 26, // 39: gitpod.v1.UpdateWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace + 27, // 40: gitpod.v1.ParseContextURLResponse.metadata:type_name -> gitpod.v1.WorkspaceMetadata + 28, // 41: gitpod.v1.ParseContextURLResponse.spec:type_name -> gitpod.v1.WorkspaceSpec + 60, // 42: gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL.editor:type_name -> gitpod.v1.EditorReference 61, // 43: gitpod.v1.WorkspaceSpec.Timeout.inactivity:type_name -> google.protobuf.Duration 61, // 44: gitpod.v1.WorkspaceSpec.Timeout.disconnected:type_name -> google.protobuf.Duration 61, // 45: gitpod.v1.WorkspaceSpec.Timeout.maximum_lifetime:type_name -> google.protobuf.Duration diff --git a/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts b/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts index b44976e6f72551..f1507ab9e06e44 100644 --- a/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts +++ b/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts @@ -338,7 +338,7 @@ export class CreateAndStartWorkspaceRequest extends Message [ - { no: 2, name: "metadata", kind: "message", T: WorkspaceMetadata }, - { no: 3, name: "context_url", kind: "message", T: CreateAndStartWorkspaceRequest_ContextURL, oneof: "source" }, - { no: 4, name: "spec", kind: "message", T: WorkspaceSpec, oneof: "source" }, - { no: 5, name: "editor", kind: "message", T: EditorReference }, - { no: 7, name: "force_default_config", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 1, name: "metadata", kind: "message", T: WorkspaceMetadata }, + { no: 2, name: "context_url", kind: "message", T: CreateAndStartWorkspaceRequest_ContextURL, oneof: "source" }, + { no: 3, name: "spec", kind: "message", T: WorkspaceSpec, oneof: "source" }, + { no: 4, name: "force_default_config", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): CreateAndStartWorkspaceRequest { @@ -430,6 +422,13 @@ export class CreateAndStartWorkspaceRequest_ContextURL extends Message) { super(); proto3.util.initPartial(data, this); @@ -440,6 +439,7 @@ export class CreateAndStartWorkspaceRequest_ContextURL extends Message [ { no: 1, name: "url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 2, name: "workspace_class", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "editor", kind: "message", T: EditorReference }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): CreateAndStartWorkspaceRequest_ContextURL { From 598a47874abb805b5e7ab387b9e523e555a729cc Mon Sep 17 00:00:00 2001 From: Huiwen Date: Wed, 29 Nov 2023 10:46:58 +0000 Subject: [PATCH 5/8] fix rebase - 2 --- components/server/src/api/workspace-service-api.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/components/server/src/api/workspace-service-api.ts b/components/server/src/api/workspace-service-api.ts index d9c50825f2e0aa..47defe4e7334f2 100644 --- a/components/server/src/api/workspace-service-api.ts +++ b/components/server/src/api/workspace-service-api.ts @@ -121,15 +121,15 @@ export class WorkspaceServiceAPI implements ServiceImpl Date: Wed, 29 Nov 2023 10:49:37 +0000 Subject: [PATCH 6/8] 1 --- .../dashboard/src/service/json-rpc-workspace-client.ts | 9 +++------ components/server/src/api/workspace-service-api.ts | 3 --- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/components/dashboard/src/service/json-rpc-workspace-client.ts b/components/dashboard/src/service/json-rpc-workspace-client.ts index cc8ac2537cb609..69578454bab024 100644 --- a/components/dashboard/src/service/json-rpc-workspace-client.ts +++ b/components/dashboard/src/service/json-rpc-workspace-client.ts @@ -138,12 +138,9 @@ export class JsonRpcWorkspaceClient implements PromiseClient Date: Wed, 29 Nov 2023 11:20:49 +0000 Subject: [PATCH 7/8] fix editor --- .../src/workspaces/CreateWorkspacePage.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/components/dashboard/src/workspaces/CreateWorkspacePage.tsx b/components/dashboard/src/workspaces/CreateWorkspacePage.tsx index 1679975e1caf9c..78ff40d2f8a9f8 100644 --- a/components/dashboard/src/workspaces/CreateWorkspacePage.tsx +++ b/components/dashboard/src/workspaces/CreateWorkspacePage.tsx @@ -199,13 +199,6 @@ export function CreateWorkspacePage() { opts.forceDefaultConfig = true; } - if (opts.source?.case === "contextUrl") { - opts.source.value.editor = { - name: selectedIde, - version: useLatestIde ? "latest" : undefined, - }; - } - try { if (createWorkspaceMutation.isStarting) { console.log("Skipping duplicate createWorkspace call."); @@ -226,6 +219,13 @@ export function CreateWorkspacePage() { value: { url: contextURL, workspaceClass: selectedWsClass, + editor: + opts.source?.case === "contextUrl" && opts.source.value.editor + ? opts.source.value.editor + : { + name: selectedIde, + version: useLatestIde ? "latest" : undefined, + }, }, }, ...opts, From 77ad451acce7a366ee7a5297577bbab59cb2ac5d Mon Sep 17 00:00:00 2001 From: Huiwen Date: Wed, 29 Nov 2023 13:10:32 +0000 Subject: [PATCH 8/8] Update doc --- components/public-api/gitpod/v1/workspace.proto | 6 +++--- components/public-api/go/v1/workspace.pb.go | 6 +++--- .../public-api/typescript/src/gitpod/v1/workspace_pb.ts | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/components/public-api/gitpod/v1/workspace.proto b/components/public-api/gitpod/v1/workspace.proto index 47c7afdb671f14..ee9b76a8641d61 100644 --- a/components/public-api/gitpod/v1/workspace.proto +++ b/components/public-api/gitpod/v1/workspace.proto @@ -216,16 +216,16 @@ message Workspace { // WorkspaceMetadata is data associated with a workspace that's required for other parts of the system to function message WorkspaceMetadata { - // organization_id is the ID of the organization that contains the workspace + // owner_id is the ID of the Gitpod user to whom we'll bill this workspace and who we consider responsible for its content string owner_id = 1; - // owner is the ID of the Gitpod user to whom we'll bill this workspace and who we consider responsible for its content + // organization_id is the ID of the organization that contains the workspace string organization_id = 2; // configuration_id is the ID of the configuration used by this workspace string configuration_id = 3; - // Annotations are key/value pairs that gets attached to the workspace. + // annotations are key/value pairs that gets attached to the workspace. // +internal - not yet implemented map annotations = 4; diff --git a/components/public-api/go/v1/workspace.pb.go b/components/public-api/go/v1/workspace.pb.go index b089e2a85144c6..b50c503660c4a9 100644 --- a/components/public-api/go/v1/workspace.pb.go +++ b/components/public-api/go/v1/workspace.pb.go @@ -1576,13 +1576,13 @@ type WorkspaceMetadata struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // organization_id is the ID of the organization that contains the workspace + // owner_id is the ID of the Gitpod user to whom we'll bill this workspace and who we consider responsible for its content OwnerId string `protobuf:"bytes,1,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` - // owner is the ID of the Gitpod user to whom we'll bill this workspace and who we consider responsible for its content + // organization_id is the ID of the organization that contains the workspace OrganizationId string `protobuf:"bytes,2,opt,name=organization_id,json=organizationId,proto3" json:"organization_id,omitempty"` // configuration_id is the ID of the configuration used by this workspace ConfigurationId string `protobuf:"bytes,3,opt,name=configuration_id,json=configurationId,proto3" json:"configuration_id,omitempty"` - // Annotations are key/value pairs that gets attached to the workspace. + // annotations are key/value pairs that gets attached to the workspace. // +internal - not yet implemented Annotations map[string]string `protobuf:"bytes,4,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // name is the name of the workspace as specified by the user diff --git a/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts b/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts index f1507ab9e06e44..29bea0033452df 100644 --- a/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts +++ b/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts @@ -990,14 +990,14 @@ export class Workspace extends Message { */ export class WorkspaceMetadata extends Message { /** - * organization_id is the ID of the organization that contains the workspace + * owner_id is the ID of the Gitpod user to whom we'll bill this workspace and who we consider responsible for its content * * @generated from field: string owner_id = 1; */ ownerId = ""; /** - * owner is the ID of the Gitpod user to whom we'll bill this workspace and who we consider responsible for its content + * organization_id is the ID of the organization that contains the workspace * * @generated from field: string organization_id = 2; */ @@ -1011,7 +1011,7 @@ export class WorkspaceMetadata extends Message { configurationId = ""; /** - * Annotations are key/value pairs that gets attached to the workspace. + * annotations are key/value pairs that gets attached to the workspace. * +internal - not yet implemented * * @generated from field: map annotations = 4;