From eb7ebcf5c51c0ccdca9367468665222e63873692 Mon Sep 17 00:00:00 2001 From: Kent Rancourt Date: Tue, 24 Oct 2023 17:19:48 -0400 Subject: [PATCH] add get freight command to cli (#1001) Signed-off-by: Kent --- api/v1alpha1/types.proto | 25 +- internal/api/query_freights_v1alpha1.go | 25 +- internal/api/query_freights_v1alpha1_test.go | 49 +- internal/api/types/v1alpha1/types.go | 111 ++- internal/cli/get/freight.go | 83 ++ internal/cli/get/get.go | 3 +- pkg/api/v1alpha1/types.pb.go | 790 +++++++++++++------ ui/src/gen/v1alpha1/types_pb.ts | 189 ++++- 8 files changed, 946 insertions(+), 329 deletions(-) create mode 100644 internal/cli/get/freight.go diff --git a/api/v1alpha1/types.proto b/api/v1alpha1/types.proto index d296e2114..82efe3d21 100644 --- a/api/v1alpha1/types.proto +++ b/api/v1alpha1/types.proto @@ -148,7 +148,7 @@ message Promotion { message PromotionInfo { string name = 1 [json_name = "name"]; - Freight freight = 2 [json_name = "freight"]; + SimpleFreight freight = 2 [json_name = "freight"]; } message PromotionList { @@ -209,17 +209,34 @@ message StageSpec { } message Freight { + string api_version = 1 [json_name = "apiVersion"]; + string kind = 2 [json_name = "kind"]; + github.com.akuity.kargo.pkg.api.metav1.ObjectMeta metadata = 3 [json_name = "metadata"]; + string id = 4 [json_name = "id"]; + repeated GitCommit commits = 5 [json_name = "commits"]; + repeated Image images = 6 [json_name = "images"]; + repeated Chart charts = 7 [json_name = "charts"]; + FreightStatus status = 8 [json_name = "status"]; +} + +message FreightStatus { + map qualifications = 1; +} + +message Qualification { +} + +message SimpleFreight { string id = 1 [json_name = "id"]; optional google.protobuf.Timestamp first_seen = 2 [json_name = "firstSeen"]; repeated GitCommit commits = 4 [json_name = "commits"]; repeated Image images = 5 [json_name = "images"]; repeated Chart charts = 6 [json_name = "charts"]; - optional bool qualified = 8 [json_name = "qualified"]; } message StageStatus { - optional Freight current_freight = 2 [json_name = "currentFreight"]; - repeated Freight history = 3 [json_name = "history"]; + optional SimpleFreight current_freight = 2 [json_name = "currentFreight"]; + repeated SimpleFreight history = 3 [json_name = "history"]; string error = 4 [json_name = "error"]; optional Health health = 5 [json_name = "health"]; optional PromotionInfo current_promotion = 6 [json_name = "currentPromotion"]; diff --git a/internal/api/query_freights_v1alpha1.go b/internal/api/query_freights_v1alpha1.go index bcf4c7d68..021155f52 100644 --- a/internal/api/query_freights_v1alpha1.go +++ b/internal/api/query_freights_v1alpha1.go @@ -99,6 +99,7 @@ func (s *server) QueryFreight( case GroupByChartRepository: freightGroups = groupByChartRepo(freight, req.Msg.GetGroup()) default: + freightGroups = noGroupBy(freight) } sortFreightGroups(req.Msg.GetOrderBy(), req.Msg.GetReverse(), freightGroups) @@ -239,19 +240,23 @@ func groupByChartRepo( return groups } +func noGroupBy(freight []kargoapi.Freight) map[string]*svcv1alpha1.FreightList { + freightList := &svcv1alpha1.FreightList{} + for _, f := range freight { + freightList = appendToFreightList(freightList, f) + } + return map[string]*svcv1alpha1.FreightList{ + "": freightList, + } +} + func appendToFreightList(list *svcv1alpha1.FreightList, f kargoapi.Freight) *svcv1alpha1.FreightList { if list == nil { list = &svcv1alpha1.FreightList{} } - sf := kargoapi.SimpleFreight{ - ID: f.ID, - Commits: f.Commits, - Images: f.Images, - Charts: f.Charts, - } list.Freight = append( list.Freight, - v1alpha1.ToFreightProto(sf, &f.CreationTimestamp.Time), + v1alpha1.ToFreightProto(f), ) return list } @@ -277,7 +282,8 @@ type ByFirstSeen []*apiv1alpha1.Freight func (a ByFirstSeen) Len() int { return len(a) } func (a ByFirstSeen) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a ByFirstSeen) Less(i, j int) bool { - return a[i].FirstSeen.AsTime().Before(a[j].FirstSeen.AsTime()) + return a[i].GetMetadata().GetCreationTimestamp().AsTime(). + Before(a[j].GetMetadata().GetCreationTimestamp().AsTime()) } // NOTE: sorting by tag will sort by the first container image we found @@ -301,7 +307,8 @@ func (a ByTag) Less(i, j int) bool { return iTag < jTag } // They are not comparable. Fallback to firstSeen - return a[i].FirstSeen.AsTime().Before(a[j].FirstSeen.AsTime()) + return a[i].GetMetadata().GetCreationTimestamp().AsTime(). + Before(a[j].GetMetadata().GetCreationTimestamp().AsTime()) } func getRepoAndTag(s *apiv1alpha1.Freight) (string, string, *semver.Version) { diff --git a/internal/api/query_freights_v1alpha1_test.go b/internal/api/query_freights_v1alpha1_test.go index e0094a2d3..f00318a4a 100644 --- a/internal/api/query_freights_v1alpha1_test.go +++ b/internal/api/query_freights_v1alpha1_test.go @@ -14,6 +14,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" kargoapi "github.com/akuity/kargo/api/v1alpha1" + svcv1meta1 "github.com/akuity/kargo/pkg/api/metav1" svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" "github.com/akuity/kargo/pkg/api/v1alpha1" ) @@ -824,18 +825,30 @@ func TestSortFreightGroups(t *testing.T) { groups: map[string]*svcv1alpha1.FreightList{ "": { Freight: []*v1alpha1.Freight{ - {FirstSeen: timestamppb.New(now)}, - {FirstSeen: timestamppb.New(now.Add(time.Hour))}, - {FirstSeen: timestamppb.New(now.Add(-time.Hour))}, + { + Metadata: &svcv1meta1.ObjectMeta{ + CreationTimestamp: timestamppb.New(now), + }, + }, + { + Metadata: &svcv1meta1.ObjectMeta{ + CreationTimestamp: timestamppb.New(now.Add(time.Hour)), + }, + }, + { + Metadata: &svcv1meta1.ObjectMeta{ + CreationTimestamp: timestamppb.New(now.Add(-time.Hour)), + }, + }, }, }, }, orderBy: OrderByFirstSeen, assertions: func(groups map[string]*svcv1alpha1.FreightList) { require.Len(t, groups[""].Freight, 3) - require.Equal(t, now.Add(-time.Hour), groups[""].Freight[0].FirstSeen.AsTime()) - require.Equal(t, now, groups[""].Freight[1].FirstSeen.AsTime()) - require.Equal(t, now.Add(time.Hour), groups[""].Freight[2].FirstSeen.AsTime()) + require.Equal(t, now.Add(-time.Hour), groups[""].Freight[0].Metadata.CreationTimestamp.AsTime()) + require.Equal(t, now, groups[""].Freight[1].Metadata.CreationTimestamp.AsTime()) + require.Equal(t, now.Add(time.Hour), groups[""].Freight[2].Metadata.CreationTimestamp.AsTime()) }, }, { @@ -843,9 +856,21 @@ func TestSortFreightGroups(t *testing.T) { groups: map[string]*svcv1alpha1.FreightList{ "": { Freight: []*v1alpha1.Freight{ - {FirstSeen: timestamppb.New(now)}, - {FirstSeen: timestamppb.New(now.Add(time.Hour))}, - {FirstSeen: timestamppb.New(now.Add(-time.Hour))}, + { + Metadata: &svcv1meta1.ObjectMeta{ + CreationTimestamp: timestamppb.New(now), + }, + }, + { + Metadata: &svcv1meta1.ObjectMeta{ + CreationTimestamp: timestamppb.New(now.Add(time.Hour)), + }, + }, + { + Metadata: &svcv1meta1.ObjectMeta{ + CreationTimestamp: timestamppb.New(now.Add(-time.Hour)), + }, + }, }, }, }, @@ -853,9 +878,9 @@ func TestSortFreightGroups(t *testing.T) { reverse: true, assertions: func(groups map[string]*svcv1alpha1.FreightList) { require.Len(t, groups[""].Freight, 3) - require.Equal(t, now.Add(time.Hour), groups[""].Freight[0].FirstSeen.AsTime()) - require.Equal(t, now, groups[""].Freight[1].FirstSeen.AsTime()) - require.Equal(t, now.Add(-time.Hour), groups[""].Freight[2].FirstSeen.AsTime()) + require.Equal(t, now.Add(time.Hour), groups[""].Freight[0].Metadata.CreationTimestamp.AsTime()) + require.Equal(t, now, groups[""].Freight[1].Metadata.CreationTimestamp.AsTime()) + require.Equal(t, now.Add(-time.Hour), groups[""].Freight[2].Metadata.CreationTimestamp.AsTime()) }, }, } diff --git a/internal/api/types/v1alpha1/types.go b/internal/api/types/v1alpha1/types.go index c5b22b4a3..d55dd006d 100644 --- a/internal/api/types/v1alpha1/types.go +++ b/internal/api/types/v1alpha1/types.go @@ -63,17 +63,58 @@ func FromStageStatusProto(s *v1alpha1.StageStatus) *kargoapi.StageStatus { } history := make(kargoapi.SimpleFreightStack, len(s.GetHistory())) for idx, freight := range s.GetHistory() { - history[idx] = *FromFreightProto(freight) + history[idx] = *FromSimpleFreightProto(freight) } return &kargoapi.StageStatus{ - CurrentFreight: FromFreightProto(s.GetCurrentFreight()), + CurrentFreight: FromSimpleFreightProto(s.GetCurrentFreight()), History: history, Health: FromHealthProto(s.GetHealth()), Error: s.GetError(), } } -func FromFreightProto(s *v1alpha1.Freight) *kargoapi.SimpleFreight { +func FromFreightProto(f *v1alpha1.Freight) *kargoapi.Freight { + if f == nil { + return nil + } + var objectMeta kubemetav1.ObjectMeta + if f.GetMetadata() != nil { + objectMeta = *typesmetav1.FromObjectMetaProto(f.GetMetadata()) + } + commits := make([]kargoapi.GitCommit, len(f.GetCommits())) + for idx, commit := range f.GetCommits() { + commits[idx] = *FromGitCommitProto(commit) + } + images := make([]kargoapi.Image, len(f.GetImages())) + for idx, image := range f.GetImages() { + images[idx] = *FromImageProto(image) + } + charts := make([]kargoapi.Chart, len(f.GetCharts())) + for idx, chart := range f.GetCharts() { + charts[idx] = *FromChartProto(chart) + } + qualifications := + make(map[string]kargoapi.Qualification, len(f.Status.Qualifications)) + for stageName := range f.Status.Qualifications { + qualifications[stageName] = kargoapi.Qualification{} + } + return &kargoapi.Freight{ + TypeMeta: kubemetav1.TypeMeta{ + APIVersion: kargoapi.GroupVersion.String(), + Kind: "Freight", + }, + ObjectMeta: objectMeta, + ID: f.GetId(), + Commits: commits, + Images: images, + Charts: charts, + Status: kargoapi.FreightStatus{ + Qualifications: qualifications, + }, + } +} + +func FromSimpleFreightProto(s *v1alpha1.SimpleFreight) *kargoapi.SimpleFreight { if s == nil { return nil } @@ -480,13 +521,13 @@ func FromPromotionPolicyProto(p *v1alpha1.PromotionPolicy) *kargoapi.PromotionPo func ToStageProto(e kargoapi.Stage) *v1alpha1.Stage { // Status - var currentFreight *v1alpha1.Freight + var currentFreight *v1alpha1.SimpleFreight if e.Status.CurrentFreight != nil { - currentFreight = ToFreightProto(*e.Status.CurrentFreight, nil) + currentFreight = ToSimpleFreightProto(*e.Status.CurrentFreight, nil) } - history := make([]*v1alpha1.Freight, len(e.Status.History)) + history := make([]*v1alpha1.SimpleFreight, len(e.Status.History)) for idx := range e.Status.History { - history[idx] = ToFreightProto(e.Status.History[idx], nil) + history[idx] = ToSimpleFreightProto(e.Status.History[idx], nil) } var health *v1alpha1.Health if e.Status.Health != nil { @@ -510,7 +551,7 @@ func ToStageProto(e kargoapi.Stage) *v1alpha1.Stage { } currentPromotion = &v1alpha1.PromotionInfo{ Name: e.Status.CurrentPromotion.Name, - Freight: ToFreightProto(sf, nil), + Freight: ToSimpleFreightProto(sf, nil), } } return &v1alpha1.Stage{ @@ -723,25 +764,55 @@ func ToArgoCDHelmImageUpdateProto(a kargoapi.ArgoCDHelmImageUpdate) *v1alpha1.Ar } } -func ToFreightProto(e kargoapi.SimpleFreight, firstSeen *time.Time) *v1alpha1.Freight { +func ToFreightProto(f kargoapi.Freight) *v1alpha1.Freight { + metadata := f.ObjectMeta.DeepCopy() + metadata.SetManagedFields(nil) + commits := make([]*v1alpha1.GitCommit, len(f.Commits)) + for idx := range f.Commits { + commits[idx] = ToGitCommitProto(f.Commits[idx]) + } + images := make([]*v1alpha1.Image, len(f.Images)) + for idx := range f.Images { + images[idx] = ToImageProto(f.Images[idx]) + } + charts := make([]*v1alpha1.Chart, len(f.Charts)) + for idx := range f.Charts { + charts[idx] = ToChartProto(f.Charts[idx]) + } + qualifications := + make(map[string]*v1alpha1.Qualification, len(f.Status.Qualifications)) + for stageName := range f.Status.Qualifications { + qualifications[stageName] = &v1alpha1.Qualification{} + } + return &v1alpha1.Freight{ + ApiVersion: f.APIVersion, + Kind: f.Kind, + Metadata: typesmetav1.ToObjectMetaProto(*metadata), + Status: &v1alpha1.FreightStatus{ + Qualifications: qualifications, + }, + } +} + +func ToSimpleFreightProto(s kargoapi.SimpleFreight, firstSeen *time.Time) *v1alpha1.SimpleFreight { var firstSeenProto *timestamppb.Timestamp if firstSeen != nil { firstSeenProto = timestamppb.New(*firstSeen) } - commits := make([]*v1alpha1.GitCommit, len(e.Commits)) - for idx := range e.Commits { - commits[idx] = ToGitCommitProto(e.Commits[idx]) + commits := make([]*v1alpha1.GitCommit, len(s.Commits)) + for idx := range s.Commits { + commits[idx] = ToGitCommitProto(s.Commits[idx]) } - images := make([]*v1alpha1.Image, len(e.Images)) - for idx := range e.Images { - images[idx] = ToImageProto(e.Images[idx]) + images := make([]*v1alpha1.Image, len(s.Images)) + for idx := range s.Images { + images[idx] = ToImageProto(s.Images[idx]) } - charts := make([]*v1alpha1.Chart, len(e.Charts)) - for idx := range e.Charts { - charts[idx] = ToChartProto(e.Charts[idx]) + charts := make([]*v1alpha1.Chart, len(s.Charts)) + for idx := range s.Charts { + charts[idx] = ToChartProto(s.Charts[idx]) } - return &v1alpha1.Freight{ - Id: e.ID, + return &v1alpha1.SimpleFreight{ + Id: s.ID, FirstSeen: firstSeenProto, Commits: commits, Images: images, diff --git a/internal/cli/get/freight.go b/internal/cli/get/freight.go new file mode 100644 index 000000000..ba488f4bd --- /dev/null +++ b/internal/cli/get/freight.go @@ -0,0 +1,83 @@ +package get + +import ( + goerrors "errors" + + "connectrpc.com/connect" + "github.com/pkg/errors" + "github.com/spf13/cobra" + "golang.org/x/exp/slices" + + kargoapi "github.com/akuity/kargo/api/v1alpha1" + typesv1alpha1 "github.com/akuity/kargo/internal/api/types/v1alpha1" + "github.com/akuity/kargo/internal/cli/client" + "github.com/akuity/kargo/internal/cli/option" + v1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func newGetFreightCommand(opt *option.Option) *cobra.Command { + cmd := &cobra.Command{ + Use: "freight --project=project [NAME...]", + Short: "Display one or many pieces of freight", + Example: ` +# List all freight in the project +kargo get freight --project=my-project + +# List all freight in JSON output format +kargo get freight --project=my-project -o json + +# Get a single piece of freight in the project +kargo get freight --project=my-project my-freight +`, + RunE: func(cmd *cobra.Command, args []string) error { + ctx := cmd.Context() + + project := opt.Project.OrElse("") + if project == "" { + return errors.New("project is required") + } + + kargoSvcCli, err := client.GetClientFromConfig(ctx, opt) + if err != nil { + return errors.New("get client from config") + } + resp, err := kargoSvcCli.QueryFreight(ctx, connect.NewRequest(&v1alpha1.QueryFreightRequest{ + Project: project, + })) + if err != nil { + return errors.Wrap(err, "query freight") + } + + names := slices.Compact(args) + // We didn't specify any groupBy, so there should be one group with an + // empty key + freight := resp.Msg.GetGroups()[""] + res := make([]*kargoapi.Freight, 0, len(freight.Freight)) + var resErr error + if len(names) == 0 { + for _, f := range freight.Freight { + res = append(res, typesv1alpha1.FromFreightProto(f)) + } + } else { + freightByName := make(map[string]*kargoapi.Freight, len(freight.Freight)) + for _, f := range freight.Freight { + freightByName[f.GetMetadata().GetName()] = typesv1alpha1.FromFreightProto(f) + } + for _, name := range names { + if f, ok := freightByName[name]; ok { + res = append(res, f) + } else { + resErr = goerrors.Join(err, errors.Errorf("freight %q not found", name)) + } + } + } + if err := printObjects(opt, res); err != nil { + return err + } + return resErr + }, + } + option.OptionalProject(opt.Project)(cmd.Flags()) + opt.PrintFlags.AddFlags(cmd) + return cmd +} diff --git a/internal/cli/get/get.go b/internal/cli/get/get.go index a311ac2cb..11ff77819 100644 --- a/internal/cli/get/get.go +++ b/internal/cli/get/get.go @@ -28,9 +28,10 @@ kargo get promotions --project=my-project --stage=my-stage `, } // Subcommands + cmd.AddCommand(newGetFreightCommand(opt)) cmd.AddCommand(newGetProjectsCommand(opt)) - cmd.AddCommand(newGetStagesCommand(opt)) cmd.AddCommand(newGetPromotionsCommand(opt)) + cmd.AddCommand(newGetStagesCommand(opt)) return cmd } diff --git a/pkg/api/v1alpha1/types.pb.go b/pkg/api/v1alpha1/types.pb.go index 3e79f6b6f..f0a1d927a 100644 --- a/pkg/api/v1alpha1/types.pb.go +++ b/pkg/api/v1alpha1/types.pb.go @@ -1483,8 +1483,8 @@ type PromotionInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Freight *Freight `protobuf:"bytes,2,opt,name=freight,proto3" json:"freight,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Freight *SimpleFreight `protobuf:"bytes,2,opt,name=freight,proto3" json:"freight,omitempty"` } func (x *PromotionInfo) Reset() { @@ -1526,7 +1526,7 @@ func (x *PromotionInfo) GetName() string { return "" } -func (x *PromotionInfo) GetFreight() *Freight { +func (x *PromotionInfo) GetFreight() *SimpleFreight { if x != nil { return x.Freight } @@ -2144,12 +2144,14 @@ type Freight struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - FirstSeen *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=first_seen,json=firstSeen,proto3,oneof" json:"first_seen,omitempty"` - Commits []*GitCommit `protobuf:"bytes,4,rep,name=commits,proto3" json:"commits,omitempty"` - Images []*Image `protobuf:"bytes,5,rep,name=images,proto3" json:"images,omitempty"` - Charts []*Chart `protobuf:"bytes,6,rep,name=charts,proto3" json:"charts,omitempty"` - Qualified *bool `protobuf:"varint,8,opt,name=qualified,proto3,oneof" json:"qualified,omitempty"` + ApiVersion string `protobuf:"bytes,1,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` + Kind string `protobuf:"bytes,2,opt,name=kind,proto3" json:"kind,omitempty"` + Metadata *metav1.ObjectMeta `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` + Id string `protobuf:"bytes,4,opt,name=id,proto3" json:"id,omitempty"` + Commits []*GitCommit `protobuf:"bytes,5,rep,name=commits,proto3" json:"commits,omitempty"` + Images []*Image `protobuf:"bytes,6,rep,name=images,proto3" json:"images,omitempty"` + Charts []*Chart `protobuf:"bytes,7,rep,name=charts,proto3" json:"charts,omitempty"` + Status *FreightStatus `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` } func (x *Freight) Reset() { @@ -2184,20 +2186,34 @@ func (*Freight) Descriptor() ([]byte, []int) { return file_v1alpha1_types_proto_rawDescGZIP(), []int{34} } -func (x *Freight) GetId() string { +func (x *Freight) GetApiVersion() string { if x != nil { - return x.Id + return x.ApiVersion } return "" } -func (x *Freight) GetFirstSeen() *timestamppb.Timestamp { +func (x *Freight) GetKind() string { if x != nil { - return x.FirstSeen + return x.Kind + } + return "" +} + +func (x *Freight) GetMetadata() *metav1.ObjectMeta { + if x != nil { + return x.Metadata } return nil } +func (x *Freight) GetId() string { + if x != nil { + return x.Id + } + return "" +} + func (x *Freight) GetCommits() []*GitCommit { if x != nil { return x.Commits @@ -2219,11 +2235,175 @@ func (x *Freight) GetCharts() []*Chart { return nil } -func (x *Freight) GetQualified() bool { - if x != nil && x.Qualified != nil { - return *x.Qualified +func (x *Freight) GetStatus() *FreightStatus { + if x != nil { + return x.Status } - return false + return nil +} + +type FreightStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Qualifications map[string]*Qualification `protobuf:"bytes,1,rep,name=qualifications,proto3" json:"qualifications,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *FreightStatus) Reset() { + *x = FreightStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_v1alpha1_types_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FreightStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FreightStatus) ProtoMessage() {} + +func (x *FreightStatus) ProtoReflect() protoreflect.Message { + mi := &file_v1alpha1_types_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FreightStatus.ProtoReflect.Descriptor instead. +func (*FreightStatus) Descriptor() ([]byte, []int) { + return file_v1alpha1_types_proto_rawDescGZIP(), []int{35} +} + +func (x *FreightStatus) GetQualifications() map[string]*Qualification { + if x != nil { + return x.Qualifications + } + return nil +} + +type Qualification struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Qualification) Reset() { + *x = Qualification{} + if protoimpl.UnsafeEnabled { + mi := &file_v1alpha1_types_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Qualification) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Qualification) ProtoMessage() {} + +func (x *Qualification) ProtoReflect() protoreflect.Message { + mi := &file_v1alpha1_types_proto_msgTypes[36] + 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 Qualification.ProtoReflect.Descriptor instead. +func (*Qualification) Descriptor() ([]byte, []int) { + return file_v1alpha1_types_proto_rawDescGZIP(), []int{36} +} + +type SimpleFreight struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + FirstSeen *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=first_seen,json=firstSeen,proto3,oneof" json:"first_seen,omitempty"` + Commits []*GitCommit `protobuf:"bytes,4,rep,name=commits,proto3" json:"commits,omitempty"` + Images []*Image `protobuf:"bytes,5,rep,name=images,proto3" json:"images,omitempty"` + Charts []*Chart `protobuf:"bytes,6,rep,name=charts,proto3" json:"charts,omitempty"` +} + +func (x *SimpleFreight) Reset() { + *x = SimpleFreight{} + if protoimpl.UnsafeEnabled { + mi := &file_v1alpha1_types_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SimpleFreight) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SimpleFreight) ProtoMessage() {} + +func (x *SimpleFreight) ProtoReflect() protoreflect.Message { + mi := &file_v1alpha1_types_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SimpleFreight.ProtoReflect.Descriptor instead. +func (*SimpleFreight) Descriptor() ([]byte, []int) { + return file_v1alpha1_types_proto_rawDescGZIP(), []int{37} +} + +func (x *SimpleFreight) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *SimpleFreight) GetFirstSeen() *timestamppb.Timestamp { + if x != nil { + return x.FirstSeen + } + return nil +} + +func (x *SimpleFreight) GetCommits() []*GitCommit { + if x != nil { + return x.Commits + } + return nil +} + +func (x *SimpleFreight) GetImages() []*Image { + if x != nil { + return x.Images + } + return nil +} + +func (x *SimpleFreight) GetCharts() []*Chart { + if x != nil { + return x.Charts + } + return nil } type StageStatus struct { @@ -2231,17 +2411,17 @@ type StageStatus struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - CurrentFreight *Freight `protobuf:"bytes,2,opt,name=current_freight,json=currentFreight,proto3,oneof" json:"current_freight,omitempty"` - History []*Freight `protobuf:"bytes,3,rep,name=history,proto3" json:"history,omitempty"` - Error string `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"` - Health *Health `protobuf:"bytes,5,opt,name=health,proto3,oneof" json:"health,omitempty"` - CurrentPromotion *PromotionInfo `protobuf:"bytes,6,opt,name=current_promotion,json=currentPromotion,proto3,oneof" json:"current_promotion,omitempty"` + CurrentFreight *SimpleFreight `protobuf:"bytes,2,opt,name=current_freight,json=currentFreight,proto3,oneof" json:"current_freight,omitempty"` + History []*SimpleFreight `protobuf:"bytes,3,rep,name=history,proto3" json:"history,omitempty"` + Error string `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"` + Health *Health `protobuf:"bytes,5,opt,name=health,proto3,oneof" json:"health,omitempty"` + CurrentPromotion *PromotionInfo `protobuf:"bytes,6,opt,name=current_promotion,json=currentPromotion,proto3,oneof" json:"current_promotion,omitempty"` } func (x *StageStatus) Reset() { *x = StageStatus{} if protoimpl.UnsafeEnabled { - mi := &file_v1alpha1_types_proto_msgTypes[35] + mi := &file_v1alpha1_types_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2254,7 +2434,7 @@ func (x *StageStatus) String() string { func (*StageStatus) ProtoMessage() {} func (x *StageStatus) ProtoReflect() protoreflect.Message { - mi := &file_v1alpha1_types_proto_msgTypes[35] + mi := &file_v1alpha1_types_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2267,17 +2447,17 @@ func (x *StageStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use StageStatus.ProtoReflect.Descriptor instead. func (*StageStatus) Descriptor() ([]byte, []int) { - return file_v1alpha1_types_proto_rawDescGZIP(), []int{35} + return file_v1alpha1_types_proto_rawDescGZIP(), []int{38} } -func (x *StageStatus) GetCurrentFreight() *Freight { +func (x *StageStatus) GetCurrentFreight() *SimpleFreight { if x != nil { return x.CurrentFreight } return nil } -func (x *StageStatus) GetHistory() []*Freight { +func (x *StageStatus) GetHistory() []*SimpleFreight { if x != nil { return x.History } @@ -2316,7 +2496,7 @@ type StageSubscription struct { func (x *StageSubscription) Reset() { *x = StageSubscription{} if protoimpl.UnsafeEnabled { - mi := &file_v1alpha1_types_proto_msgTypes[36] + mi := &file_v1alpha1_types_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2329,7 +2509,7 @@ func (x *StageSubscription) String() string { func (*StageSubscription) ProtoMessage() {} func (x *StageSubscription) ProtoReflect() protoreflect.Message { - mi := &file_v1alpha1_types_proto_msgTypes[36] + mi := &file_v1alpha1_types_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2342,7 +2522,7 @@ func (x *StageSubscription) ProtoReflect() protoreflect.Message { // Deprecated: Use StageSubscription.ProtoReflect.Descriptor instead. func (*StageSubscription) Descriptor() ([]byte, []int) { - return file_v1alpha1_types_proto_rawDescGZIP(), []int{36} + return file_v1alpha1_types_proto_rawDescGZIP(), []int{39} } func (x *StageSubscription) GetName() string { @@ -2364,7 +2544,7 @@ type Subscriptions struct { func (x *Subscriptions) Reset() { *x = Subscriptions{} if protoimpl.UnsafeEnabled { - mi := &file_v1alpha1_types_proto_msgTypes[37] + mi := &file_v1alpha1_types_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2377,7 +2557,7 @@ func (x *Subscriptions) String() string { func (*Subscriptions) ProtoMessage() {} func (x *Subscriptions) ProtoReflect() protoreflect.Message { - mi := &file_v1alpha1_types_proto_msgTypes[37] + mi := &file_v1alpha1_types_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2390,7 +2570,7 @@ func (x *Subscriptions) ProtoReflect() protoreflect.Message { // Deprecated: Use Subscriptions.ProtoReflect.Descriptor instead. func (*Subscriptions) Descriptor() ([]byte, []int) { - return file_v1alpha1_types_proto_rawDescGZIP(), []int{37} + return file_v1alpha1_types_proto_rawDescGZIP(), []int{40} } func (x *Subscriptions) GetUpstreamStages() []*StageSubscription { @@ -2650,219 +2830,264 @@ var file_v1alpha1_types_proto_rawDesc = []byte{ 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, - 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x70, 0x0a, 0x0d, + 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x76, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x4b, 0x0a, 0x07, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, + 0x65, 0x12, 0x51, 0x0a, 0x07, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x72, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x07, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xba, - 0x01, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x51, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, + 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x07, 0x66, 0x72, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x22, 0xba, 0x01, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, + 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x12, 0x49, 0x0a, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x22, 0xe1, 0x01, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x73, 0x12, 0x61, 0x0a, 0x10, 0x67, 0x69, 0x74, + 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, + 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, + 0x69, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x67, 0x69, + 0x74, 0x52, 0x65, 0x70, 0x6f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x67, 0x0a, 0x12, + 0x61, 0x72, 0x67, 0x6f, 0x63, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x72, 0x67, 0x6f, 0x43, 0x44, 0x41, 0x70, 0x70, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x10, 0x61, 0x72, 0x67, 0x6f, 0x43, 0x44, 0x41, 0x70, 0x70, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x73, 0x22, 0xe0, 0x01, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x69, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, + 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x4e, + 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, + 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x67, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, + 0x75, 0x74, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x13, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x50, + 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x50, 0x72, 0x6f, + 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x4c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x88, 0x01, 0x01, 0x12, 0x49, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x42, 0x0b, - 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe1, 0x01, 0x0a, 0x13, - 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, - 0x73, 0x6d, 0x73, 0x12, 0x61, 0x0a, 0x10, 0x67, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4f, + 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6f, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x67, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x67, 0x0a, 0x12, 0x61, 0x72, 0x67, 0x6f, 0x63, 0x64, - 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x72, - 0x67, 0x6f, 0x43, 0x44, 0x41, 0x70, 0x70, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x10, 0x61, - 0x72, 0x67, 0x6f, 0x43, 0x44, 0x41, 0x70, 0x70, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x22, - 0xe0, 0x01, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x4e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, - 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6d, 0x65, 0x74, - 0x61, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x12, 0x32, - 0x0a, 0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x70, 0x72, - 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6d, - 0x65, 0x74, 0x61, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, - 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x3f, 0x0a, 0x0d, 0x50, 0x72, 0x6f, - 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3d, 0x0a, 0x0f, 0x50, 0x72, - 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, - 0x61, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xb0, 0x02, 0x0a, 0x10, 0x52, 0x65, - 0x70, 0x6f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, - 0x0a, 0x03, 0x67, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, - 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x67, 0x69, 0x74, 0x88, 0x01, 0x01, - 0x12, 0x56, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3b, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, - 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x05, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x56, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x72, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, - 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x02, 0x52, 0x05, 0x63, 0x68, 0x61, 0x72, 0x74, 0x88, 0x01, 0x01, - 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x67, 0x69, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x74, 0x22, 0xa4, 0x02, 0x0a, - 0x05, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x4e, 0x0a, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, + 0x3f, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x22, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0xb0, 0x02, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x03, 0x67, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x69, 0x74, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, + 0x67, 0x69, 0x74, 0x88, 0x01, 0x01, 0x12, 0x56, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, + 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x56, + 0x0a, 0x05, 0x63, 0x68, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x6d, 0x65, 0x74, 0x61, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x47, 0x0a, 0x04, 0x73, - 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x69, 0x74, 0x68, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x02, 0x52, 0x05, 0x63, 0x68, + 0x61, 0x72, 0x74, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x67, 0x69, 0x74, 0x42, 0x08, + 0x0a, 0x06, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x63, 0x68, 0x61, + 0x72, 0x74, 0x22, 0xa4, 0x02, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, + 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x12, 0x4e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, + 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x47, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, + 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x4d, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x09, 0x53, 0x74, + 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, - 0x73, 0x70, 0x65, 0x63, 0x12, 0x4d, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6d, 0x65, 0x74, 0x61, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x45, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x4c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, - 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x45, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, + 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xdc, 0x01, 0x0a, + 0x09, 0x53, 0x74, 0x61, 0x67, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x5d, 0x0a, 0x0d, 0x73, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, 0x14, 0x70, 0x72, 0x6f, + 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x63, 0x68, + 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x73, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, + 0x6e, 0x4d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x73, 0x22, 0xd0, 0x03, 0x0a, 0x07, + 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, + 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x4e, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, - 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xdc, 0x01, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x67, 0x65, - 0x53, 0x70, 0x65, 0x63, 0x12, 0x5d, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, - 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3d, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, - 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, - 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x73, - 0x52, 0x13, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x63, 0x68, 0x61, - 0x6e, 0x69, 0x73, 0x6d, 0x73, 0x22, 0xfa, 0x02, 0x0a, 0x07, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x3e, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x48, 0x00, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x88, 0x01, - 0x01, 0x12, 0x4d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x69, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, - 0x12, 0x47, 0x0a, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x52, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x63, 0x68, 0x61, - 0x72, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x52, 0x06, 0x63, 0x68, 0x61, 0x72, - 0x74, 0x73, 0x12, 0x21, 0x0a, 0x09, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x09, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, - 0x73, 0x65, 0x65, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x22, 0xc0, 0x03, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x5f, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x72, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x69, + 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4d, 0x0a, 0x07, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x48, 0x00, - 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x88, 0x01, 0x01, 0x12, 0x4b, 0x0a, 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x06, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x72, 0x74, 0x73, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, - 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x48, 0x01, 0x52, 0x06, 0x68, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x69, 0x0a, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, - 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x02, 0x52, 0x10, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, - 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x72, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x42, - 0x14, 0x0a, 0x12, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6d, - 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x27, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x67, 0x65, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x93, - 0x01, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x64, 0x0a, 0x0f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x74, 0x61, - 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x77, 0x61, 0x72, 0x65, 0x68, 0x6f, - 0x75, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x77, 0x61, 0x72, 0x65, 0x68, - 0x6f, 0x75, 0x73, 0x65, 0x42, 0xad, 0x02, 0x0a, 0x2c, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, - 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0a, 0x54, 0x79, 0x70, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2f, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2f, 0x70, 0x6b, 0x67, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x06, - 0x47, 0x43, 0x41, 0x4b, 0x50, 0x41, 0xaa, 0x02, 0x28, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x43, 0x6f, 0x6d, 0x2e, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x4b, 0x61, 0x72, 0x67, 0x6f, - 0x2e, 0x50, 0x6b, 0x67, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0xca, 0x02, 0x28, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x5c, 0x43, 0x6f, 0x6d, 0x5c, 0x41, - 0x6b, 0x75, 0x69, 0x74, 0x79, 0x5c, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x5c, 0x50, 0x6b, 0x67, 0x5c, - 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x34, 0x47, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x5c, 0x43, 0x6f, 0x6d, 0x5c, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, - 0x5c, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x5c, 0x50, 0x6b, 0x67, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0xea, 0x02, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x3a, 0x3a, 0x43, 0x6f, - 0x6d, 0x3a, 0x3a, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x3a, 0x3a, 0x4b, 0x61, 0x72, 0x67, 0x6f, - 0x3a, 0x3a, 0x50, 0x6b, 0x67, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x43, 0x68, 0x61, 0x72, 0x74, 0x52, 0x06, 0x63, 0x68, 0x61, 0x72, 0x74, 0x73, 0x12, 0x4f, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x80, + 0x02, 0x0a, 0x0d, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x73, 0x0a, 0x0e, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x7a, 0x0a, 0x13, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x0f, 0x0a, 0x0d, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0xcf, 0x02, 0x0a, 0x0d, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x72, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x73, 0x65, + 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x53, 0x65, 0x65, + 0x6e, 0x88, 0x01, 0x01, 0x12, 0x4d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, + 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, + 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x52, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x06, + 0x63, 0x68, 0x61, 0x72, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x52, 0x06, 0x63, + 0x68, 0x61, 0x72, 0x74, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, + 0x73, 0x65, 0x65, 0x6e, 0x22, 0xcc, 0x03, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x67, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x65, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x46, + 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x88, 0x01, 0x01, 0x12, 0x51, 0x0a, 0x07, 0x68, + 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x72, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, + 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x48, 0x01, 0x52, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x88, 0x01, 0x01, 0x12, 0x69, 0x0a, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x70, + 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, + 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x02, 0x52, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x12, + 0x0a, 0x10, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x72, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x42, 0x14, 0x0a, + 0x12, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x27, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x67, 0x65, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x93, 0x01, 0x0a, + 0x0d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x64, + 0x0a, 0x0f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x74, 0x61, 0x67, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x74, + 0x61, 0x67, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x77, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x77, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, + 0x73, 0x65, 0x42, 0xad, 0x02, 0x0a, 0x2c, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x42, 0x0a, 0x54, 0x79, 0x70, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6b, + 0x75, 0x69, 0x74, 0x79, 0x2f, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x06, 0x47, 0x43, + 0x41, 0x4b, 0x50, 0x41, 0xaa, 0x02, 0x28, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x43, 0x6f, + 0x6d, 0x2e, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x50, + 0x6b, 0x67, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, + 0x02, 0x28, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x5c, 0x43, 0x6f, 0x6d, 0x5c, 0x41, 0x6b, 0x75, + 0x69, 0x74, 0x79, 0x5c, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x5c, 0x50, 0x6b, 0x67, 0x5c, 0x41, 0x70, + 0x69, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x34, 0x47, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x5c, 0x43, 0x6f, 0x6d, 0x5c, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x5c, 0x4b, + 0x61, 0x72, 0x67, 0x6f, 0x5c, 0x50, 0x6b, 0x67, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x3a, + 0x3a, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x3a, 0x3a, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x3a, 0x3a, + 0x50, 0x6b, 0x67, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2877,7 +3102,7 @@ func file_v1alpha1_types_proto_rawDescGZIP() []byte { return file_v1alpha1_types_proto_rawDescData } -var file_v1alpha1_types_proto_msgTypes = make([]protoimpl.MessageInfo, 38) +var file_v1alpha1_types_proto_msgTypes = make([]protoimpl.MessageInfo, 42) var file_v1alpha1_types_proto_goTypes = []interface{}{ (*ArgoCDAppUpdate)(nil), // 0: github.com.akuity.kargo.pkg.api.v1alpha1.ArgoCDAppUpdate (*ArgoCDHelm)(nil), // 1: github.com.akuity.kargo.pkg.api.v1alpha1.ArgoCDHelm @@ -2914,12 +3139,16 @@ var file_v1alpha1_types_proto_goTypes = []interface{}{ (*StageList)(nil), // 32: github.com.akuity.kargo.pkg.api.v1alpha1.StageList (*StageSpec)(nil), // 33: github.com.akuity.kargo.pkg.api.v1alpha1.StageSpec (*Freight)(nil), // 34: github.com.akuity.kargo.pkg.api.v1alpha1.Freight - (*StageStatus)(nil), // 35: github.com.akuity.kargo.pkg.api.v1alpha1.StageStatus - (*StageSubscription)(nil), // 36: github.com.akuity.kargo.pkg.api.v1alpha1.StageSubscription - (*Subscriptions)(nil), // 37: github.com.akuity.kargo.pkg.api.v1alpha1.Subscriptions - (*metav1.ObjectMeta)(nil), // 38: github.com.akuity.kargo.pkg.api.metav1.ObjectMeta - (*metav1.ListMeta)(nil), // 39: github.com.akuity.kargo.pkg.api.metav1.ListMeta - (*timestamppb.Timestamp)(nil), // 40: google.protobuf.Timestamp + (*FreightStatus)(nil), // 35: github.com.akuity.kargo.pkg.api.v1alpha1.FreightStatus + (*Qualification)(nil), // 36: github.com.akuity.kargo.pkg.api.v1alpha1.Qualification + (*SimpleFreight)(nil), // 37: github.com.akuity.kargo.pkg.api.v1alpha1.SimpleFreight + (*StageStatus)(nil), // 38: github.com.akuity.kargo.pkg.api.v1alpha1.StageStatus + (*StageSubscription)(nil), // 39: github.com.akuity.kargo.pkg.api.v1alpha1.StageSubscription + (*Subscriptions)(nil), // 40: github.com.akuity.kargo.pkg.api.v1alpha1.Subscriptions + nil, // 41: github.com.akuity.kargo.pkg.api.v1alpha1.FreightStatus.QualificationsEntry + (*metav1.ObjectMeta)(nil), // 42: github.com.akuity.kargo.pkg.api.metav1.ObjectMeta + (*metav1.ListMeta)(nil), // 43: github.com.akuity.kargo.pkg.api.metav1.ListMeta + (*timestamppb.Timestamp)(nil), // 44: google.protobuf.Timestamp } var file_v1alpha1_types_proto_depIdxs = []int32{ 4, // 0: github.com.akuity.kargo.pkg.api.v1alpha1.ArgoCDAppUpdate.source_updates:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.ArgoCDSourceUpdate @@ -2935,41 +3164,48 @@ var file_v1alpha1_types_proto_depIdxs = []int32{ 16, // 10: github.com.akuity.kargo.pkg.api.v1alpha1.HelmPromotionMechanism.images:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.HelmImageUpdate 15, // 11: github.com.akuity.kargo.pkg.api.v1alpha1.HelmPromotionMechanism.charts:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.HelmChartDependencyUpdate 20, // 12: github.com.akuity.kargo.pkg.api.v1alpha1.KustomizePromotionMechanism.images:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.KustomizeImageUpdate - 38, // 13: github.com.akuity.kargo.pkg.api.v1alpha1.Promotion.metadata:type_name -> github.com.akuity.kargo.pkg.api.metav1.ObjectMeta + 42, // 13: github.com.akuity.kargo.pkg.api.v1alpha1.Promotion.metadata:type_name -> github.com.akuity.kargo.pkg.api.metav1.ObjectMeta 28, // 14: github.com.akuity.kargo.pkg.api.v1alpha1.Promotion.spec:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.PromotionSpec 29, // 15: github.com.akuity.kargo.pkg.api.v1alpha1.Promotion.status:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.PromotionStatus - 34, // 16: github.com.akuity.kargo.pkg.api.v1alpha1.PromotionInfo.freight:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.Freight - 39, // 17: github.com.akuity.kargo.pkg.api.v1alpha1.PromotionList.metadata:type_name -> github.com.akuity.kargo.pkg.api.metav1.ListMeta + 37, // 16: github.com.akuity.kargo.pkg.api.v1alpha1.PromotionInfo.freight:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.SimpleFreight + 43, // 17: github.com.akuity.kargo.pkg.api.v1alpha1.PromotionList.metadata:type_name -> github.com.akuity.kargo.pkg.api.metav1.ListMeta 22, // 18: github.com.akuity.kargo.pkg.api.v1alpha1.PromotionList.items:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.Promotion 9, // 19: github.com.akuity.kargo.pkg.api.v1alpha1.PromotionMechanisms.git_repo_updates:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.GitRepoUpdate 0, // 20: github.com.akuity.kargo.pkg.api.v1alpha1.PromotionMechanisms.argocd_app_updates:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.ArgoCDAppUpdate - 38, // 21: github.com.akuity.kargo.pkg.api.v1alpha1.PromotionPolicy.metadata:type_name -> github.com.akuity.kargo.pkg.api.metav1.ObjectMeta - 39, // 22: github.com.akuity.kargo.pkg.api.v1alpha1.PromotionPolicyList.metadata:type_name -> github.com.akuity.kargo.pkg.api.metav1.ListMeta + 42, // 21: github.com.akuity.kargo.pkg.api.v1alpha1.PromotionPolicy.metadata:type_name -> github.com.akuity.kargo.pkg.api.metav1.ObjectMeta + 43, // 22: github.com.akuity.kargo.pkg.api.v1alpha1.PromotionPolicyList.metadata:type_name -> github.com.akuity.kargo.pkg.api.metav1.ListMeta 26, // 23: github.com.akuity.kargo.pkg.api.v1alpha1.PromotionPolicyList.items:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.PromotionPolicy 10, // 24: github.com.akuity.kargo.pkg.api.v1alpha1.RepoSubscription.git:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.GitSubscription 19, // 25: github.com.akuity.kargo.pkg.api.v1alpha1.RepoSubscription.image:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.ImageSubscription 7, // 26: github.com.akuity.kargo.pkg.api.v1alpha1.RepoSubscription.chart:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.ChartSubscription - 38, // 27: github.com.akuity.kargo.pkg.api.v1alpha1.Stage.metadata:type_name -> github.com.akuity.kargo.pkg.api.metav1.ObjectMeta + 42, // 27: github.com.akuity.kargo.pkg.api.v1alpha1.Stage.metadata:type_name -> github.com.akuity.kargo.pkg.api.metav1.ObjectMeta 33, // 28: github.com.akuity.kargo.pkg.api.v1alpha1.Stage.spec:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.StageSpec - 35, // 29: github.com.akuity.kargo.pkg.api.v1alpha1.Stage.status:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.StageStatus - 39, // 30: github.com.akuity.kargo.pkg.api.v1alpha1.StageList.metadata:type_name -> github.com.akuity.kargo.pkg.api.metav1.ListMeta + 38, // 29: github.com.akuity.kargo.pkg.api.v1alpha1.Stage.status:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.StageStatus + 43, // 30: github.com.akuity.kargo.pkg.api.v1alpha1.StageList.metadata:type_name -> github.com.akuity.kargo.pkg.api.metav1.ListMeta 31, // 31: github.com.akuity.kargo.pkg.api.v1alpha1.StageList.items:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.Stage - 37, // 32: github.com.akuity.kargo.pkg.api.v1alpha1.StageSpec.subscriptions:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.Subscriptions + 40, // 32: github.com.akuity.kargo.pkg.api.v1alpha1.StageSpec.subscriptions:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.Subscriptions 25, // 33: github.com.akuity.kargo.pkg.api.v1alpha1.StageSpec.promotion_mechanisms:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.PromotionMechanisms - 40, // 34: github.com.akuity.kargo.pkg.api.v1alpha1.Freight.first_seen:type_name -> google.protobuf.Timestamp + 42, // 34: github.com.akuity.kargo.pkg.api.v1alpha1.Freight.metadata:type_name -> github.com.akuity.kargo.pkg.api.metav1.ObjectMeta 8, // 35: github.com.akuity.kargo.pkg.api.v1alpha1.Freight.commits:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.GitCommit 18, // 36: github.com.akuity.kargo.pkg.api.v1alpha1.Freight.images:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.Image 6, // 37: github.com.akuity.kargo.pkg.api.v1alpha1.Freight.charts:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.Chart - 34, // 38: github.com.akuity.kargo.pkg.api.v1alpha1.StageStatus.current_freight:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.Freight - 34, // 39: github.com.akuity.kargo.pkg.api.v1alpha1.StageStatus.history:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.Freight - 11, // 40: github.com.akuity.kargo.pkg.api.v1alpha1.StageStatus.health:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.Health - 23, // 41: github.com.akuity.kargo.pkg.api.v1alpha1.StageStatus.current_promotion:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.PromotionInfo - 36, // 42: github.com.akuity.kargo.pkg.api.v1alpha1.Subscriptions.upstream_stages:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.StageSubscription - 43, // [43:43] is the sub-list for method output_type - 43, // [43:43] is the sub-list for method input_type - 43, // [43:43] is the sub-list for extension type_name - 43, // [43:43] is the sub-list for extension extendee - 0, // [0:43] is the sub-list for field type_name + 35, // 38: github.com.akuity.kargo.pkg.api.v1alpha1.Freight.status:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.FreightStatus + 41, // 39: github.com.akuity.kargo.pkg.api.v1alpha1.FreightStatus.qualifications:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.FreightStatus.QualificationsEntry + 44, // 40: github.com.akuity.kargo.pkg.api.v1alpha1.SimpleFreight.first_seen:type_name -> google.protobuf.Timestamp + 8, // 41: github.com.akuity.kargo.pkg.api.v1alpha1.SimpleFreight.commits:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.GitCommit + 18, // 42: github.com.akuity.kargo.pkg.api.v1alpha1.SimpleFreight.images:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.Image + 6, // 43: github.com.akuity.kargo.pkg.api.v1alpha1.SimpleFreight.charts:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.Chart + 37, // 44: github.com.akuity.kargo.pkg.api.v1alpha1.StageStatus.current_freight:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.SimpleFreight + 37, // 45: github.com.akuity.kargo.pkg.api.v1alpha1.StageStatus.history:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.SimpleFreight + 11, // 46: github.com.akuity.kargo.pkg.api.v1alpha1.StageStatus.health:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.Health + 23, // 47: github.com.akuity.kargo.pkg.api.v1alpha1.StageStatus.current_promotion:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.PromotionInfo + 39, // 48: github.com.akuity.kargo.pkg.api.v1alpha1.Subscriptions.upstream_stages:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.StageSubscription + 36, // 49: github.com.akuity.kargo.pkg.api.v1alpha1.FreightStatus.QualificationsEntry.value:type_name -> github.com.akuity.kargo.pkg.api.v1alpha1.Qualification + 50, // [50:50] is the sub-list for method output_type + 50, // [50:50] is the sub-list for method input_type + 50, // [50:50] is the sub-list for extension type_name + 50, // [50:50] is the sub-list for extension extendee + 0, // [0:50] is the sub-list for field type_name } func init() { file_v1alpha1_types_proto_init() } @@ -3399,7 +3635,7 @@ func file_v1alpha1_types_proto_init() { } } file_v1alpha1_types_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StageStatus); i { + switch v := v.(*FreightStatus); i { case 0: return &v.state case 1: @@ -3411,7 +3647,7 @@ func file_v1alpha1_types_proto_init() { } } file_v1alpha1_types_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StageSubscription); i { + switch v := v.(*Qualification); i { case 0: return &v.state case 1: @@ -3423,6 +3659,42 @@ func file_v1alpha1_types_proto_init() { } } file_v1alpha1_types_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SimpleFreight); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_v1alpha1_types_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StageStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_v1alpha1_types_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StageSubscription); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_v1alpha1_types_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Subscriptions); i { case 0: return &v.state @@ -3444,15 +3716,15 @@ func file_v1alpha1_types_proto_init() { file_v1alpha1_types_proto_msgTypes[22].OneofWrappers = []interface{}{} file_v1alpha1_types_proto_msgTypes[24].OneofWrappers = []interface{}{} file_v1alpha1_types_proto_msgTypes[30].OneofWrappers = []interface{}{} - file_v1alpha1_types_proto_msgTypes[34].OneofWrappers = []interface{}{} - file_v1alpha1_types_proto_msgTypes[35].OneofWrappers = []interface{}{} + file_v1alpha1_types_proto_msgTypes[37].OneofWrappers = []interface{}{} + file_v1alpha1_types_proto_msgTypes[38].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_v1alpha1_types_proto_rawDesc, NumEnums: 0, - NumMessages: 38, + NumMessages: 42, NumExtensions: 0, NumServices: 0, }, diff --git a/ui/src/gen/v1alpha1/types_pb.ts b/ui/src/gen/v1alpha1/types_pb.ts index 0b3b9822d..230733ca2 100644 --- a/ui/src/gen/v1alpha1/types_pb.ts +++ b/ui/src/gen/v1alpha1/types_pb.ts @@ -1150,9 +1150,9 @@ export class PromotionInfo extends Message { name = ""; /** - * @generated from field: github.com.akuity.kargo.pkg.api.v1alpha1.Freight freight = 2; + * @generated from field: github.com.akuity.kargo.pkg.api.v1alpha1.SimpleFreight freight = 2; */ - freight?: Freight; + freight?: SimpleFreight; constructor(data?: PartialMessage) { super(); @@ -1163,7 +1163,7 @@ export class PromotionInfo extends Message { static readonly typeName = "github.com.akuity.kargo.pkg.api.v1alpha1.PromotionInfo"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "freight", kind: "message", T: Freight }, + { no: 2, name: "freight", kind: "message", T: SimpleFreight }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): PromotionInfo { @@ -1660,34 +1660,44 @@ export class StageSpec extends Message { */ export class Freight extends Message { /** - * @generated from field: string id = 1; + * @generated from field: string api_version = 1; */ - id = ""; + apiVersion = ""; /** - * @generated from field: optional google.protobuf.Timestamp first_seen = 2; + * @generated from field: string kind = 2; */ - firstSeen?: Timestamp; + kind = ""; /** - * @generated from field: repeated github.com.akuity.kargo.pkg.api.v1alpha1.GitCommit commits = 4; + * @generated from field: github.com.akuity.kargo.pkg.api.metav1.ObjectMeta metadata = 3; + */ + metadata?: ObjectMeta; + + /** + * @generated from field: string id = 4; + */ + id = ""; + + /** + * @generated from field: repeated github.com.akuity.kargo.pkg.api.v1alpha1.GitCommit commits = 5; */ commits: GitCommit[] = []; /** - * @generated from field: repeated github.com.akuity.kargo.pkg.api.v1alpha1.Image images = 5; + * @generated from field: repeated github.com.akuity.kargo.pkg.api.v1alpha1.Image images = 6; */ images: Image[] = []; /** - * @generated from field: repeated github.com.akuity.kargo.pkg.api.v1alpha1.Chart charts = 6; + * @generated from field: repeated github.com.akuity.kargo.pkg.api.v1alpha1.Chart charts = 7; */ charts: Chart[] = []; /** - * @generated from field: optional bool qualified = 8; + * @generated from field: github.com.akuity.kargo.pkg.api.v1alpha1.FreightStatus status = 8; */ - qualified?: boolean; + status?: FreightStatus; constructor(data?: PartialMessage) { super(); @@ -1697,12 +1707,14 @@ export class Freight extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "github.com.akuity.kargo.pkg.api.v1alpha1.Freight"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "first_seen", kind: "message", T: Timestamp, opt: true }, - { no: 4, name: "commits", kind: "message", T: GitCommit, repeated: true }, - { no: 5, name: "images", kind: "message", T: Image, repeated: true }, - { no: 6, name: "charts", kind: "message", T: Chart, repeated: true }, - { no: 8, name: "qualified", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + { no: 1, name: "api_version", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "kind", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "metadata", kind: "message", T: ObjectMeta }, + { no: 4, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 5, name: "commits", kind: "message", T: GitCommit, repeated: true }, + { no: 6, name: "images", kind: "message", T: Image, repeated: true }, + { no: 7, name: "charts", kind: "message", T: Chart, repeated: true }, + { no: 8, name: "status", kind: "message", T: FreightStatus }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Freight { @@ -1722,19 +1734,148 @@ export class Freight extends Message { } } +/** + * @generated from message github.com.akuity.kargo.pkg.api.v1alpha1.FreightStatus + */ +export class FreightStatus extends Message { + /** + * @generated from field: map qualifications = 1; + */ + qualifications: { [key: string]: Qualification } = {}; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "github.com.akuity.kargo.pkg.api.v1alpha1.FreightStatus"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "qualifications", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "message", T: Qualification} }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FreightStatus { + return new FreightStatus().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FreightStatus { + return new FreightStatus().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FreightStatus { + return new FreightStatus().fromJsonString(jsonString, options); + } + + static equals(a: FreightStatus | PlainMessage | undefined, b: FreightStatus | PlainMessage | undefined): boolean { + return proto3.util.equals(FreightStatus, a, b); + } +} + +/** + * @generated from message github.com.akuity.kargo.pkg.api.v1alpha1.Qualification + */ +export class Qualification extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "github.com.akuity.kargo.pkg.api.v1alpha1.Qualification"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): Qualification { + return new Qualification().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): Qualification { + return new Qualification().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): Qualification { + return new Qualification().fromJsonString(jsonString, options); + } + + static equals(a: Qualification | PlainMessage | undefined, b: Qualification | PlainMessage | undefined): boolean { + return proto3.util.equals(Qualification, a, b); + } +} + +/** + * @generated from message github.com.akuity.kargo.pkg.api.v1alpha1.SimpleFreight + */ +export class SimpleFreight extends Message { + /** + * @generated from field: string id = 1; + */ + id = ""; + + /** + * @generated from field: optional google.protobuf.Timestamp first_seen = 2; + */ + firstSeen?: Timestamp; + + /** + * @generated from field: repeated github.com.akuity.kargo.pkg.api.v1alpha1.GitCommit commits = 4; + */ + commits: GitCommit[] = []; + + /** + * @generated from field: repeated github.com.akuity.kargo.pkg.api.v1alpha1.Image images = 5; + */ + images: Image[] = []; + + /** + * @generated from field: repeated github.com.akuity.kargo.pkg.api.v1alpha1.Chart charts = 6; + */ + charts: Chart[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "github.com.akuity.kargo.pkg.api.v1alpha1.SimpleFreight"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "first_seen", kind: "message", T: Timestamp, opt: true }, + { no: 4, name: "commits", kind: "message", T: GitCommit, repeated: true }, + { no: 5, name: "images", kind: "message", T: Image, repeated: true }, + { no: 6, name: "charts", kind: "message", T: Chart, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SimpleFreight { + return new SimpleFreight().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SimpleFreight { + return new SimpleFreight().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SimpleFreight { + return new SimpleFreight().fromJsonString(jsonString, options); + } + + static equals(a: SimpleFreight | PlainMessage | undefined, b: SimpleFreight | PlainMessage | undefined): boolean { + return proto3.util.equals(SimpleFreight, a, b); + } +} + /** * @generated from message github.com.akuity.kargo.pkg.api.v1alpha1.StageStatus */ export class StageStatus extends Message { /** - * @generated from field: optional github.com.akuity.kargo.pkg.api.v1alpha1.Freight current_freight = 2; + * @generated from field: optional github.com.akuity.kargo.pkg.api.v1alpha1.SimpleFreight current_freight = 2; */ - currentFreight?: Freight; + currentFreight?: SimpleFreight; /** - * @generated from field: repeated github.com.akuity.kargo.pkg.api.v1alpha1.Freight history = 3; + * @generated from field: repeated github.com.akuity.kargo.pkg.api.v1alpha1.SimpleFreight history = 3; */ - history: Freight[] = []; + history: SimpleFreight[] = []; /** * @generated from field: string error = 4; @@ -1759,8 +1900,8 @@ export class StageStatus extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "github.com.akuity.kargo.pkg.api.v1alpha1.StageStatus"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 2, name: "current_freight", kind: "message", T: Freight, opt: true }, - { no: 3, name: "history", kind: "message", T: Freight, repeated: true }, + { no: 2, name: "current_freight", kind: "message", T: SimpleFreight, opt: true }, + { no: 3, name: "history", kind: "message", T: SimpleFreight, repeated: true }, { no: 4, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 5, name: "health", kind: "message", T: Health, opt: true }, { no: 6, name: "current_promotion", kind: "message", T: PromotionInfo, opt: true },