From 082559c5f6d3ee92bc3ad02ae80c300c8e883044 Mon Sep 17 00:00:00 2001 From: Alena Petraki <alena.petraki@gmail.com> Date: Mon, 9 Oct 2023 14:16:15 +0300 Subject: [PATCH] =?UTF-8?q?[=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B8]=20=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=D0=BC=D0=B8=20=D0=B4=D0=BB=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D1=85=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=20=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8E=20'Unknown'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/extension/schema.go | 14 ++-- pkg/extension/schema_test.go | 34 +++++++++ pkg/extension/storage.go | 21 ++++-- pkg/items/item.go | 5 -- proto/extensions/extension_service.pb.go | 6 +- proto/extensions/manager_service.pb.go | 94 ++++++++++++------------ 6 files changed, 108 insertions(+), 66 deletions(-) create mode 100644 pkg/extension/schema_test.go diff --git a/pkg/extension/schema.go b/pkg/extension/schema.go index 47724bb3..2b78ba1b 100644 --- a/pkg/extension/schema.go +++ b/pkg/extension/schema.go @@ -46,7 +46,7 @@ func getEnumOpt(opts map[int32]string) []validate.EnumOpt { } func getActionsSchema() *schema.Schema { - action := schema.New( + sch := schema.New( "extension", field.String(validate.Required()).SetTitle("Расширение").SetTextSearch(true), "action", field.String(validate.Required()).SetTitle("Действия").SetTextSearch(true), "target", field.Number( @@ -87,22 +87,22 @@ func getActionsSchema() *schema.Schema { ) // Includes - action.SetIncludes( + sch.SetIncludes( field.Include{Ref: "hoop_item_options", Optional: true}, ) // UI - action.Field.UI.ListView = &field.View{Options: map[string]interface{}{ + sch.Field.UI.ListView = &field.View{Options: map[string]interface{}{ "fields": []string{"name", "action", "kind", "target", "updated_at", "updated_by"}, "sort": []string{"name"}, "page_size": 50, }} - action.Field.UI.Options["title"] = "name" - action.Field.UI.Options["subtitle"] = "action" - action.Field.UI.Options["collection_icon"] = "SettingOutlined/RocketOutlined" + sch.Field.UI.Options["title"] = "name" + sch.Field.UI.Options["subtitle"] = "action" + sch.Field.UI.Options["collection_icon"] = "SettingOutlined/RocketOutlined" - return action + return sch } // NewStatusCollection - создает коллекцию для хранения статусов расширений в пространстве diff --git a/pkg/extension/schema_test.go b/pkg/extension/schema_test.go new file mode 100644 index 00000000..b15a2100 --- /dev/null +++ b/pkg/extension/schema_test.go @@ -0,0 +1,34 @@ +package extension + +import ( + "reflect" + "testing" + + "git.perx.ru/perxis/perxis-go/pkg/schema/validate" +) + +func Test_getEnumOpt(t *testing.T) { + tests := []struct { + name string + opts map[int32]string + want []validate.EnumOpt + }{ + { + name: "#1", + opts: map[int32]string{1: "a", 2: "b", 3: "c", 1000: "w"}, + want: []validate.EnumOpt{ + {Name: "a", Value: float64(0)}, + {Name: "b", Value: float64(1)}, + {Name: "c", Value: float64(2)}, + {Name: "w", Value: float64(3)}, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := getEnumOpt(tt.opts); !reflect.DeepEqual(got, tt.want) { + t.Errorf("getEnumOpt() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/pkg/extension/storage.go b/pkg/extension/storage.go index d6875bfb..f80b978b 100644 --- a/pkg/extension/storage.go +++ b/pkg/extension/storage.go @@ -5,6 +5,7 @@ import ( "strings" "git.perx.ru/perxis/perxis-go/pkg/collections" + "git.perx.ru/perxis/perxis-go/pkg/data" "git.perx.ru/perxis/perxis-go/pkg/errors" "git.perx.ru/perxis/perxis-go/pkg/setup" pb "git.perx.ru/perxis/perxis-go/proto/extensions" @@ -72,18 +73,25 @@ func (s *storage) GetStatus(ctx context.Context, spaceID, envID string, extensio // переданные расширения func (s *storage) FindStatuses(ctx context.Context, spaceID, envID string, extensions ...string) ([]*Status, error) { itms, _, err := s.content.Items.Find(ctx, spaceID, envID, StatusCollectionID, &items.Filter{ID: extensions}) - if err != nil { + if err != nil && !strings.Contains(err.Error(), collections.ErrNotFound.Error()) { return nil, err } + res := make([]*Status, 0, len(itms)) + + if len(extensions) == 0 { + for _, item := range itms { + res = append(res, statusFromItem(item.ID, item)) + } + return res, nil + } + extensionToItem := make(map[string]*items.Item, len(itms)) for _, item := range itms { extensionToItem[item.ID] = item } - - res := make([]*Status, len(extensions)) - for i, extension := range extensions { - res[i] = statusFromItem(extension, extensionToItem[extension]) + for _, extension := range extensions { + res = append(res, statusFromItem(extension, extensionToItem[extension])) } return res, nil @@ -100,9 +108,10 @@ func (s *storage) SetStatus(ctx context.Context, spaceID, envID string, extensio SpaceID: spaceID, EnvID: envID, CollectionID: StatusCollectionID, + Data: make(map[string]interface{}), } - _ = item.Set("id", extension) + _ = data.Set("id", item.Data, extension) // item.Set устанавливает идентификатор записи _ = item.Set("title", status.Title) _ = item.Set("extension_state", float64(status.State)) _ = item.Set("version", status.InstalledVersion) diff --git a/pkg/items/item.go b/pkg/items/item.go index b8d577a9..f0fc8180 100644 --- a/pkg/items/item.go +++ b/pkg/items/item.go @@ -286,11 +286,6 @@ func (i *Item) SetSystemField(field string, value interface{}) error { switch field { case "id": i.ID, ok = value.(string) - if !ok { - return ErrIncorrectValue - } - // нужно учитывать, что поле ID может быть в схеме и запрошена установка именно для него - return i.setItemData("id", value) case "space_id": i.SpaceID, ok = value.(string) case "env_id": diff --git a/proto/extensions/extension_service.pb.go b/proto/extensions/extension_service.pb.go index 69db8cb2..0031b382 100644 --- a/proto/extensions/extension_service.pb.go +++ b/proto/extensions/extension_service.pb.go @@ -180,7 +180,7 @@ func (*InstallRequest) Descriptor() ([]byte, []int) { return file_extensions_extension_service_proto_rawDescGZIP(), []int{0} } -func (x *InstallRequest) GetInstalledExtensions() []string { +func (x *InstallRequest) GetExtensions() []string { if x != nil { return x.Extensions } @@ -253,7 +253,7 @@ func (*UninstallRequest) Descriptor() ([]byte, []int) { return file_extensions_extension_service_proto_rawDescGZIP(), []int{1} } -func (x *UninstallRequest) GetInstalledExtensions() []string { +func (x *UninstallRequest) GetExtensions() []string { if x != nil { return x.Extensions } @@ -331,7 +331,7 @@ func (*CheckRequest) Descriptor() ([]byte, []int) { return file_extensions_extension_service_proto_rawDescGZIP(), []int{2} } -func (x *CheckRequest) GetInstalledExtensions() []string { +func (x *CheckRequest) GetExtensions() []string { if x != nil { return x.Extensions } diff --git a/proto/extensions/manager_service.pb.go b/proto/extensions/manager_service.pb.go index 38161da1..47252630 100644 --- a/proto/extensions/manager_service.pb.go +++ b/proto/extensions/manager_service.pb.go @@ -50,25 +50,28 @@ const ( type State int32 const ( - State_PENDING State = 0 + State_UNKNOWN State = 0 State_INSTALLED State = 1 State_IN_PROGRESS State = 2 State_FAIL State = 3 + State_PENDING State = 4 ) // Enum value maps for State. var ( State_name = map[int32]string{ - 0: "PENDING", + 0: "UNKNOWN", 1: "INSTALLED", 2: "IN_PROGRESS", 3: "FAIL", + 4: "PENDING", } State_value = map[string]int32{ - "PENDING": 0, + "UNKNOWN": 0, "INSTALLED": 1, "IN_PROGRESS": 2, "FAIL": 3, + "PENDING": 4, } ) @@ -143,7 +146,7 @@ func (*GetInstalledExtensionsRequest) Descriptor() ([]byte, []int) { return file_extensions_manager_service_proto_rawDescGZIP(), []int{0} } -func (x *GetInstalledExtensionsRequest) GetInstalledExtensions() []string { +func (x *GetInstalledExtensionsRequest) GetExtensions() []string { if x != nil { return x.Extensions } @@ -356,7 +359,7 @@ func (*RegisterExtensionsRequest) Descriptor() ([]byte, []int) { return file_extensions_manager_service_proto_rawDescGZIP(), []int{3} } -func (x *RegisterExtensionsRequest) GetInstalledExtensions() []*ExtensionDescriptor { +func (x *RegisterExtensionsRequest) GetExtensions() []*ExtensionDescriptor { if x != nil { return x.Extensions } @@ -441,7 +444,7 @@ func (*UnregisterExtensionsRequest) Descriptor() ([]byte, []int) { return file_extensions_manager_service_proto_rawDescGZIP(), []int{5} } -func (x *UnregisterExtensionsRequest) GetInstalledExtensions() []*ExtensionDescriptor { +func (x *UnregisterExtensionsRequest) GetExtensions() []*ExtensionDescriptor { if x != nil { return x.Extensions } @@ -620,7 +623,7 @@ func (*ListExtensionsResponse) Descriptor() ([]byte, []int) { return file_extensions_manager_service_proto_rawDescGZIP(), []int{9} } -func (x *ListExtensionsResponse) GetInstalledExtensions() []*ExtensionDescriptor { +func (x *ListExtensionsResponse) GetExtensions() []*ExtensionDescriptor { if x != nil { return x.Extensions } @@ -705,7 +708,7 @@ func (x *SpaceExtensions) GetState() State { if x != nil { return x.State } - return State_PENDING + return State_UNKNOWN } func (x *SpaceExtensions) GetStatusError() string { @@ -789,7 +792,7 @@ func (x *GetInstalledExtensionsResponse_Status) GetState() State { if x != nil { return x.State } - return State_PENDING + return State_UNKNOWN } func (x *GetInstalledExtensionsResponse_Status) GetMsg() string { @@ -949,43 +952,44 @@ var file_extensions_manager_service_proto_rawDesc = []byte{ 0x61, 0x74, 0x75, 0x73, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xa0, 0x51, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x84, 0x52, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x73, 0x67, 0x2a, 0x3e, - 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, - 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x73, 0x67, 0x2a, 0x4b, + 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, - 0x53, 0x53, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x03, 0x32, 0xbb, - 0x03, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x65, 0x0a, 0x12, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x25, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x6b, 0x0a, 0x14, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x59, - 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x21, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x16, 0x47, 0x65, 0x74, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, - 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3a, 0x5a, 0x38, - 0x67, 0x69, 0x74, 0x2e, 0x70, 0x65, 0x72, 0x78, 0x2e, 0x72, 0x75, 0x2f, 0x70, 0x65, 0x72, 0x78, - 0x69, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x78, 0x69, 0x73, 0x2d, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x53, 0x53, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x03, 0x12, 0x0b, + 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x32, 0xbb, 0x03, 0x0a, 0x17, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x65, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x2e, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, + 0x0a, 0x14, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x28, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x6e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x0e, 0x4c, + 0x69, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x2e, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x22, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x29, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, + 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x65, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3a, 0x5a, 0x38, 0x67, 0x69, 0x74, + 0x2e, 0x70, 0x65, 0x72, 0x78, 0x2e, 0x72, 0x75, 0x2f, 0x70, 0x65, 0x72, 0x78, 0x69, 0x73, 0x2f, + 0x70, 0x65, 0x72, 0x78, 0x69, 0x73, 0x2d, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x65, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( -- GitLab