diff --git a/Makefile b/Makefile index fef6e03f8a..4f73e632d0 100644 --- a/Makefile +++ b/Makefile @@ -192,6 +192,10 @@ gen/test-tls: -subj "/CN=localhost" \ -config pkg/rpc/testdata/tls.config +.PHONY: gen/contributions +gen/contributions: + ./hack/gen-contributions.sh + .PHONY: release release: release/init release/docs diff --git a/README.md b/README.md index 14423d938f..10fd6821ca 100644 --- a/README.md +++ b/README.md @@ -79,31 +79,34 @@ We'd love you to join us! Please see the [Contributor Guide](https://pipecd.dev/ - - + + + + - - - + + + - - - - - - - + + + + + + - + + + - + - - - + + + diff --git a/docs/content/en/docs-dev/examples/_index.md b/docs/content/en/docs-dev/examples/_index.md index 96a0197d7f..8030751054 100755 --- a/docs/content/en/docs-dev/examples/_index.md +++ b/docs/content/en/docs-dev/examples/_index.md @@ -81,6 +81,8 @@ https://github.com/pipe-cd/examples | [bluegreen](https://github.com/pipe-cd/examples/tree/master/ecs/bluegreen) | Deployment pipeline with blue-green strategy. | | [secret-management](https://github.com/pipe-cd/examples/tree/master/ecs/secret-management) | Demonstrate how to manage sensitive data by using [Secret Management](../user-guide/managing-application/secret-management/) feature. | | [wait-approval](https://github.com/pipe-cd/examples/tree/master/ecs/wait-approval) | Deployment pipeline that contains a manual approval stage. | +| [standalone-task](https://github.com/pipe-cd/examples/tree/master/ecs/standalone-task) | Deployment Standalone Task. (`Standalone task is only supported for Quick sync`) | + ### Deployment chain diff --git a/docs/content/en/docs-dev/user-guide/command-line-tool.md b/docs/content/en/docs-dev/user-guide/command-line-tool.md index 10af71bbff..d9c3ae6f72 100644 --- a/docs/content/en/docs-dev/user-guide/command-line-tool.md +++ b/docs/content/en/docs-dev/user-guide/command-line-tool.md @@ -193,6 +193,17 @@ pipectl application list \ --app-kind=KUBERNETES \ ``` +### Disable an application + +Disable an application with given id: + +``` console +pipectl application disable \ + --address={CONTROL_PLANE_API_ADDRESS} \ + --api-key={API_KEY} \ + --app-id={APPLICATION_ID} +``` + ### Deleting an application Delete an application with given id: diff --git a/docs/content/en/docs-dev/user-guide/managing-application/defining-app-configuration/ecs.md b/docs/content/en/docs-dev/user-guide/managing-application/defining-app-configuration/ecs.md index 18eda91166..54fe3ad3d3 100644 --- a/docs/content/en/docs-dev/user-guide/managing-application/defining-app-configuration/ecs.md +++ b/docs/content/en/docs-dev/user-guide/managing-application/defining-app-configuration/ecs.md @@ -6,7 +6,16 @@ description: > Specific guide to configuring deployment for Amazon ECS application. --- -Deploying an Amazon ECS application requires `TaskDefinition` and `Service` configuration files placing inside the application directory. Those files contain all configuration for [ECS TaskDefinition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html) object and [ECS Service](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html) object, and will be used by Piped agent while deploy your application/service to ECS cluster. +There are two main ways to deploy an Amazon ECS application. +- Your application is a one-time or periodic batch job. + - it's a standalone task. + - you need to prepare `TaskDefinition` +- Your application is deployed to run continuously or behind a load balancer. + - you need to prepare `TaskDefinition` and `Service` + +To deploy an Amazon ECS application, the `TaskDefinition` configuration file must be located in the application directory. This file contains all configuration for [ECS TaskDefinition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html) object and will be used by Piped agent while deploying your application/service to the ECS cluster. + +To deploy your application to run continuously or to place it behind a load balancer, You need to create [ECS Service](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html). The `Service` configuration file also must be located in the application directory. This file contains all configurations for [ECS Service](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html) object. If you're not familiar with ECS, you can get examples for those files from [here](../../../../examples/#ecs-applications). @@ -14,6 +23,53 @@ If you're not familiar with ECS, you can get examples for those files from [here By default, when the [pipeline](../../../configuration-reference/#ecs-application) was not specified, PipeCD triggers a quick sync deployment for the merged pull request. Quick sync for an ECS deployment will roll out the new version and switch all traffic to it immediately. +> In case of standalone task, only Quick sync is supported. + +Here is an example for Quick sync. + + {{< tabpane >}} + {{< tab lang="yaml" header="application" >}} +apiVersion: pipecd.dev/v1beta1 +kind: ECSApp +spec: + name: simple + labels: + env: example + team: xyz + input: + # Path to Service configuration file in Yaml/JSON format. + serviceDefinitionFile: servicedef.yaml + # Path to TaskDefinition configuration file in Yaml/JSON format. + # Default is `taskdef.json` + taskDefinitionFile: taskdef.yaml + targetGroups: + primary: + targetGroupArn: arn:aws:elasticloadbalancing:ap-northeast-1:XXXX:targetgroup/ecs-lb/YYYY + containerName: web + containerPort: 80 + {{< /tab >}} + {{< tab lang="yaml" header="standalone task" >}} +apiVersion: pipecd.dev/v1beta1 +kind: ECSApp +spec: + name: standalonetask-fargate + labels: + env: example + team: xyz + input: + # Path to TaskDefinition configuration file in Yaml/JSON format. + # Default is `taskdef.json` + taskDefinitionFile: taskdef.yaml + clusterArn: arn:aws:ecs:ap-northeast-1:XXXX:cluster/test-cluster + awsvpcConfiguration: + assignPublicIp: ENABLED + subnets: + - subnet-YYYY + - subnet-YYYY + securityGroups: + - sg-YYYY + {{< /tab >}} + {{< /tabpane >}} ## Sync with the specified pipeline @@ -46,7 +102,6 @@ kind: ECSApp spec: input: # Path to Service configuration file in Yaml/JSON format. - # Default is `service.json` serviceDefinitionFile: servicedef.yaml # Path to TaskDefinition configuration file in Yaml/JSON format. # Default is `taskdef.json` diff --git a/examples/ecs/standalone-task/launch-type/ec2/network-mode/awsvpc/app.pipecd.yaml b/examples/ecs/standalone-task/launch-type/ec2/network-mode/awsvpc/app.pipecd.yaml new file mode 100644 index 0000000000..187f3fa8f8 --- /dev/null +++ b/examples/ecs/standalone-task/launch-type/ec2/network-mode/awsvpc/app.pipecd.yaml @@ -0,0 +1,19 @@ +apiVersion: pipecd.dev/v1beta1 +kind: ECSApp +spec: + name: standalonetask-ec2-awsvpc + labels: + env: example + team: xyz + input: + taskDefinitionFile: taskdef.yaml + clusterArn: arn:aws:ecs:ap-northeast-1:XXXX:cluster/test-cluster + launchType: EC2 + awsvpcConfiguration: + subnets: + - subnet-YYYY + - subnet-YYYY + description: | + This app demonstrates how to deploy an ECS application with [Quick Sync](https://pipecd.dev/docs/concepts/#sync-strategy) strategy.\ + No pipeline is specified then in each deployment PipeCD will roll out the new version and switch all traffic to it immediately.\ + References: [adding a new app](https://pipecd.dev/docs/user-guide/managing-application/adding-an-application/), [app configuration](https://pipecd.dev/docs/user-guide/configuration-reference/) diff --git a/examples/ecs/standalone-task/launch-type/ec2/network-mode/awsvpc/taskdef.yaml b/examples/ecs/standalone-task/launch-type/ec2/network-mode/awsvpc/taskdef.yaml new file mode 100644 index 0000000000..f1373f1ab2 --- /dev/null +++ b/examples/ecs/standalone-task/launch-type/ec2/network-mode/awsvpc/taskdef.yaml @@ -0,0 +1,20 @@ +family: nginx-test-fam-ec2 +executionRoleArn: arn:aws:iam::XXXX:role/ecsTaskExecutionRole +containerDefinitions: + - command: null + cpu: 100 + image: XXXX.dkr.ecr.ap-northeast-1.amazonaws.com/nginx:1 + memory: 100 + mountPoints: [] + name: web + portMappings: + - containerPort: 80 +compatibilities: + - EC2 +requiresCompatibilities: + - EC2 +networkMode: awsvpc +memory: 512 +cpu: 256 +pidMode: "" +volumes: [] diff --git a/examples/ecs/standalone-task/launch-type/ec2/network-mode/bridge/app.pipecd.yaml b/examples/ecs/standalone-task/launch-type/ec2/network-mode/bridge/app.pipecd.yaml new file mode 100644 index 0000000000..e8c49b3550 --- /dev/null +++ b/examples/ecs/standalone-task/launch-type/ec2/network-mode/bridge/app.pipecd.yaml @@ -0,0 +1,15 @@ +apiVersion: pipecd.dev/v1beta1 +kind: ECSApp +spec: + name: standalonetask-ec2-bridge-1 + labels: + env: example + team: xyz + input: + taskDefinitionFile: taskdef.yaml + launchType: EC2 + clusterArn: arn:aws:ecs:ap-northeast-1:XXXX:cluster/test-cluster + description: | + This app demonstrates how to deploy an ECS application with [Quick Sync](https://pipecd.dev/docs/concepts/#sync-strategy) strategy.\ + No pipeline is specified then in each deployment PipeCD will roll out the new version and switch all traffic to it immediately.\ + References: [adding a new app](https://pipecd.dev/docs/user-guide/managing-application/adding-an-application/), [app configuration](https://pipecd.dev/docs/user-guide/configuration-reference/) diff --git a/examples/ecs/standalone-task/launch-type/ec2/network-mode/bridge/taskdef.yaml b/examples/ecs/standalone-task/launch-type/ec2/network-mode/bridge/taskdef.yaml new file mode 100644 index 0000000000..5a9225b10b --- /dev/null +++ b/examples/ecs/standalone-task/launch-type/ec2/network-mode/bridge/taskdef.yaml @@ -0,0 +1,20 @@ +family: nginx-test-fam-ec2-bridge +executionRoleArn: arn:aws:iam::XXXX:role/ecsTaskExecutionRole +containerDefinitions: + - command: null + cpu: 100 + image: XXXX.dkr.ecr.ap-northeast-1.amazonaws.com/nginx:1 + memory: 100 + mountPoints: [] + name: web + portMappings: + - containerPort: 80 +compatibilities: + - EC2 +requiresCompatibilities: + - EC2 +networkMode: bridge +memory: 512 +cpu: 256 +pidMode: "" +volumes: [] diff --git a/examples/ecs/standalone-task/launch-type/fargate/app.pipecd.yaml b/examples/ecs/standalone-task/launch-type/fargate/app.pipecd.yaml new file mode 100644 index 0000000000..8a1221d657 --- /dev/null +++ b/examples/ecs/standalone-task/launch-type/fargate/app.pipecd.yaml @@ -0,0 +1,21 @@ +apiVersion: pipecd.dev/v1beta1 +kind: ECSApp +spec: + name: standalonetask-fargate + labels: + env: example + team: xyz + input: + taskDefinitionFile: taskdef.yaml + clusterArn: arn:aws:ecs:ap-northeast-1:XXXX:cluster/test-cluster + awsvpcConfiguration: + assignPublicIp: ENABLED + subnets: + - subnet-YYYY + - subnet-YYYY + securityGroups: + - sg-YYYY + description: | + This app demonstrates how to deploy an ECS application with [Quick Sync](https://pipecd.dev/docs/concepts/#sync-strategy) strategy.\ + No pipeline is specified then in each deployment PipeCD will roll out the new version and switch all traffic to it immediately.\ + References: [adding a new app](https://pipecd.dev/docs/user-guide/managing-application/adding-an-application/), [app configuration](https://pipecd.dev/docs/user-guide/configuration-reference/) diff --git a/examples/ecs/standalone-task/launch-type/fargate/taskdef.yaml b/examples/ecs/standalone-task/launch-type/fargate/taskdef.yaml new file mode 100644 index 0000000000..e5a60a6bdd --- /dev/null +++ b/examples/ecs/standalone-task/launch-type/fargate/taskdef.yaml @@ -0,0 +1,20 @@ +family: nginx-test-fam-1 +executionRoleArn: arn:aws:iam::XXXX:role/ecsTaskExecutionRole +containerDefinitions: + - command: null + cpu: 100 + image: XXXX.dkr.ecr.ap-northeast-1.amazonaws.com/nginx:1 + memory: 100 + mountPoints: [] + name: web + portMappings: + - containerPort: 80 +compatibilities: + - FARGATE +requiresCompatibilities: + - FARGATE +networkMode: awsvpc +memory: 512 +cpu: 256 +pidMode: "" +volumes: [] diff --git a/go.mod b/go.mod index ca2c922453..7c7971dbf9 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/envoyproxy/protoc-gen-validate v0.6.6 github.com/fsouza/fake-gcs-server v1.21.0 github.com/go-sql-driver/mysql v1.6.0 - github.com/goccy/go-yaml v1.9.3 + github.com/goccy/go-yaml v1.9.8 github.com/golang-jwt/jwt v3.2.1+incompatible github.com/golang/mock v1.5.0 github.com/golang/protobuf v1.5.2 diff --git a/go.sum b/go.sum index bc961e5196..93a923ada2 100644 --- a/go.sum +++ b/go.sum @@ -270,8 +270,8 @@ github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LB github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68= github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/goccy/go-yaml v1.9.3 h1:9A7DkTBb7cZs5wqcqAhgR+2Ms8O7HTjT0SqOXO10HqM= -github.com/goccy/go-yaml v1.9.3/go.mod h1:U/jl18uSupI5rdI2jmuCswEA2htH9eXfferR3KfscvA= +github.com/goccy/go-yaml v1.9.8 h1:5gMyLUeU1/6zl+WFfR1hN7D2kf+1/eRGa7DFtToiBvQ= +github.com/goccy/go-yaml v1.9.8/go.mod h1:JubOolP3gh0HpiBc4BLRD4YmjEjHAmIIB2aaXKkTfoE= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= @@ -877,6 +877,7 @@ golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= diff --git a/hack/gen-contributions.sh b/hack/gen-contributions.sh new file mode 100755 index 0000000000..bd9985b736 --- /dev/null +++ b/hack/gen-contributions.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# Copyright 2022 The PipeCD Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +echo "Updating the contributors list on README.md ..." + +LINE_NUM=$(($(grep -Fn "### Thanks to the contributors of PipeCD" README.md | cut -f1 -d ':')+1)) +head -n $LINE_NUM README.md >> README.md.tmp + +while read -r line +do + cat <> README.md.tmp +$line +EOT +done < <(gh api -XGET /repos/pipe-cd/pipecd/contributors -F per_page=100 | jq -r '.[] | ""') + +mv README.md.tmp README.md + +echo "Successfully update the contributions list on README.md" diff --git a/pkg/app/pipectl/cmd/application/application.go b/pkg/app/pipectl/cmd/application/application.go index 52d8c4911d..bb69d845b4 100644 --- a/pkg/app/pipectl/cmd/application/application.go +++ b/pkg/app/pipectl/cmd/application/application.go @@ -39,6 +39,7 @@ func NewCommand() *cobra.Command { newGetCommand(c), newListCommand(c), newDeleteCommand(c), + newDisableCommand(c), ) c.clientOptions.RegisterPersistentFlags(cmd) diff --git a/pkg/app/pipectl/cmd/application/disable.go b/pkg/app/pipectl/cmd/application/disable.go new file mode 100644 index 0000000000..88633875d2 --- /dev/null +++ b/pkg/app/pipectl/cmd/application/disable.go @@ -0,0 +1,67 @@ +// Copyright 2022 The PipeCD Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package application + +import ( + "context" + "fmt" + + "github.com/spf13/cobra" + + "github.com/pipe-cd/pipecd/pkg/app/server/service/apiservice" + "github.com/pipe-cd/pipecd/pkg/cli" +) + +type disable struct { + root *command + + appID string +} + +func newDisableCommand(root *command) *cobra.Command { + c := &disable{ + root: root, + } + cmd := &cobra.Command{ + Use: "disable", + Short: "Disable an application.", + RunE: cli.WithContext(c.run), + } + + cmd.Flags().StringVar(&c.appID, "app-id", c.appID, "The application ID.") + cmd.MarkFlagRequired("app-id") + + return cmd +} + +func (c *disable) run(ctx context.Context, input cli.Input) error { + cli, err := c.root.clientOptions.NewClient(ctx) + if err != nil { + return fmt.Errorf("failed to initialize client: %w", err) + } + defer cli.Close() + + req := &apiservice.DisableApplicationRequest{ + ApplicationId: c.appID, + } + + resp, err := cli.DisableApplication(ctx, req) + if err != nil { + return fmt.Errorf("failed to disable application: %w", err) + } + + input.Logger.Info(fmt.Sprintf("Successfully disable application id = %s", resp.ApplicationId)) + return nil +} diff --git a/pkg/app/piped/eventwatcher/eventwatcher_test.go b/pkg/app/piped/eventwatcher/eventwatcher_test.go index 291d658e78..5164f427fd 100644 --- a/pkg/app/piped/eventwatcher/eventwatcher_test.go +++ b/pkg/app/piped/eventwatcher/eventwatcher_test.go @@ -98,7 +98,7 @@ func TestModifyYAML(t *testing.T) { path: "testdata/a.yaml", field: "$.foo", newValue: "2", - wantNewYml: []byte("foo: 2"), + wantNewYml: []byte("foo: 2\n"), wantUpToDate: false, wantErr: false, }, diff --git a/pkg/app/piped/executor/ecs/deploy.go b/pkg/app/piped/executor/ecs/deploy.go index afdf35d6bf..c5be37077a 100644 --- a/pkg/app/piped/executor/ecs/deploy.go +++ b/pkg/app/piped/executor/ecs/deploy.go @@ -78,11 +78,21 @@ func (e *deployExecutor) Execute(sig executor.StopSignal) model.StageStatus { } func (e *deployExecutor) ensureSync(ctx context.Context) model.StageStatus { - taskDefinition, ok := loadTaskDefinition(&e.Input, e.appCfg.Input.TaskDefinitionFile, e.deploySource) + ecsInput := e.appCfg.Input + + taskDefinition, ok := loadTaskDefinition(&e.Input, ecsInput.TaskDefinitionFile, e.deploySource) if !ok { return model.StageStatus_STAGE_FAILURE } - servicedefinition, ok := loadServiceDefinition(&e.Input, e.appCfg.Input.ServiceDefinitionFile, e.deploySource) + + if ecsInput.IsStandaloneTask() { + if !runStandaloneTask(ctx, &e.Input, e.platformProviderName, e.platformProviderCfg, taskDefinition, &ecsInput) { + return model.StageStatus_STAGE_FAILURE + } + return model.StageStatus_STAGE_SUCCESS + } + + servicedefinition, ok := loadServiceDefinition(&e.Input, ecsInput.ServiceDefinitionFile, e.deploySource) if !ok { return model.StageStatus_STAGE_FAILURE } diff --git a/pkg/app/piped/executor/ecs/ecs.go b/pkg/app/piped/executor/ecs/ecs.go index b7e988f19a..a97b33d233 100644 --- a/pkg/app/piped/executor/ecs/ecs.go +++ b/pkg/app/piped/executor/ecs/ecs.go @@ -157,6 +157,41 @@ func applyServiceDefinition(ctx context.Context, cli provider.Client, serviceDef return service, nil } +func runStandaloneTask( + ctx context.Context, + in *executor.Input, + cloudProviderName string, + cloudProviderCfg *config.PlatformProviderECSConfig, + taskDefinition types.TaskDefinition, + ecsInput *config.ECSDeploymentInput, +) bool { + client, err := provider.DefaultRegistry().Client(cloudProviderName, cloudProviderCfg, in.Logger) + if err != nil { + in.LogPersister.Errorf("Unable to create ECS client for the provider %s: %v", cloudProviderName, err) + return false + } + + in.LogPersister.Infof("Start applying the ECS task definition") + td, err := applyTaskDefinition(ctx, client, taskDefinition) + if err != nil { + in.LogPersister.Errorf("Failed to apply ECS task definition: %v", err) + return false + } + + err = client.RunTask( + ctx, + *td, + ecsInput.ClusterArn, + ecsInput.LaunchType, + &ecsInput.AwsVpcConfiguration, + ) + if err != nil { + in.LogPersister.Errorf("Failed to run ECS task: %v", err) + return false + } + return true +} + func createPrimaryTaskSet(ctx context.Context, client provider.Client, service types.Service, taskDef types.TaskDefinition, targetGroup *types.LoadBalancer) error { // Get current PRIMARY task set. prevPrimaryTaskSet, err := client.GetPrimaryTaskSet(ctx, service) diff --git a/pkg/app/piped/executor/kubernetes/kubernetes_test.go b/pkg/app/piped/executor/kubernetes/kubernetes_test.go index 039e19201d..d2406e2f4a 100644 --- a/pkg/app/piped/executor/kubernetes/kubernetes_test.go +++ b/pkg/app/piped/executor/kubernetes/kubernetes_test.go @@ -601,7 +601,7 @@ metadata: name: canary-by-config-change data: two: "2" - `, +`, expected: ` apiVersion: apps/v1 kind: Deployment @@ -645,7 +645,7 @@ metadata: name: canary-by-config-change data: two: "2" - `, +`, }, { name: "multiple configs", @@ -704,7 +704,7 @@ metadata: type: my-type data: "one": "Mg==" - `, +`, expected: ` apiVersion: apps/v1 kind: Deployment @@ -762,7 +762,7 @@ metadata: type: my-type data: "one": "Mg==" - `, +`, }, } diff --git a/pkg/app/piped/executor/kubernetes/testdata/patch_configmap_field.yaml b/pkg/app/piped/executor/kubernetes/testdata/patch_configmap_field.yaml index adc653e76f..56e406b95c 100644 --- a/pkg/app/piped/executor/kubernetes/testdata/patch_configmap_field.yaml +++ b/pkg/app/piped/executor/kubernetes/testdata/patch_configmap_field.yaml @@ -3,7 +3,7 @@ kind: ConfigMap metadata: name: envoy-config data: - envoy-config: |- + envoy-config: | admin: address: socket_address: @@ -42,7 +42,7 @@ kind: ConfigMap metadata: name: envoy-config data: - envoy-config: |- + envoy-config: | admin: address: socket_address: diff --git a/pkg/app/piped/executor/kubernetes/testdata/patch_configmap_field_multi_ops.yaml b/pkg/app/piped/executor/kubernetes/testdata/patch_configmap_field_multi_ops.yaml index 3553d6b2d1..efeb218de7 100644 --- a/pkg/app/piped/executor/kubernetes/testdata/patch_configmap_field_multi_ops.yaml +++ b/pkg/app/piped/executor/kubernetes/testdata/patch_configmap_field_multi_ops.yaml @@ -3,7 +3,7 @@ kind: ConfigMap metadata: name: envoy-config data: - envoy-config: |- + envoy-config: | admin: address: socket_address: @@ -151,7 +151,7 @@ kind: ConfigMap metadata: name: envoy-config data: - envoy-config: |- + envoy-config: | admin: address: socket_address: diff --git a/pkg/app/piped/platformprovider/ecs/client.go b/pkg/app/piped/platformprovider/ecs/client.go index 6091f4a308..105f2659c5 100644 --- a/pkg/app/piped/platformprovider/ecs/client.go +++ b/pkg/app/piped/platformprovider/ecs/client.go @@ -29,6 +29,7 @@ import ( "go.uber.org/zap" "github.com/pipe-cd/pipecd/pkg/app/piped/platformprovider" + appconfig "github.com/pipe-cd/pipecd/pkg/config" ) type client struct { @@ -150,6 +151,34 @@ func (c *client) RegisterTaskDefinition(ctx context.Context, taskDefinition type return output.TaskDefinition, nil } +func (c *client) RunTask(ctx context.Context, taskDefinition types.TaskDefinition, clusterArn string, launchType string, awsVpcConfiguration *appconfig.ECSVpcConfiguration) error { + if taskDefinition.TaskDefinitionArn == nil { + return fmt.Errorf("failed to run task of task family %s: no task definition provided", *taskDefinition.Family) + } + + input := &ecs.RunTaskInput{ + TaskDefinition: taskDefinition.Family, + Cluster: aws.String(clusterArn), + LaunchType: types.LaunchType(launchType), + } + + if len(awsVpcConfiguration.Subnets) > 0 { + input.NetworkConfiguration = &types.NetworkConfiguration{ + AwsvpcConfiguration: &types.AwsVpcConfiguration{ + Subnets: awsVpcConfiguration.Subnets, + AssignPublicIp: types.AssignPublicIp(awsVpcConfiguration.AssignPublicIP), + SecurityGroups: awsVpcConfiguration.SecurityGroups, + }, + } + } + + _, err := c.ecsClient.RunTask(ctx, input) + if err != nil { + return fmt.Errorf("failed to run ECS task %s: %w", *taskDefinition.TaskDefinitionArn, err) + } + return nil +} + func (c *client) CreateTaskSet(ctx context.Context, service types.Service, taskDefinition types.TaskDefinition, targetGroup *types.LoadBalancer, scale int) (*types.TaskSet, error) { if taskDefinition.TaskDefinitionArn == nil { return nil, fmt.Errorf("failed to create task set of task family %s: no task definition provided", *taskDefinition.Family) diff --git a/pkg/app/piped/platformprovider/ecs/ecs.go b/pkg/app/piped/platformprovider/ecs/ecs.go index 3492a0c3dc..4eaee15a0d 100644 --- a/pkg/app/piped/platformprovider/ecs/ecs.go +++ b/pkg/app/piped/platformprovider/ecs/ecs.go @@ -37,6 +37,7 @@ type ECS interface { CreateService(ctx context.Context, service types.Service) (*types.Service, error) UpdateService(ctx context.Context, service types.Service) (*types.Service, error) RegisterTaskDefinition(ctx context.Context, taskDefinition types.TaskDefinition) (*types.TaskDefinition, error) + RunTask(ctx context.Context, taskDefinition types.TaskDefinition, clusterArn string, launchType string, awsVpcConfiguration *config.ECSVpcConfiguration) error GetPrimaryTaskSet(ctx context.Context, service types.Service) (*types.TaskSet, error) CreateTaskSet(ctx context.Context, service types.Service, taskDefinition types.TaskDefinition, targetGroup *types.LoadBalancer, scale int) (*types.TaskSet, error) DeleteTaskSet(ctx context.Context, service types.Service, taskSetArn string) error diff --git a/pkg/app/piped/platformprovider/kubernetes/deployment_test.go b/pkg/app/piped/platformprovider/kubernetes/deployment_test.go index d96efa48e4..5c1b1c3e78 100644 --- a/pkg/app/piped/platformprovider/kubernetes/deployment_test.go +++ b/pkg/app/piped/platformprovider/kubernetes/deployment_test.go @@ -61,7 +61,7 @@ spec: - server ports: - containerPort: 9085 - `, +`, expected: nil, }, { @@ -100,7 +100,7 @@ spec: - name: config configMap: name: canary-by-config-change - `, +`, expected: []string{ "canary-by-config-change", }, @@ -164,7 +164,7 @@ spec: - name: config2 configMap: name: configmap-2 - `, +`, expected: []string{ "canary-by-config-change", "configmap-1", @@ -228,7 +228,7 @@ spec: - server ports: - containerPort: 9085 - `, +`, expected: nil, }, { @@ -267,7 +267,7 @@ spec: - name: config secret: secretName: canary-by-config-change - `, +`, expected: []string{ "canary-by-config-change", }, @@ -331,7 +331,7 @@ spec: - name: config2 secret: secretName: secret-2 - `, +`, expected: []string{ "canary-by-config-change", "init-secret-1", diff --git a/pkg/app/piped/platformprovider/kubernetes/hasher_test.go b/pkg/app/piped/platformprovider/kubernetes/hasher_test.go index 709d8c4c8f..19b486a05b 100644 --- a/pkg/app/piped/platformprovider/kubernetes/hasher_test.go +++ b/pkg/app/piped/platformprovider/kubernetes/hasher_test.go @@ -42,7 +42,7 @@ apiVersion: v1 kind: ConfigMap data: {} binaryData: {} - `, +`, expected: "42745tchd9", }, { @@ -53,7 +53,7 @@ kind: ConfigMap data: one: "" binaryData: {} - `, +`, expected: "9g67k2htb6", }, { @@ -66,7 +66,7 @@ data: one: "" three: "3" binaryData: {} - `, +`, expected: "f5h7t85m9b", }, { @@ -76,7 +76,7 @@ apiVersion: v1 kind: Secret type: my-type data: {} - `, +`, expected: "t75bgf6ctb", }, { @@ -87,7 +87,7 @@ kind: Secret type: my-type data: "one": "" - `, +`, expected: "74bd68bm66", }, { @@ -100,7 +100,7 @@ data: two: Mg== one: "" three: Mw== - `, +`, expected: "dgcb6h9tmk", }, { @@ -119,7 +119,7 @@ type: my-type data: one: "" three: Mw== - `, +`, expected: "57hhd7795k", }, { @@ -151,7 +151,7 @@ spec: - hello ports: - containerPort: 9085 - `, +`, expected: "db48kd6689", }, } diff --git a/pkg/app/piped/platformprovider/kubernetes/manifest.go b/pkg/app/piped/platformprovider/kubernetes/manifest.go index fe3d0af38a..3bbe31e323 100644 --- a/pkg/app/piped/platformprovider/kubernetes/manifest.go +++ b/pkg/app/piped/platformprovider/kubernetes/manifest.go @@ -224,12 +224,15 @@ func ParseManifests(data string) ([]Manifest, error) { manifests = make([]Manifest, 0, len(parts)) ) - for _, part := range parts { + for i, part := range parts { // Ignore all the cases where no content between separator. - part = strings.TrimSpace(part) - if len(part) == 0 { + if len(strings.TrimSpace(part)) == 0 { continue } + // Append new line which trim by document separator. + if i != len(parts)-1 { + part += "\n" + } var obj unstructured.Unstructured if err := yaml.Unmarshal([]byte(part), &obj); err != nil { return nil, err diff --git a/pkg/app/piped/platformprovider/kubernetes/manifest_test.go b/pkg/app/piped/platformprovider/kubernetes/manifest_test.go index fdf8a4fa76..3066cfcb31 100644 --- a/pkg/app/piped/platformprovider/kubernetes/manifest_test.go +++ b/pkg/app/piped/platformprovider/kubernetes/manifest_test.go @@ -81,6 +81,39 @@ metadata: }), }, }, + { + name: "contains new line at the end of file", + manifests: ` +apiVersion: v1 +kind: Kind1 +metadata: + name: config + extra: | + single-new-line +`, + want: []Manifest{ + maker("config", "Kind1", map[string]interface{}{ + "name": "config", + "extra": "single-new-line\n", + }), + }, + }, + { + name: "not contains new line at the end of file", + manifests: ` +apiVersion: v1 +kind: Kind1 +metadata: + name: config + extra: | + no-new-line`, + want: []Manifest{ + maker("config", "Kind1", map[string]interface{}{ + "name": "config", + "extra": "no-new-line", + }), + }, + }, { name: "multiple manifests", manifests: ` @@ -88,21 +121,64 @@ apiVersion: v1 kind: Kind1 metadata: name: config1 + extra: |- + no-new-line --- apiVersion: v1 kind: Kind2 metadata: name: config2 + extra: | + single-new-line-1 --- apiVersion: v1 kind: Kind3 metadata: name: config3 - `, + extra: | + single-new-line-2 + + +--- +apiVersion: v1 +kind: Kind4 +metadata: + name: config4 + extra: |+ + multiple-new-line-1 + + +--- +apiVersion: v1 +kind: Kind5 +metadata: + name: config5 + extra: |+ + multiple-new-line-2 + + +`, want: []Manifest{ - maker("config1", "Kind1", map[string]interface{}{"name": "config1"}), - maker("config2", "Kind2", map[string]interface{}{"name": "config2"}), - maker("config3", "Kind3", map[string]interface{}{"name": "config3"}), + maker("config1", "Kind1", map[string]interface{}{ + "name": "config1", + "extra": "no-new-line", + }), + maker("config2", "Kind2", map[string]interface{}{ + "name": "config2", + "extra": "single-new-line-1\n", + }), + maker("config3", "Kind3", map[string]interface{}{ + "name": "config3", + "extra": "single-new-line-2\n", + }), + maker("config4", "Kind4", map[string]interface{}{ + "name": "config4", + "extra": "multiple-new-line-1\n\n\n", + }), + maker("config5", "Kind5", map[string]interface{}{ + "name": "config5", + "extra": "multiple-new-line-2\n\n\n", + }), }, }, } diff --git a/pkg/app/server/grpcapi/api.go b/pkg/app/server/grpcapi/api.go index 948ccb588b..20571d83a0 100644 --- a/pkg/app/server/grpcapi/api.go +++ b/pkg/app/server/grpcapi/api.go @@ -40,6 +40,7 @@ type apiApplicationStore interface { Get(ctx context.Context, id string) (*model.Application, error) List(ctx context.Context, opts datastore.ListOptions) ([]*model.Application, string, error) Delete(ctx context.Context, id string) error + Disable(ctx context.Context, id string) error UpdateConfigFilename(ctx context.Context, id, filename string) error } @@ -308,6 +309,30 @@ func (a *API) DeleteApplication(ctx context.Context, req *apiservice.DeleteAppli }, nil } +func (a *API) DisableApplication(ctx context.Context, req *apiservice.DisableApplicationRequest) (*apiservice.DisableApplicationResponse, error) { + key, err := requireAPIKey(ctx, model.APIKey_READ_WRITE, a.logger) + if err != nil { + return nil, err + } + + app, err := getApplication(ctx, a.applicationStore, req.ApplicationId, a.logger) + if err != nil { + return nil, err + } + + if app.ProjectId != key.ProjectId { + return nil, status.Error(codes.InvalidArgument, "Requested application does not belong to your project") + } + + if err := a.applicationStore.Disable(ctx, req.ApplicationId); err != nil { + return nil, gRPCStoreError(err, fmt.Sprintf("disable application %s", req.ApplicationId)) + } + + return &apiservice.DisableApplicationResponse{ + ApplicationId: app.Id, + }, nil +} + func (a *API) RenameApplicationConfigFile(ctx context.Context, req *apiservice.RenameApplicationConfigFileRequest) (*apiservice.RenameApplicationConfigFileResponse, error) { key, err := requireAPIKey(ctx, model.APIKey_READ_WRITE, a.logger) if err != nil { diff --git a/pkg/app/server/service/apiservice/service.pb.go b/pkg/app/server/service/apiservice/service.pb.go index 7731d845e1..356536ad3e 100644 --- a/pkg/app/server/service/apiservice/service.pb.go +++ b/pkg/app/server/service/apiservice/service.pb.go @@ -485,6 +485,100 @@ func (x *ListApplicationsResponse) GetCursor() string { return "" } +type DisableApplicationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ApplicationId string `protobuf:"bytes,1,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` +} + +func (x *DisableApplicationRequest) Reset() { + *x = DisableApplicationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DisableApplicationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DisableApplicationRequest) ProtoMessage() {} + +func (x *DisableApplicationRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[8] + 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 DisableApplicationRequest.ProtoReflect.Descriptor instead. +func (*DisableApplicationRequest) Descriptor() ([]byte, []int) { + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{8} +} + +func (x *DisableApplicationRequest) GetApplicationId() string { + if x != nil { + return x.ApplicationId + } + return "" +} + +type DisableApplicationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ApplicationId string `protobuf:"bytes,1,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` +} + +func (x *DisableApplicationResponse) Reset() { + *x = DisableApplicationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DisableApplicationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DisableApplicationResponse) ProtoMessage() {} + +func (x *DisableApplicationResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[9] + 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 DisableApplicationResponse.ProtoReflect.Descriptor instead. +func (*DisableApplicationResponse) Descriptor() ([]byte, []int) { + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{9} +} + +func (x *DisableApplicationResponse) GetApplicationId() string { + if x != nil { + return x.ApplicationId + } + return "" +} + type DeleteApplicationRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -496,7 +590,7 @@ type DeleteApplicationRequest struct { func (x *DeleteApplicationRequest) Reset() { *x = DeleteApplicationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[8] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -509,7 +603,7 @@ func (x *DeleteApplicationRequest) String() string { func (*DeleteApplicationRequest) ProtoMessage() {} func (x *DeleteApplicationRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[8] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -522,7 +616,7 @@ func (x *DeleteApplicationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteApplicationRequest.ProtoReflect.Descriptor instead. func (*DeleteApplicationRequest) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{8} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{10} } func (x *DeleteApplicationRequest) GetApplicationId() string { @@ -543,7 +637,7 @@ type DeleteApplicationResponse struct { func (x *DeleteApplicationResponse) Reset() { *x = DeleteApplicationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[9] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -556,7 +650,7 @@ func (x *DeleteApplicationResponse) String() string { func (*DeleteApplicationResponse) ProtoMessage() {} func (x *DeleteApplicationResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[9] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -569,7 +663,7 @@ func (x *DeleteApplicationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteApplicationResponse.ProtoReflect.Descriptor instead. func (*DeleteApplicationResponse) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{9} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{11} } func (x *DeleteApplicationResponse) GetApplicationId() string { @@ -593,7 +687,7 @@ type RenameApplicationConfigFileRequest struct { func (x *RenameApplicationConfigFileRequest) Reset() { *x = RenameApplicationConfigFileRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[10] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -606,7 +700,7 @@ func (x *RenameApplicationConfigFileRequest) String() string { func (*RenameApplicationConfigFileRequest) ProtoMessage() {} func (x *RenameApplicationConfigFileRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[10] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -619,7 +713,7 @@ func (x *RenameApplicationConfigFileRequest) ProtoReflect() protoreflect.Message // Deprecated: Use RenameApplicationConfigFileRequest.ProtoReflect.Descriptor instead. func (*RenameApplicationConfigFileRequest) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{10} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{12} } func (x *RenameApplicationConfigFileRequest) GetApplicationIds() []string { @@ -645,7 +739,7 @@ type RenameApplicationConfigFileResponse struct { func (x *RenameApplicationConfigFileResponse) Reset() { *x = RenameApplicationConfigFileResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[11] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -658,7 +752,7 @@ func (x *RenameApplicationConfigFileResponse) String() string { func (*RenameApplicationConfigFileResponse) ProtoMessage() {} func (x *RenameApplicationConfigFileResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[11] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -671,7 +765,7 @@ func (x *RenameApplicationConfigFileResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use RenameApplicationConfigFileResponse.ProtoReflect.Descriptor instead. func (*RenameApplicationConfigFileResponse) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{11} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{13} } type GetDeploymentRequest struct { @@ -685,7 +779,7 @@ type GetDeploymentRequest struct { func (x *GetDeploymentRequest) Reset() { *x = GetDeploymentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[12] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -698,7 +792,7 @@ func (x *GetDeploymentRequest) String() string { func (*GetDeploymentRequest) ProtoMessage() {} func (x *GetDeploymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[12] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -711,7 +805,7 @@ func (x *GetDeploymentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDeploymentRequest.ProtoReflect.Descriptor instead. func (*GetDeploymentRequest) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{12} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{14} } func (x *GetDeploymentRequest) GetDeploymentId() string { @@ -732,7 +826,7 @@ type GetDeploymentResponse struct { func (x *GetDeploymentResponse) Reset() { *x = GetDeploymentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[13] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -745,7 +839,7 @@ func (x *GetDeploymentResponse) String() string { func (*GetDeploymentResponse) ProtoMessage() {} func (x *GetDeploymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[13] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -758,7 +852,7 @@ func (x *GetDeploymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDeploymentResponse.ProtoReflect.Descriptor instead. func (*GetDeploymentResponse) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{13} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{15} } func (x *GetDeploymentResponse) GetDeployment() *model.Deployment { @@ -779,7 +873,7 @@ type GetCommandRequest struct { func (x *GetCommandRequest) Reset() { *x = GetCommandRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[14] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -792,7 +886,7 @@ func (x *GetCommandRequest) String() string { func (*GetCommandRequest) ProtoMessage() {} func (x *GetCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[14] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -805,7 +899,7 @@ func (x *GetCommandRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCommandRequest.ProtoReflect.Descriptor instead. func (*GetCommandRequest) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{14} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{16} } func (x *GetCommandRequest) GetCommandId() string { @@ -826,7 +920,7 @@ type GetCommandResponse struct { func (x *GetCommandResponse) Reset() { *x = GetCommandResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[15] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -839,7 +933,7 @@ func (x *GetCommandResponse) String() string { func (*GetCommandResponse) ProtoMessage() {} func (x *GetCommandResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[15] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -852,7 +946,7 @@ func (x *GetCommandResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCommandResponse.ProtoReflect.Descriptor instead. func (*GetCommandResponse) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{15} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{17} } func (x *GetCommandResponse) GetCommand() *model.Command { @@ -873,7 +967,7 @@ type EnablePipedRequest struct { func (x *EnablePipedRequest) Reset() { *x = EnablePipedRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[16] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -886,7 +980,7 @@ func (x *EnablePipedRequest) String() string { func (*EnablePipedRequest) ProtoMessage() {} func (x *EnablePipedRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[16] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -899,7 +993,7 @@ func (x *EnablePipedRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EnablePipedRequest.ProtoReflect.Descriptor instead. func (*EnablePipedRequest) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{16} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{18} } func (x *EnablePipedRequest) GetPipedId() string { @@ -918,7 +1012,7 @@ type EnablePipedResponse struct { func (x *EnablePipedResponse) Reset() { *x = EnablePipedResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[17] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -931,7 +1025,7 @@ func (x *EnablePipedResponse) String() string { func (*EnablePipedResponse) ProtoMessage() {} func (x *EnablePipedResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[17] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -944,7 +1038,7 @@ func (x *EnablePipedResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EnablePipedResponse.ProtoReflect.Descriptor instead. func (*EnablePipedResponse) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{17} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{19} } type DisablePipedRequest struct { @@ -958,7 +1052,7 @@ type DisablePipedRequest struct { func (x *DisablePipedRequest) Reset() { *x = DisablePipedRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[18] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -971,7 +1065,7 @@ func (x *DisablePipedRequest) String() string { func (*DisablePipedRequest) ProtoMessage() {} func (x *DisablePipedRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[18] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -984,7 +1078,7 @@ func (x *DisablePipedRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DisablePipedRequest.ProtoReflect.Descriptor instead. func (*DisablePipedRequest) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{18} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{20} } func (x *DisablePipedRequest) GetPipedId() string { @@ -1003,7 +1097,7 @@ type DisablePipedResponse struct { func (x *DisablePipedResponse) Reset() { *x = DisablePipedResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[19] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1016,7 +1110,7 @@ func (x *DisablePipedResponse) String() string { func (*DisablePipedResponse) ProtoMessage() {} func (x *DisablePipedResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[19] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1029,7 +1123,7 @@ func (x *DisablePipedResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DisablePipedResponse.ProtoReflect.Descriptor instead. func (*DisablePipedResponse) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{19} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{21} } type RegisterEventRequest struct { @@ -1045,7 +1139,7 @@ type RegisterEventRequest struct { func (x *RegisterEventRequest) Reset() { *x = RegisterEventRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[20] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1058,7 +1152,7 @@ func (x *RegisterEventRequest) String() string { func (*RegisterEventRequest) ProtoMessage() {} func (x *RegisterEventRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[20] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1071,7 +1165,7 @@ func (x *RegisterEventRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterEventRequest.ProtoReflect.Descriptor instead. func (*RegisterEventRequest) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{20} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{22} } func (x *RegisterEventRequest) GetName() string { @@ -1106,7 +1200,7 @@ type RegisterEventResponse struct { func (x *RegisterEventResponse) Reset() { *x = RegisterEventResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[21] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1119,7 +1213,7 @@ func (x *RegisterEventResponse) String() string { func (*RegisterEventResponse) ProtoMessage() {} func (x *RegisterEventResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[21] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1132,7 +1226,7 @@ func (x *RegisterEventResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterEventResponse.ProtoReflect.Descriptor instead. func (*RegisterEventResponse) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{21} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{23} } func (x *RegisterEventResponse) GetEventId() string { @@ -1158,7 +1252,7 @@ type RequestPlanPreviewRequest struct { func (x *RequestPlanPreviewRequest) Reset() { *x = RequestPlanPreviewRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[22] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1171,7 +1265,7 @@ func (x *RequestPlanPreviewRequest) String() string { func (*RequestPlanPreviewRequest) ProtoMessage() {} func (x *RequestPlanPreviewRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[22] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1184,7 +1278,7 @@ func (x *RequestPlanPreviewRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RequestPlanPreviewRequest.ProtoReflect.Descriptor instead. func (*RequestPlanPreviewRequest) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{22} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{24} } func (x *RequestPlanPreviewRequest) GetRepoRemoteUrl() string { @@ -1233,7 +1327,7 @@ type RequestPlanPreviewResponse struct { func (x *RequestPlanPreviewResponse) Reset() { *x = RequestPlanPreviewResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[23] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1246,7 +1340,7 @@ func (x *RequestPlanPreviewResponse) String() string { func (*RequestPlanPreviewResponse) ProtoMessage() {} func (x *RequestPlanPreviewResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[23] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1259,7 +1353,7 @@ func (x *RequestPlanPreviewResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RequestPlanPreviewResponse.ProtoReflect.Descriptor instead. func (*RequestPlanPreviewResponse) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{23} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{25} } func (x *RequestPlanPreviewResponse) GetCommands() []string { @@ -1282,7 +1376,7 @@ type GetPlanPreviewResultsRequest struct { func (x *GetPlanPreviewResultsRequest) Reset() { *x = GetPlanPreviewResultsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[24] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1295,7 +1389,7 @@ func (x *GetPlanPreviewResultsRequest) String() string { func (*GetPlanPreviewResultsRequest) ProtoMessage() {} func (x *GetPlanPreviewResultsRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[24] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1308,7 +1402,7 @@ func (x *GetPlanPreviewResultsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPlanPreviewResultsRequest.ProtoReflect.Descriptor instead. func (*GetPlanPreviewResultsRequest) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{24} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{26} } func (x *GetPlanPreviewResultsRequest) GetCommands() []string { @@ -1336,7 +1430,7 @@ type GetPlanPreviewResultsResponse struct { func (x *GetPlanPreviewResultsResponse) Reset() { *x = GetPlanPreviewResultsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[25] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1349,7 +1443,7 @@ func (x *GetPlanPreviewResultsResponse) String() string { func (*GetPlanPreviewResultsResponse) ProtoMessage() {} func (x *GetPlanPreviewResultsResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[25] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1362,7 +1456,7 @@ func (x *GetPlanPreviewResultsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPlanPreviewResultsResponse.ProtoReflect.Descriptor instead. func (*GetPlanPreviewResultsResponse) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{25} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{27} } func (x *GetPlanPreviewResultsResponse) GetResults() []*model.PlanPreviewCommandResult { @@ -1386,7 +1480,7 @@ type EncryptRequest struct { func (x *EncryptRequest) Reset() { *x = EncryptRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[26] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1399,7 +1493,7 @@ func (x *EncryptRequest) String() string { func (*EncryptRequest) ProtoMessage() {} func (x *EncryptRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[26] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1412,7 +1506,7 @@ func (x *EncryptRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EncryptRequest.ProtoReflect.Descriptor instead. func (*EncryptRequest) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{26} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{28} } func (x *EncryptRequest) GetPlaintext() string { @@ -1447,7 +1541,7 @@ type EncryptResponse struct { func (x *EncryptResponse) Reset() { *x = EncryptResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[27] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1460,7 +1554,7 @@ func (x *EncryptResponse) String() string { func (*EncryptResponse) ProtoMessage() {} func (x *EncryptResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[27] + mi := &file_pkg_app_server_service_apiservice_service_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1473,7 +1567,7 @@ func (x *EncryptResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EncryptResponse.ProtoReflect.Descriptor instead. func (*EncryptResponse) Descriptor() ([]byte, []int) { - return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{27} + return file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP(), []int{29} } func (x *EncryptResponse) GetCiphertext() string { @@ -1557,227 +1651,245 @@ var file_pkg_app_server_service_apiservice_service_proto_rawDesc = []byte{ 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x22, 0x4b, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2e, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x4b, 0x0a, 0x19, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, + 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x22, 0x4c, 0x0a, 0x1a, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2e, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x22, 0x4a, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, + 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x4b, 0x0a, + 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x0e, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x85, 0x01, 0x0a, 0x22, 0x52, + 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x33, 0x0a, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, + 0x01, 0x04, 0x08, 0x01, 0x10, 0x32, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x66, 0x69, + 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, + 0x6d, 0x65, 0x22, 0x25, 0x0a, 0x23, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x69, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x0a, 0x14, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x4a, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x31, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x22, 0x3b, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x22, + 0x3e, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, + 0x38, 0x0a, 0x12, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x08, 0x70, 0x69, 0x70, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, - 0x85, 0x01, 0x0a, 0x22, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, - 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x32, 0x52, 0x0e, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x0c, 0x6e, - 0x65, 0x77, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x46, - 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x25, 0x0a, 0x23, 0x52, 0x65, 0x6e, 0x61, 0x6d, - 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, - 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x4a, 0x0a, 0x15, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3b, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x49, 0x64, 0x22, 0x3e, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x07, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x38, 0x0a, 0x12, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, - 0x70, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x08, 0x70, 0x69, - 0x70, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, 0x69, 0x70, 0x65, 0x64, 0x49, 0x64, 0x22, 0x15, - 0x0a, 0x13, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x0a, 0x13, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, - 0x50, 0x69, 0x70, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x08, - 0x70, 0x69, 0x70, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, 0x69, 0x70, 0x65, 0x64, 0x49, 0x64, - 0x22, 0x16, 0x0a, 0x14, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf8, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x6b, 0x0a, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, + 0x52, 0x07, 0x70, 0x69, 0x70, 0x65, 0x64, 0x49, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x45, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x39, 0x0a, 0x13, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x08, 0x70, 0x69, 0x70, 0x65, 0x64, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x07, 0x70, 0x69, 0x70, 0x65, 0x64, 0x49, 0x64, 0x22, 0x16, 0x0a, 0x14, 0x44, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xf8, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x6b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x42, 0x18, 0xfa, 0x42, 0x09, 0x9a, 0x01, 0x06, 0x22, 0x04, 0x72, 0x02, 0x10, 0x01, 0xfa, + 0x42, 0x09, 0x9a, 0x01, 0x06, 0x2a, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x3b, + 0x0a, 0x15, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x08, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x07, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xed, 0x01, 0x0a, 0x19, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x0f, 0x72, 0x65, 0x70, + 0x6f, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x70, + 0x6f, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x28, 0x0a, 0x0b, 0x68, 0x65, + 0x61, 0x64, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x42, 0x72, + 0x61, 0x6e, 0x63, 0x68, 0x12, 0x28, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x28, + 0x0a, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x62, 0x61, + 0x73, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x21, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, + 0x28, 0x00, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x38, 0x0a, 0x1a, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x22, 0x70, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x6e, + 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x12, 0x34, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x68, 0x61, 0x6e, + 0x64, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x5a, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x50, 0x6c, + 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x0e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x22, 0x0a, + 0x08, 0x70, 0x69, 0x70, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, 0x69, 0x70, 0x65, 0x64, 0x49, + 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x62, 0x61, 0x73, 0x65, + 0x36, 0x34, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x0a, 0x0f, 0x45, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, + 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, + 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x32, 0x99, 0x0e, 0x0a, 0x0a, 0x41, 0x50, 0x49, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x73, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x0f, 0x53, 0x79, + 0x6e, 0x63, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x73, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x18, 0xfa, 0x42, 0x09, 0x9a, 0x01, 0x06, 0x22, 0x04, - 0x72, 0x02, 0x10, 0x01, 0xfa, 0x42, 0x09, 0x9a, 0x01, 0x06, 0x2a, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 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, 0x3b, 0x0a, 0x15, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x08, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x22, 0xed, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x6e, - 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, - 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x75, 0x72, - 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x55, 0x72, 0x6c, 0x12, - 0x28, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x68, - 0x65, 0x61, 0x64, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x28, 0x0a, 0x0b, 0x68, 0x65, 0x61, - 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x62, 0x72, 0x61, 0x6e, - 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x0a, 0x62, 0x61, 0x73, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x21, 0x0a, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x22, 0x02, 0x28, 0x00, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x22, 0x38, 0x0a, 0x1a, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x50, - 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x22, 0x70, 0x0a, 0x1c, 0x47, 0x65, - 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x48, - 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x5a, 0x0a, 0x1d, - 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, - 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, - 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x0e, 0x45, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x09, 0x70, - 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x12, 0x22, 0x0a, 0x08, 0x70, 0x69, 0x70, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, - 0x69, 0x70, 0x65, 0x64, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, - 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x22, - 0x3a, 0x0a, 0x0f, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x32, 0x98, 0x0d, 0x0a, 0x0a, - 0x41, 0x50, 0x49, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x73, 0x0a, 0x0e, 0x41, 0x64, - 0x64, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x76, 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x2f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x79, 0x6e, - 0x63, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x79, - 0x6e, 0x63, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x10, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7c, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x9a, 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x6e, - 0x61, 0x6d, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x70, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x12, 0x2a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x7c, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x7f, 0x0a, 0x12, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x9a, 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x69, 0x6c, + 0x65, 0x12, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x6e, 0x61, + 0x6d, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x41, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, + 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x2d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x67, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x2a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, - 0x0b, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, 0x12, 0x2b, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, - 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x0c, 0x44, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, 0x12, 0x2c, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0b, 0x45, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, 0x12, 0x2b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x12, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, - 0x12, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x88, 0x01, 0x0a, 0x15, - 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, + 0x63, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x50, 0x69, 0x70, 0x65, 0x64, 0x12, 0x2c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x07, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x12, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x2d, 0x63, 0x64, 0x2f, 0x70, 0x69, 0x70, - 0x65, 0x63, 0x64, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x6c, + 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, + 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x12, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, + 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x07, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x12, 0x27, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x70, 0x69, 0x70, 0x65, 0x2d, 0x63, 0x64, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x63, 0x64, 0x2f, + 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1792,7 +1904,7 @@ func file_pkg_app_server_service_apiservice_service_proto_rawDescGZIP() []byte { return file_pkg_app_server_service_apiservice_service_proto_rawDescData } -var file_pkg_app_server_service_apiservice_service_proto_msgTypes = make([]protoimpl.MessageInfo, 29) +var file_pkg_app_server_service_apiservice_service_proto_msgTypes = make([]protoimpl.MessageInfo, 31) var file_pkg_app_server_service_apiservice_service_proto_goTypes = []interface{}{ (*AddApplicationRequest)(nil), // 0: grpc.service.apiservice.AddApplicationRequest (*AddApplicationResponse)(nil), // 1: grpc.service.apiservice.AddApplicationResponse @@ -1802,73 +1914,77 @@ var file_pkg_app_server_service_apiservice_service_proto_goTypes = []interface{} (*GetApplicationResponse)(nil), // 5: grpc.service.apiservice.GetApplicationResponse (*ListApplicationsRequest)(nil), // 6: grpc.service.apiservice.ListApplicationsRequest (*ListApplicationsResponse)(nil), // 7: grpc.service.apiservice.ListApplicationsResponse - (*DeleteApplicationRequest)(nil), // 8: grpc.service.apiservice.DeleteApplicationRequest - (*DeleteApplicationResponse)(nil), // 9: grpc.service.apiservice.DeleteApplicationResponse - (*RenameApplicationConfigFileRequest)(nil), // 10: grpc.service.apiservice.RenameApplicationConfigFileRequest - (*RenameApplicationConfigFileResponse)(nil), // 11: grpc.service.apiservice.RenameApplicationConfigFileResponse - (*GetDeploymentRequest)(nil), // 12: grpc.service.apiservice.GetDeploymentRequest - (*GetDeploymentResponse)(nil), // 13: grpc.service.apiservice.GetDeploymentResponse - (*GetCommandRequest)(nil), // 14: grpc.service.apiservice.GetCommandRequest - (*GetCommandResponse)(nil), // 15: grpc.service.apiservice.GetCommandResponse - (*EnablePipedRequest)(nil), // 16: grpc.service.apiservice.EnablePipedRequest - (*EnablePipedResponse)(nil), // 17: grpc.service.apiservice.EnablePipedResponse - (*DisablePipedRequest)(nil), // 18: grpc.service.apiservice.DisablePipedRequest - (*DisablePipedResponse)(nil), // 19: grpc.service.apiservice.DisablePipedResponse - (*RegisterEventRequest)(nil), // 20: grpc.service.apiservice.RegisterEventRequest - (*RegisterEventResponse)(nil), // 21: grpc.service.apiservice.RegisterEventResponse - (*RequestPlanPreviewRequest)(nil), // 22: grpc.service.apiservice.RequestPlanPreviewRequest - (*RequestPlanPreviewResponse)(nil), // 23: grpc.service.apiservice.RequestPlanPreviewResponse - (*GetPlanPreviewResultsRequest)(nil), // 24: grpc.service.apiservice.GetPlanPreviewResultsRequest - (*GetPlanPreviewResultsResponse)(nil), // 25: grpc.service.apiservice.GetPlanPreviewResultsResponse - (*EncryptRequest)(nil), // 26: grpc.service.apiservice.EncryptRequest - (*EncryptResponse)(nil), // 27: grpc.service.apiservice.EncryptResponse - nil, // 28: grpc.service.apiservice.RegisterEventRequest.LabelsEntry - (*model.ApplicationGitPath)(nil), // 29: model.ApplicationGitPath - (model.ApplicationKind)(0), // 30: model.ApplicationKind - (*model.Application)(nil), // 31: model.Application - (*model.Deployment)(nil), // 32: model.Deployment - (*model.Command)(nil), // 33: model.Command - (*model.PlanPreviewCommandResult)(nil), // 34: model.PlanPreviewCommandResult + (*DisableApplicationRequest)(nil), // 8: grpc.service.apiservice.DisableApplicationRequest + (*DisableApplicationResponse)(nil), // 9: grpc.service.apiservice.DisableApplicationResponse + (*DeleteApplicationRequest)(nil), // 10: grpc.service.apiservice.DeleteApplicationRequest + (*DeleteApplicationResponse)(nil), // 11: grpc.service.apiservice.DeleteApplicationResponse + (*RenameApplicationConfigFileRequest)(nil), // 12: grpc.service.apiservice.RenameApplicationConfigFileRequest + (*RenameApplicationConfigFileResponse)(nil), // 13: grpc.service.apiservice.RenameApplicationConfigFileResponse + (*GetDeploymentRequest)(nil), // 14: grpc.service.apiservice.GetDeploymentRequest + (*GetDeploymentResponse)(nil), // 15: grpc.service.apiservice.GetDeploymentResponse + (*GetCommandRequest)(nil), // 16: grpc.service.apiservice.GetCommandRequest + (*GetCommandResponse)(nil), // 17: grpc.service.apiservice.GetCommandResponse + (*EnablePipedRequest)(nil), // 18: grpc.service.apiservice.EnablePipedRequest + (*EnablePipedResponse)(nil), // 19: grpc.service.apiservice.EnablePipedResponse + (*DisablePipedRequest)(nil), // 20: grpc.service.apiservice.DisablePipedRequest + (*DisablePipedResponse)(nil), // 21: grpc.service.apiservice.DisablePipedResponse + (*RegisterEventRequest)(nil), // 22: grpc.service.apiservice.RegisterEventRequest + (*RegisterEventResponse)(nil), // 23: grpc.service.apiservice.RegisterEventResponse + (*RequestPlanPreviewRequest)(nil), // 24: grpc.service.apiservice.RequestPlanPreviewRequest + (*RequestPlanPreviewResponse)(nil), // 25: grpc.service.apiservice.RequestPlanPreviewResponse + (*GetPlanPreviewResultsRequest)(nil), // 26: grpc.service.apiservice.GetPlanPreviewResultsRequest + (*GetPlanPreviewResultsResponse)(nil), // 27: grpc.service.apiservice.GetPlanPreviewResultsResponse + (*EncryptRequest)(nil), // 28: grpc.service.apiservice.EncryptRequest + (*EncryptResponse)(nil), // 29: grpc.service.apiservice.EncryptResponse + nil, // 30: grpc.service.apiservice.RegisterEventRequest.LabelsEntry + (*model.ApplicationGitPath)(nil), // 31: model.ApplicationGitPath + (model.ApplicationKind)(0), // 32: model.ApplicationKind + (*model.Application)(nil), // 33: model.Application + (*model.Deployment)(nil), // 34: model.Deployment + (*model.Command)(nil), // 35: model.Command + (*model.PlanPreviewCommandResult)(nil), // 36: model.PlanPreviewCommandResult } var file_pkg_app_server_service_apiservice_service_proto_depIdxs = []int32{ - 29, // 0: grpc.service.apiservice.AddApplicationRequest.git_path:type_name -> model.ApplicationGitPath - 30, // 1: grpc.service.apiservice.AddApplicationRequest.kind:type_name -> model.ApplicationKind - 31, // 2: grpc.service.apiservice.GetApplicationResponse.application:type_name -> model.Application - 31, // 3: grpc.service.apiservice.ListApplicationsResponse.applications:type_name -> model.Application - 32, // 4: grpc.service.apiservice.GetDeploymentResponse.deployment:type_name -> model.Deployment - 33, // 5: grpc.service.apiservice.GetCommandResponse.command:type_name -> model.Command - 28, // 6: grpc.service.apiservice.RegisterEventRequest.labels:type_name -> grpc.service.apiservice.RegisterEventRequest.LabelsEntry - 34, // 7: grpc.service.apiservice.GetPlanPreviewResultsResponse.results:type_name -> model.PlanPreviewCommandResult + 31, // 0: grpc.service.apiservice.AddApplicationRequest.git_path:type_name -> model.ApplicationGitPath + 32, // 1: grpc.service.apiservice.AddApplicationRequest.kind:type_name -> model.ApplicationKind + 33, // 2: grpc.service.apiservice.GetApplicationResponse.application:type_name -> model.Application + 33, // 3: grpc.service.apiservice.ListApplicationsResponse.applications:type_name -> model.Application + 34, // 4: grpc.service.apiservice.GetDeploymentResponse.deployment:type_name -> model.Deployment + 35, // 5: grpc.service.apiservice.GetCommandResponse.command:type_name -> model.Command + 30, // 6: grpc.service.apiservice.RegisterEventRequest.labels:type_name -> grpc.service.apiservice.RegisterEventRequest.LabelsEntry + 36, // 7: grpc.service.apiservice.GetPlanPreviewResultsResponse.results:type_name -> model.PlanPreviewCommandResult 0, // 8: grpc.service.apiservice.APIService.AddApplication:input_type -> grpc.service.apiservice.AddApplicationRequest 2, // 9: grpc.service.apiservice.APIService.SyncApplication:input_type -> grpc.service.apiservice.SyncApplicationRequest 4, // 10: grpc.service.apiservice.APIService.GetApplication:input_type -> grpc.service.apiservice.GetApplicationRequest 6, // 11: grpc.service.apiservice.APIService.ListApplications:input_type -> grpc.service.apiservice.ListApplicationsRequest - 8, // 12: grpc.service.apiservice.APIService.DeleteApplication:input_type -> grpc.service.apiservice.DeleteApplicationRequest - 10, // 13: grpc.service.apiservice.APIService.RenameApplicationConfigFile:input_type -> grpc.service.apiservice.RenameApplicationConfigFileRequest - 12, // 14: grpc.service.apiservice.APIService.GetDeployment:input_type -> grpc.service.apiservice.GetDeploymentRequest - 14, // 15: grpc.service.apiservice.APIService.GetCommand:input_type -> grpc.service.apiservice.GetCommandRequest - 16, // 16: grpc.service.apiservice.APIService.EnablePiped:input_type -> grpc.service.apiservice.EnablePipedRequest - 18, // 17: grpc.service.apiservice.APIService.DisablePiped:input_type -> grpc.service.apiservice.DisablePipedRequest - 20, // 18: grpc.service.apiservice.APIService.RegisterEvent:input_type -> grpc.service.apiservice.RegisterEventRequest - 22, // 19: grpc.service.apiservice.APIService.RequestPlanPreview:input_type -> grpc.service.apiservice.RequestPlanPreviewRequest - 24, // 20: grpc.service.apiservice.APIService.GetPlanPreviewResults:input_type -> grpc.service.apiservice.GetPlanPreviewResultsRequest - 26, // 21: grpc.service.apiservice.APIService.Encrypt:input_type -> grpc.service.apiservice.EncryptRequest - 1, // 22: grpc.service.apiservice.APIService.AddApplication:output_type -> grpc.service.apiservice.AddApplicationResponse - 3, // 23: grpc.service.apiservice.APIService.SyncApplication:output_type -> grpc.service.apiservice.SyncApplicationResponse - 5, // 24: grpc.service.apiservice.APIService.GetApplication:output_type -> grpc.service.apiservice.GetApplicationResponse - 7, // 25: grpc.service.apiservice.APIService.ListApplications:output_type -> grpc.service.apiservice.ListApplicationsResponse - 9, // 26: grpc.service.apiservice.APIService.DeleteApplication:output_type -> grpc.service.apiservice.DeleteApplicationResponse - 11, // 27: grpc.service.apiservice.APIService.RenameApplicationConfigFile:output_type -> grpc.service.apiservice.RenameApplicationConfigFileResponse - 13, // 28: grpc.service.apiservice.APIService.GetDeployment:output_type -> grpc.service.apiservice.GetDeploymentResponse - 15, // 29: grpc.service.apiservice.APIService.GetCommand:output_type -> grpc.service.apiservice.GetCommandResponse - 17, // 30: grpc.service.apiservice.APIService.EnablePiped:output_type -> grpc.service.apiservice.EnablePipedResponse - 19, // 31: grpc.service.apiservice.APIService.DisablePiped:output_type -> grpc.service.apiservice.DisablePipedResponse - 21, // 32: grpc.service.apiservice.APIService.RegisterEvent:output_type -> grpc.service.apiservice.RegisterEventResponse - 23, // 33: grpc.service.apiservice.APIService.RequestPlanPreview:output_type -> grpc.service.apiservice.RequestPlanPreviewResponse - 25, // 34: grpc.service.apiservice.APIService.GetPlanPreviewResults:output_type -> grpc.service.apiservice.GetPlanPreviewResultsResponse - 27, // 35: grpc.service.apiservice.APIService.Encrypt:output_type -> grpc.service.apiservice.EncryptResponse - 22, // [22:36] is the sub-list for method output_type - 8, // [8:22] is the sub-list for method input_type + 10, // 12: grpc.service.apiservice.APIService.DeleteApplication:input_type -> grpc.service.apiservice.DeleteApplicationRequest + 8, // 13: grpc.service.apiservice.APIService.DisableApplication:input_type -> grpc.service.apiservice.DisableApplicationRequest + 12, // 14: grpc.service.apiservice.APIService.RenameApplicationConfigFile:input_type -> grpc.service.apiservice.RenameApplicationConfigFileRequest + 14, // 15: grpc.service.apiservice.APIService.GetDeployment:input_type -> grpc.service.apiservice.GetDeploymentRequest + 16, // 16: grpc.service.apiservice.APIService.GetCommand:input_type -> grpc.service.apiservice.GetCommandRequest + 18, // 17: grpc.service.apiservice.APIService.EnablePiped:input_type -> grpc.service.apiservice.EnablePipedRequest + 20, // 18: grpc.service.apiservice.APIService.DisablePiped:input_type -> grpc.service.apiservice.DisablePipedRequest + 22, // 19: grpc.service.apiservice.APIService.RegisterEvent:input_type -> grpc.service.apiservice.RegisterEventRequest + 24, // 20: grpc.service.apiservice.APIService.RequestPlanPreview:input_type -> grpc.service.apiservice.RequestPlanPreviewRequest + 26, // 21: grpc.service.apiservice.APIService.GetPlanPreviewResults:input_type -> grpc.service.apiservice.GetPlanPreviewResultsRequest + 28, // 22: grpc.service.apiservice.APIService.Encrypt:input_type -> grpc.service.apiservice.EncryptRequest + 1, // 23: grpc.service.apiservice.APIService.AddApplication:output_type -> grpc.service.apiservice.AddApplicationResponse + 3, // 24: grpc.service.apiservice.APIService.SyncApplication:output_type -> grpc.service.apiservice.SyncApplicationResponse + 5, // 25: grpc.service.apiservice.APIService.GetApplication:output_type -> grpc.service.apiservice.GetApplicationResponse + 7, // 26: grpc.service.apiservice.APIService.ListApplications:output_type -> grpc.service.apiservice.ListApplicationsResponse + 11, // 27: grpc.service.apiservice.APIService.DeleteApplication:output_type -> grpc.service.apiservice.DeleteApplicationResponse + 9, // 28: grpc.service.apiservice.APIService.DisableApplication:output_type -> grpc.service.apiservice.DisableApplicationResponse + 13, // 29: grpc.service.apiservice.APIService.RenameApplicationConfigFile:output_type -> grpc.service.apiservice.RenameApplicationConfigFileResponse + 15, // 30: grpc.service.apiservice.APIService.GetDeployment:output_type -> grpc.service.apiservice.GetDeploymentResponse + 17, // 31: grpc.service.apiservice.APIService.GetCommand:output_type -> grpc.service.apiservice.GetCommandResponse + 19, // 32: grpc.service.apiservice.APIService.EnablePiped:output_type -> grpc.service.apiservice.EnablePipedResponse + 21, // 33: grpc.service.apiservice.APIService.DisablePiped:output_type -> grpc.service.apiservice.DisablePipedResponse + 23, // 34: grpc.service.apiservice.APIService.RegisterEvent:output_type -> grpc.service.apiservice.RegisterEventResponse + 25, // 35: grpc.service.apiservice.APIService.RequestPlanPreview:output_type -> grpc.service.apiservice.RequestPlanPreviewResponse + 27, // 36: grpc.service.apiservice.APIService.GetPlanPreviewResults:output_type -> grpc.service.apiservice.GetPlanPreviewResultsResponse + 29, // 37: grpc.service.apiservice.APIService.Encrypt:output_type -> grpc.service.apiservice.EncryptResponse + 23, // [23:38] is the sub-list for method output_type + 8, // [8:23] is the sub-list for method input_type 8, // [8:8] is the sub-list for extension type_name 8, // [8:8] is the sub-list for extension extendee 0, // [0:8] is the sub-list for field type_name @@ -1977,7 +2093,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteApplicationRequest); i { + switch v := v.(*DisableApplicationRequest); i { case 0: return &v.state case 1: @@ -1989,7 +2105,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteApplicationResponse); i { + switch v := v.(*DisableApplicationResponse); i { case 0: return &v.state case 1: @@ -2001,7 +2117,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RenameApplicationConfigFileRequest); i { + switch v := v.(*DeleteApplicationRequest); i { case 0: return &v.state case 1: @@ -2013,7 +2129,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RenameApplicationConfigFileResponse); i { + switch v := v.(*DeleteApplicationResponse); i { case 0: return &v.state case 1: @@ -2025,7 +2141,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDeploymentRequest); i { + switch v := v.(*RenameApplicationConfigFileRequest); i { case 0: return &v.state case 1: @@ -2037,7 +2153,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDeploymentResponse); i { + switch v := v.(*RenameApplicationConfigFileResponse); i { case 0: return &v.state case 1: @@ -2049,7 +2165,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCommandRequest); i { + switch v := v.(*GetDeploymentRequest); i { case 0: return &v.state case 1: @@ -2061,7 +2177,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCommandResponse); i { + switch v := v.(*GetDeploymentResponse); i { case 0: return &v.state case 1: @@ -2073,7 +2189,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnablePipedRequest); i { + switch v := v.(*GetCommandRequest); i { case 0: return &v.state case 1: @@ -2085,7 +2201,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnablePipedResponse); i { + switch v := v.(*GetCommandResponse); i { case 0: return &v.state case 1: @@ -2097,7 +2213,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DisablePipedRequest); i { + switch v := v.(*EnablePipedRequest); i { case 0: return &v.state case 1: @@ -2109,7 +2225,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DisablePipedResponse); i { + switch v := v.(*EnablePipedResponse); i { case 0: return &v.state case 1: @@ -2121,7 +2237,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterEventRequest); i { + switch v := v.(*DisablePipedRequest); i { case 0: return &v.state case 1: @@ -2133,7 +2249,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterEventResponse); i { + switch v := v.(*DisablePipedResponse); i { case 0: return &v.state case 1: @@ -2145,7 +2261,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RequestPlanPreviewRequest); i { + switch v := v.(*RegisterEventRequest); i { case 0: return &v.state case 1: @@ -2157,7 +2273,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RequestPlanPreviewResponse); i { + switch v := v.(*RegisterEventResponse); i { case 0: return &v.state case 1: @@ -2169,7 +2285,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPlanPreviewResultsRequest); i { + switch v := v.(*RequestPlanPreviewRequest); i { case 0: return &v.state case 1: @@ -2181,7 +2297,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPlanPreviewResultsResponse); i { + switch v := v.(*RequestPlanPreviewResponse); i { case 0: return &v.state case 1: @@ -2193,7 +2309,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EncryptRequest); i { + switch v := v.(*GetPlanPreviewResultsRequest); i { case 0: return &v.state case 1: @@ -2205,6 +2321,30 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { } } file_pkg_app_server_service_apiservice_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetPlanPreviewResultsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_app_server_service_apiservice_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EncryptRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_app_server_service_apiservice_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EncryptResponse); i { case 0: return &v.state @@ -2223,7 +2363,7 @@ func file_pkg_app_server_service_apiservice_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_app_server_service_apiservice_service_proto_rawDesc, NumEnums: 0, - NumMessages: 29, + NumMessages: 31, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/app/server/service/apiservice/service.pb.validate.go b/pkg/app/server/service/apiservice/service.pb.validate.go index 63580a9825..72b935946d 100644 --- a/pkg/app/server/service/apiservice/service.pb.validate.go +++ b/pkg/app/server/service/apiservice/service.pb.validate.go @@ -1049,6 +1049,232 @@ var _ interface { ErrorName() string } = ListApplicationsResponseValidationError{} +// Validate checks the field values on DisableApplicationRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *DisableApplicationRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DisableApplicationRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DisableApplicationRequestMultiError, or nil if none found. +func (m *DisableApplicationRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DisableApplicationRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetApplicationId()) < 1 { + err := DisableApplicationRequestValidationError{ + field: "ApplicationId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DisableApplicationRequestMultiError(errors) + } + + return nil +} + +// DisableApplicationRequestMultiError is an error wrapping multiple validation +// errors returned by DisableApplicationRequest.ValidateAll() if the +// designated constraints aren't met. +type DisableApplicationRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DisableApplicationRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DisableApplicationRequestMultiError) AllErrors() []error { return m } + +// DisableApplicationRequestValidationError is the validation error returned by +// DisableApplicationRequest.Validate if the designated constraints aren't met. +type DisableApplicationRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DisableApplicationRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DisableApplicationRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DisableApplicationRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DisableApplicationRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DisableApplicationRequestValidationError) ErrorName() string { + return "DisableApplicationRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e DisableApplicationRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDisableApplicationRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DisableApplicationRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DisableApplicationRequestValidationError{} + +// Validate checks the field values on DisableApplicationResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *DisableApplicationResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DisableApplicationResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DisableApplicationResponseMultiError, or nil if none found. +func (m *DisableApplicationResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DisableApplicationResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetApplicationId()) < 1 { + err := DisableApplicationResponseValidationError{ + field: "ApplicationId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DisableApplicationResponseMultiError(errors) + } + + return nil +} + +// DisableApplicationResponseMultiError is an error wrapping multiple +// validation errors returned by DisableApplicationResponse.ValidateAll() if +// the designated constraints aren't met. +type DisableApplicationResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DisableApplicationResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DisableApplicationResponseMultiError) AllErrors() []error { return m } + +// DisableApplicationResponseValidationError is the validation error returned +// by DisableApplicationResponse.Validate if the designated constraints aren't met. +type DisableApplicationResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DisableApplicationResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DisableApplicationResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DisableApplicationResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DisableApplicationResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DisableApplicationResponseValidationError) ErrorName() string { + return "DisableApplicationResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e DisableApplicationResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDisableApplicationResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DisableApplicationResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DisableApplicationResponseValidationError{} + // Validate checks the field values on DeleteApplicationRequest with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. diff --git a/pkg/app/server/service/apiservice/service.proto b/pkg/app/server/service/apiservice/service.proto index 2c63a7089a..536511440f 100644 --- a/pkg/app/server/service/apiservice/service.proto +++ b/pkg/app/server/service/apiservice/service.proto @@ -32,6 +32,7 @@ service APIService { rpc GetApplication(GetApplicationRequest) returns (GetApplicationResponse) {} rpc ListApplications(ListApplicationsRequest) returns (ListApplicationsResponse) {} rpc DeleteApplication(DeleteApplicationRequest) returns (DeleteApplicationResponse) {} + rpc DisableApplication(DisableApplicationRequest) returns (DisableApplicationResponse) {} rpc RenameApplicationConfigFile(RenameApplicationConfigFileRequest) returns (RenameApplicationConfigFileResponse) {} rpc GetDeployment(GetDeploymentRequest) returns (GetDeploymentResponse) {} @@ -95,6 +96,14 @@ message ListApplicationsResponse { string cursor = 2; } +message DisableApplicationRequest { + string application_id = 1 [(validate.rules).string.min_len = 1]; +} + +message DisableApplicationResponse { + string application_id = 1 [(validate.rules).string.min_len = 1]; +} + message DeleteApplicationRequest { string application_id = 1 [(validate.rules).string.min_len = 1]; } diff --git a/pkg/app/server/service/apiservice/service_grpc.pb.go b/pkg/app/server/service/apiservice/service_grpc.pb.go index 481d0390c6..5771236c9f 100644 --- a/pkg/app/server/service/apiservice/service_grpc.pb.go +++ b/pkg/app/server/service/apiservice/service_grpc.pb.go @@ -27,6 +27,7 @@ type APIServiceClient interface { GetApplication(ctx context.Context, in *GetApplicationRequest, opts ...grpc.CallOption) (*GetApplicationResponse, error) ListApplications(ctx context.Context, in *ListApplicationsRequest, opts ...grpc.CallOption) (*ListApplicationsResponse, error) DeleteApplication(ctx context.Context, in *DeleteApplicationRequest, opts ...grpc.CallOption) (*DeleteApplicationResponse, error) + DisableApplication(ctx context.Context, in *DisableApplicationRequest, opts ...grpc.CallOption) (*DisableApplicationResponse, error) RenameApplicationConfigFile(ctx context.Context, in *RenameApplicationConfigFileRequest, opts ...grpc.CallOption) (*RenameApplicationConfigFileResponse, error) GetDeployment(ctx context.Context, in *GetDeploymentRequest, opts ...grpc.CallOption) (*GetDeploymentResponse, error) GetCommand(ctx context.Context, in *GetCommandRequest, opts ...grpc.CallOption) (*GetCommandResponse, error) @@ -91,6 +92,15 @@ func (c *aPIServiceClient) DeleteApplication(ctx context.Context, in *DeleteAppl return out, nil } +func (c *aPIServiceClient) DisableApplication(ctx context.Context, in *DisableApplicationRequest, opts ...grpc.CallOption) (*DisableApplicationResponse, error) { + out := new(DisableApplicationResponse) + err := c.cc.Invoke(ctx, "/grpc.service.apiservice.APIService/DisableApplication", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *aPIServiceClient) RenameApplicationConfigFile(ctx context.Context, in *RenameApplicationConfigFileRequest, opts ...grpc.CallOption) (*RenameApplicationConfigFileResponse, error) { out := new(RenameApplicationConfigFileResponse) err := c.cc.Invoke(ctx, "/grpc.service.apiservice.APIService/RenameApplicationConfigFile", in, out, opts...) @@ -181,6 +191,7 @@ type APIServiceServer interface { GetApplication(context.Context, *GetApplicationRequest) (*GetApplicationResponse, error) ListApplications(context.Context, *ListApplicationsRequest) (*ListApplicationsResponse, error) DeleteApplication(context.Context, *DeleteApplicationRequest) (*DeleteApplicationResponse, error) + DisableApplication(context.Context, *DisableApplicationRequest) (*DisableApplicationResponse, error) RenameApplicationConfigFile(context.Context, *RenameApplicationConfigFileRequest) (*RenameApplicationConfigFileResponse, error) GetDeployment(context.Context, *GetDeploymentRequest) (*GetDeploymentResponse, error) GetCommand(context.Context, *GetCommandRequest) (*GetCommandResponse, error) @@ -212,6 +223,9 @@ func (UnimplementedAPIServiceServer) ListApplications(context.Context, *ListAppl func (UnimplementedAPIServiceServer) DeleteApplication(context.Context, *DeleteApplicationRequest) (*DeleteApplicationResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteApplication not implemented") } +func (UnimplementedAPIServiceServer) DisableApplication(context.Context, *DisableApplicationRequest) (*DisableApplicationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DisableApplication not implemented") +} func (UnimplementedAPIServiceServer) RenameApplicationConfigFile(context.Context, *RenameApplicationConfigFileRequest) (*RenameApplicationConfigFileResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RenameApplicationConfigFile not implemented") } @@ -342,6 +356,24 @@ func _APIService_DeleteApplication_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _APIService_DisableApplication_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DisableApplicationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(APIServiceServer).DisableApplication(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.service.apiservice.APIService/DisableApplication", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(APIServiceServer).DisableApplication(ctx, req.(*DisableApplicationRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _APIService_RenameApplicationConfigFile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(RenameApplicationConfigFileRequest) if err := dec(in); err != nil { @@ -531,6 +563,10 @@ var APIService_ServiceDesc = grpc.ServiceDesc{ MethodName: "DeleteApplication", Handler: _APIService_DeleteApplication_Handler, }, + { + MethodName: "DisableApplication", + Handler: _APIService_DisableApplication_Handler, + }, { MethodName: "RenameApplicationConfigFile", Handler: _APIService_RenameApplicationConfigFile_Handler, diff --git a/pkg/config/application_ecs.go b/pkg/config/application_ecs.go index cc4c1d7134..0246e90433 100644 --- a/pkg/config/application_ecs.go +++ b/pkg/config/application_ecs.go @@ -14,7 +14,9 @@ package config -import "encoding/json" +import ( + "encoding/json" +) // ECSApplicationSpec represents an application configuration for ECS application. type ECSApplicationSpec struct { @@ -34,9 +36,16 @@ func (s *ECSApplicationSpec) Validate() error { } type ECSDeploymentInput struct { + // The Amazon Resource Name (ARN) that identifies the cluster. + ClusterArn string `json:"clusterArn"` + // The launch type on which to run your task. + // https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html + // Default is FARGATE + LaunchType string `json:"launchType" default:"FARGATE"` + // VpcConfiguration ECSVpcConfiguration `json:"awsvpcConfiguration"` + AwsVpcConfiguration ECSVpcConfiguration `json:"awsvpcConfiguration"` // The name of service definition file placing in application directory. - // Default is service.json - ServiceDefinitionFile string `json:"serviceDefinitionFile" default:"service.json"` + ServiceDefinitionFile string `json:"serviceDefinitionFile"` // The name of task definition file placing in application directory. // Default is taskdef.json TaskDefinitionFile string `json:"taskDefinitionFile" default:"taskdef.json"` @@ -47,6 +56,16 @@ type ECSDeploymentInput struct { AutoRollback *bool `json:"autoRollback,omitempty" default:"true"` } +func (in *ECSDeploymentInput) IsStandaloneTask() bool { + return in.ServiceDefinitionFile == "" +} + +type ECSVpcConfiguration struct { + Subnets []string + AssignPublicIP string + SecurityGroups []string +} + type ECSTargetGroups struct { Primary json.RawMessage `json:"primary"` Canary json.RawMessage `json:"canary"` diff --git a/pkg/config/application_ecs_test.go b/pkg/config/application_ecs_test.go index bd0bcb69fa..85e74159b8 100644 --- a/pkg/config/application_ecs_test.go +++ b/pkg/config/application_ecs_test.go @@ -28,6 +28,7 @@ func TestECSApplicationConfig(t *testing.T) { fileName string expectedKind Kind expectedAPIVersion string + expectedLaunchType string expectedSpec interface{} expectedError error }{ @@ -60,6 +61,7 @@ func TestECSApplicationConfig(t *testing.T) { TargetGroups: ECSTargetGroups{ Primary: json.RawMessage(`{"containerName":"web","containerPort":80,"targetGroupArn":"arn:aws:elasticloadbalancing:xyz"}`), }, + LaunchType: "FARGATE", AutoRollback: newBoolPointer(true), }, }, diff --git a/pkg/yamlprocessor/yamlprocessor_test.go b/pkg/yamlprocessor/yamlprocessor_test.go index f418e178fe..8599da84cc 100644 --- a/pkg/yamlprocessor/yamlprocessor_test.go +++ b/pkg/yamlprocessor/yamlprocessor_test.go @@ -48,7 +48,7 @@ b: bv c: - 1 - 2 - `, +`, }, } for _, tc := range testcases { @@ -190,7 +190,7 @@ func TestReplaceString(t *testing.T) { yml: "foo: bar", path: "$.foo", value: "", - want: []byte("foo: "), + want: []byte("foo: \n"), wantErr: false, }, { @@ -198,7 +198,7 @@ func TestReplaceString(t *testing.T) { yml: "foo: bar", path: "$.foo", value: "new-text", - want: []byte("foo: new-text"), + want: []byte("foo: new-text\n"), wantErr: false, }, { @@ -208,16 +208,17 @@ foo: bar`, path: "$.foo", value: "new-text", want: []byte(`# comments -foo: new-text`), +foo: new-text +`), wantErr: false, }, { name: "valid value with comment at the same line", yml: `foo: bar # comments - `, +`, path: "$.foo", value: "new-text", - want: []byte("foo: new-text # comments"), + want: []byte("foo: new-text # comments\n"), wantErr: false, }, { @@ -229,7 +230,8 @@ foo: new-text`), value: "new-text", want: []byte(`foo: - new-text - - baz`), + - baz +`), wantErr: false, }, { @@ -237,7 +239,7 @@ foo: new-text`), yml: `foo: [bar, baz]`, path: "$.foo[0]", value: "new-text", - want: []byte(`foo: [new-text, baz]`), + want: []byte("foo: [new-text, baz]\n"), wantErr: false, }, { @@ -250,7 +252,8 @@ foo: value: "new-text", want: []byte(`foo: - new-text - - baz`), + - baz +`), wantErr: false, }, } diff --git a/tool/actions-plan-preview/planpreview.go b/tool/actions-plan-preview/planpreview.go index ab58752297..6b2af8efeb 100644 --- a/tool/actions-plan-preview/planpreview.go +++ b/tool/actions-plan-preview/planpreview.go @@ -133,7 +133,7 @@ const ( noChangeTitleFormat = "Ran plan-preview against head commit %s of this pull request. PipeCD detected `0` updated application. It means no deployment will be triggered once this pull request got merged.\n" hasChangeTitleFormat = "Ran plan-preview against head commit %s of this pull request. PipeCD detected `%d` updated applications and here are their plan results. Once this pull request got merged their deployments will be triggered to run as these estimations.\n" - detailsFormat = "
\nDetails (Click me)\n

\n\n``` %s\n%s\n```\n

\n
\n" + detailsFormat = "
\nDetails (Click me)\n

\n\n``` %s\n%s\n```\n

\n
\n\n" detailsOmittedMessage = "The details are too long to display. Please check the actions log to see full details." appInfoWithEnvFormat = "app: [%s](%s), env: %s, kind: %s" appInfoWithoutEnvFormat = "app: [%s](%s), kind: %s"