blob: f3e1fb8528d798364034c7158565775718372cee [file] [log] [blame]
// Copyright 2018 The LUCI Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.33.0
// protoc v3.21.7
// source: go.chromium.org/luci/cv/api/config/v2/config.proto
package cfgpb
import (
_ "github.com/envoyproxy/protoc-gen-validate/validate"
_ "go.chromium.org/luci/common/proto"
v1 "go.chromium.org/luci/cv/api/v1"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
durationpb "google.golang.org/protobuf/types/known/durationpb"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// Determines how visible the results of a build for this builder are in Gerrit
// comments.
//
// This doesn't affect the buildbucket plugin (green/red chips).
type CommentLevel int32
const (
// Currently default to full visibility.
CommentLevel_COMMENT_LEVEL_UNSET CommentLevel = 0
// The CQ reports the summary markdown and a link to the buildbucket build id
// in Milo with the builder name in the URL in a Gerrit comment.
CommentLevel_COMMENT_LEVEL_FULL CommentLevel = 1
// The CQ reports a generic "Build failed: https://ci.chromium.org/b/1234"
// with no summary markdown.
CommentLevel_COMMENT_LEVEL_RESTRICTED CommentLevel = 2
)
// Enum value maps for CommentLevel.
var (
CommentLevel_name = map[int32]string{
0: "COMMENT_LEVEL_UNSET",
1: "COMMENT_LEVEL_FULL",
2: "COMMENT_LEVEL_RESTRICTED",
}
CommentLevel_value = map[string]int32{
"COMMENT_LEVEL_UNSET": 0,
"COMMENT_LEVEL_FULL": 1,
"COMMENT_LEVEL_RESTRICTED": 2,
}
)
func (x CommentLevel) Enum() *CommentLevel {
p := new(CommentLevel)
*p = x
return p
}
func (x CommentLevel) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (CommentLevel) Descriptor() protoreflect.EnumDescriptor {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_enumTypes[0].Descriptor()
}
func (CommentLevel) Type() protoreflect.EnumType {
return &file_go_chromium_org_luci_cv_api_config_v2_config_proto_enumTypes[0]
}
func (x CommentLevel) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use CommentLevel.Descriptor instead.
func (CommentLevel) EnumDescriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{0}
}
// A boolean with an "unset" default value.
type Toggle int32
const (
Toggle_UNSET Toggle = 0
Toggle_YES Toggle = 1
Toggle_NO Toggle = 2
)
// Enum value maps for Toggle.
var (
Toggle_name = map[int32]string{
0: "UNSET",
1: "YES",
2: "NO",
}
Toggle_value = map[string]int32{
"UNSET": 0,
"YES": 1,
"NO": 2,
}
)
func (x Toggle) Enum() *Toggle {
p := new(Toggle)
*p = x
return p
}
func (x Toggle) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (Toggle) Descriptor() protoreflect.EnumDescriptor {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_enumTypes[1].Descriptor()
}
func (Toggle) Type() protoreflect.EnumType {
return &file_go_chromium_org_luci_cv_api_config_v2_config_proto_enumTypes[1]
}
func (x Toggle) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use Toggle.Descriptor instead.
func (Toggle) EnumDescriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{1}
}
// See `allow_owner_if_submittable` doc below.
type Verifiers_GerritCQAbility_CQAction int32
const (
Verifiers_GerritCQAbility_UNSET Verifiers_GerritCQAbility_CQAction = 0
Verifiers_GerritCQAbility_DRY_RUN Verifiers_GerritCQAbility_CQAction = 1
// COMMIT implies ability to trigger dry run as well.
Verifiers_GerritCQAbility_COMMIT Verifiers_GerritCQAbility_CQAction = 2
)
// Enum value maps for Verifiers_GerritCQAbility_CQAction.
var (
Verifiers_GerritCQAbility_CQAction_name = map[int32]string{
0: "UNSET",
1: "DRY_RUN",
2: "COMMIT",
}
Verifiers_GerritCQAbility_CQAction_value = map[string]int32{
"UNSET": 0,
"DRY_RUN": 1,
"COMMIT": 2,
}
)
func (x Verifiers_GerritCQAbility_CQAction) Enum() *Verifiers_GerritCQAbility_CQAction {
p := new(Verifiers_GerritCQAbility_CQAction)
*p = x
return p
}
func (x Verifiers_GerritCQAbility_CQAction) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (Verifiers_GerritCQAbility_CQAction) Descriptor() protoreflect.EnumDescriptor {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_enumTypes[2].Descriptor()
}
func (Verifiers_GerritCQAbility_CQAction) Type() protoreflect.EnumType {
return &file_go_chromium_org_luci_cv_api_config_v2_config_proto_enumTypes[2]
}
func (x Verifiers_GerritCQAbility_CQAction) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use Verifiers_GerritCQAbility_CQAction.Descriptor instead.
func (Verifiers_GerritCQAbility_CQAction) EnumDescriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{5, 0, 0}
}
// This message describes a CQ configuration.
//
// The config file commit-queue.cfg should be stored in the config directory of
// your project, alongside cr-buildbucket.cfg.
//
// Pro-tip: a command line tool exists to validate a locally generated .cfg
// file and verify that it matches arbitrary given CLs as expected.
// See https://chromium.googlesource.com/infra/luci/luci-go/+/refs/heads/main/cv/#luci-cv-command-line-utils
type Config struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Deprecated. Ignored. Do not use.
// See also https://crbug.com/1208569 to implement an alternative.
//
// Deprecated: Marked as deprecated in go.chromium.org/luci/cv/api/config/v2/config.proto.
DrainingStartTime string `protobuf:"bytes,1,opt,name=draining_start_time,json=drainingStartTime,proto3" json:"draining_start_time,omitempty"`
// Optional.
//
// Originally, this was used to specify the URL of the CQ status app where
// users have access to their Run details. Currently, with the migration
// from CQ to LUCI CV, this field no longer serves as the same meaning,
// but is used to decide the visibility of the Run details via LUCI CV UI at
// https://luci-change-verifier.appspot.com/ui/recents
//
// This field accepts the following values:
// - "chromium-cq-status.appspot.com": all Runs in this Project are public.
// - "internal-cq-status.appspot.com": all Runs in this Project are visible
// to Googler only.
//
// Note that the Run details page contains the name of the builders launched
// to verify CL(s). Therefore, if this Project launches internal builders for
// public repos and the builder names are confidential, please don't
// use public host.
//
// Deprecated: Marked as deprecated in go.chromium.org/luci/cv/api/config/v2/config.proto.
CqStatusHost string `protobuf:"bytes,2,opt,name=cq_status_host,json=cqStatusHost,proto3" json:"cq_status_host,omitempty"`
// Optional options for how CLs should be submitted.
SubmitOptions *SubmitOptions `protobuf:"bytes,3,opt,name=submit_options,json=submitOptions,proto3" json:"submit_options,omitempty"`
// At least 1 ConfigGroup is required.
ConfigGroups []*ConfigGroup `protobuf:"bytes,4,rep,name=config_groups,json=configGroups,proto3" json:"config_groups,omitempty"`
// Deprecated. Ignored. Do not use.
//
// Deprecated: Marked as deprecated in go.chromium.org/luci/cv/api/config/v2/config.proto.
ProjectScopedAccount Toggle `protobuf:"varint,5,opt,name=project_scoped_account,json=projectScopedAccount,proto3,enum=cv.config.Toggle" json:"project_scoped_account,omitempty"`
}
func (x *Config) Reset() {
*x = Config{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Config) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Config) ProtoMessage() {}
func (x *Config) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[0]
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 Config.ProtoReflect.Descriptor instead.
func (*Config) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{0}
}
// Deprecated: Marked as deprecated in go.chromium.org/luci/cv/api/config/v2/config.proto.
func (x *Config) GetDrainingStartTime() string {
if x != nil {
return x.DrainingStartTime
}
return ""
}
// Deprecated: Marked as deprecated in go.chromium.org/luci/cv/api/config/v2/config.proto.
func (x *Config) GetCqStatusHost() string {
if x != nil {
return x.CqStatusHost
}
return ""
}
func (x *Config) GetSubmitOptions() *SubmitOptions {
if x != nil {
return x.SubmitOptions
}
return nil
}
func (x *Config) GetConfigGroups() []*ConfigGroup {
if x != nil {
return x.ConfigGroups
}
return nil
}
// Deprecated: Marked as deprecated in go.chromium.org/luci/cv/api/config/v2/config.proto.
func (x *Config) GetProjectScopedAccount() Toggle {
if x != nil {
return x.ProjectScopedAccount
}
return Toggle_UNSET
}
// ConfigGroup allows one to share single verifiers config across a set of
// Gerrit repositories, which may be in different Gerrit installations.
type ConfigGroup struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The human- and machine-readable name (unique within this project) of this
// config group. This is used in messages posted to users and in monitoring
// data. Must match regex "^[a-zA-Z][a-zA-Z0-9_-]*$".
Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
// At least 1 Gerrit instance with repositories to work with is required.
Gerrit []*ConfigGroup_Gerrit `protobuf:"bytes,1,rep,name=gerrit,proto3" json:"gerrit,omitempty"`
// Optional. If specified, CQ will consider sets of dependent CLs to test and
// submit at the same time.
//
// Typical use-case is testing & submitting changes to multiple repos at the
// same time, in which case all such repos must be declared up-front in
// `Gerrit` part of this config_group.
//
// Not allowed to be used together with
// submit_options.allow_submit_with_open_deps=true.
CombineCls *CombineCLs `protobuf:"bytes,4,opt,name=combine_cls,json=combineCls,proto3" json:"combine_cls,omitempty"`
// Defines how to verify a CL before submitting it. Required.
Verifiers *Verifiers `protobuf:"bytes,2,opt,name=verifiers,proto3" json:"verifiers,omitempty"`
// If set, this ConfigGroup will be used if no other ConfigGroup matches.
//
// At most 1 config_group can be YES.
//
// Example use is to define specific config_group for refs/heads/main,
// and fallback one for refs/heads/* which will pick up all CLs on
// non-main branches.
//
// TODO(crbug/966115): provide a better solution.
Fallback Toggle `protobuf:"varint,5,opt,name=fallback,proto3,enum=cv.config.Toggle" json:"fallback,omitempty"`
// Optional. Additional run modes supported besides standard DRY_RUN and
// FULL_RUN.
//
// If specified, the order matters. CQ will create the Run with the first
// mode for which triggering conditions are fulfilled. If there is no such
// mode, CQ will fallback to standard DRY_RUN or FULL_RUN.
//
// All the mode names must be unique.
AdditionalModes []*Mode `protobuf:"bytes,7,rep,name=additional_modes,json=additionalModes,proto3" json:"additional_modes,omitempty"`
// Per-user limits.
//
// At the time of a Run creation, CV will iterate `user_limits` and apply the
// first applicable limit to the Run. If none of the limit(s) are applicable,
// CV will apply `user_limits_default` to the run.
UserLimits []*UserLimit `protobuf:"bytes,8,rep,name=user_limits,json=userLimits,proto3" json:"user_limits,omitempty"`
// Default per-user limit.
//
// If CV couldn't find an applicable limit from `user_limits`, this limit
// will be applied.
UserLimitDefault *UserLimit `protobuf:"bytes,9,opt,name=user_limit_default,json=userLimitDefault,proto3" json:"user_limit_default,omitempty"`
// PostActions to be performed on a Run completion.
//
// On a Run completion, all the post actions with matching conditions will
// be executed.
//
// All actions must have a unique name in the list.
PostActions []*ConfigGroup_PostAction `protobuf:"bytes,10,rep,name=post_actions,json=postActions,proto3" json:"post_actions,omitempty"`
// TryjobExperiments that will be conditionally enabled for Tryjobs.
TryjobExperiments []*ConfigGroup_TryjobExperiment `protobuf:"bytes,11,rep,name=tryjob_experiments,json=tryjobExperiments,proto3" json:"tryjob_experiments,omitempty"`
}
func (x *ConfigGroup) Reset() {
*x = ConfigGroup{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ConfigGroup) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ConfigGroup) ProtoMessage() {}
func (x *ConfigGroup) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[1]
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 ConfigGroup.ProtoReflect.Descriptor instead.
func (*ConfigGroup) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{1}
}
func (x *ConfigGroup) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *ConfigGroup) GetGerrit() []*ConfigGroup_Gerrit {
if x != nil {
return x.Gerrit
}
return nil
}
func (x *ConfigGroup) GetCombineCls() *CombineCLs {
if x != nil {
return x.CombineCls
}
return nil
}
func (x *ConfigGroup) GetVerifiers() *Verifiers {
if x != nil {
return x.Verifiers
}
return nil
}
func (x *ConfigGroup) GetFallback() Toggle {
if x != nil {
return x.Fallback
}
return Toggle_UNSET
}
func (x *ConfigGroup) GetAdditionalModes() []*Mode {
if x != nil {
return x.AdditionalModes
}
return nil
}
func (x *ConfigGroup) GetUserLimits() []*UserLimit {
if x != nil {
return x.UserLimits
}
return nil
}
func (x *ConfigGroup) GetUserLimitDefault() *UserLimit {
if x != nil {
return x.UserLimitDefault
}
return nil
}
func (x *ConfigGroup) GetPostActions() []*ConfigGroup_PostAction {
if x != nil {
return x.PostActions
}
return nil
}
func (x *ConfigGroup) GetTryjobExperiments() []*ConfigGroup_TryjobExperiment {
if x != nil {
return x.TryjobExperiments
}
return nil
}
// SubmitOptions control how CQ submits CLs.
type SubmitOptions struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Optional. Maximum number of successful CQ attempts completed by submitting
// corresponding Gerrit CL(s) before waiting burst_delay.
//
// This feature today applies to all attempts processed by this CQ, across all
// config_groups.
//
// Must be >0 to take effect. Requires burst_delay to be set, too.
MaxBurst int32 `protobuf:"varint,1,opt,name=max_burst,json=maxBurst,proto3" json:"max_burst,omitempty"`
// Optional. Delay between bursts of submissions of CQ attempts.
// See max_burst for more info.
//
// Must be >0 to take effect. Requires max_burst to be set, too.
BurstDelay *durationpb.Duration `protobuf:"bytes,2,opt,name=burst_delay,json=burstDelay,proto3" json:"burst_delay,omitempty"`
}
func (x *SubmitOptions) Reset() {
*x = SubmitOptions{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SubmitOptions) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SubmitOptions) ProtoMessage() {}
func (x *SubmitOptions) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[2]
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 SubmitOptions.ProtoReflect.Descriptor instead.
func (*SubmitOptions) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{2}
}
func (x *SubmitOptions) GetMaxBurst() int32 {
if x != nil {
return x.MaxBurst
}
return 0
}
func (x *SubmitOptions) GetBurstDelay() *durationpb.Duration {
if x != nil {
return x.BurstDelay
}
return nil
}
// Mode defines a CQ Run mode and how it can be triggered.
//
// The mode ACL check will be same as dry run (i.e. use `dry_run_access_list`)
// if 1 is provided for `cq_label_value`. Otherwise, the check will the same as
// full run (i.e. checking whether CL is approved and whether CL owner is
// committer) if 2 is provided for `cq_label_value`.
type Mode struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Name of the mode.
//
// Must match regex "^[A-Z][A-Z_]{0,39}$".
// Must not be one of the reserved Run modes
// - DRY_RUN
// - FULL_RUN
// - NEW_PATCHSET_RUN
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Value of Commit-Queue label that triggers a run in the mode.
//
// Must be either 1 or 2. If 2 is provided, LUCI CV will follow the
// FULL_RUN behavior that it will submit CL(s) in this run after all
// tryjobs have passed.
CqLabelValue int32 `protobuf:"varint,2,opt,name=cq_label_value,json=cqLabelValue,proto3" json:"cq_label_value,omitempty"`
// Label that MUST also be voted with `triggering_value` in addition to
// "Commit-Queue" label to trigger a run in the mode.
//
// Must not be "Commit-Queue"
TriggeringLabel string `protobuf:"bytes,3,opt,name=triggering_label,json=triggeringLabel,proto3" json:"triggering_label,omitempty"`
// Value of the `triggering_label` that triggers a run in the mode.
//
// Must be > 0.
TriggeringValue int32 `protobuf:"varint,4,opt,name=triggering_value,json=triggeringValue,proto3" json:"triggering_value,omitempty"`
}
func (x *Mode) Reset() {
*x = Mode{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Mode) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Mode) ProtoMessage() {}
func (x *Mode) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[3]
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 Mode.ProtoReflect.Descriptor instead.
func (*Mode) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{3}
}
func (x *Mode) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Mode) GetCqLabelValue() int32 {
if x != nil {
return x.CqLabelValue
}
return 0
}
func (x *Mode) GetTriggeringLabel() string {
if x != nil {
return x.TriggeringLabel
}
return ""
}
func (x *Mode) GetTriggeringValue() int32 {
if x != nil {
return x.TriggeringValue
}
return 0
}
// CombineCLs defines how CQ works with >1 CL per attempt.
//
// Dependencies between CLs are either implicit via Git child->parent
// relationship (e.g. stacked CLs in Gerrit) or explicit via "CQ-Depend:"
// footer in CL description (next to Change-Id:). "CQ-Depend" may span
// across repositories and even Gerrit hosts. For example, a CL on
// https://pdfium-review.googlesource.com may declare dependency on
// https://chromium-review.googlesource.com/1111111 by adding this footer:
//
// CQ-Depend: chromium:1111111
//
// The "chromium" part means that 1111111 is on the
// chromium-review.googlesource.com host. It can be omitted if dependency
// is on the same host as the CL depending on it.
//
// CQ-Depend alone or with Git dependencies may form cycles, which is useful
// to require CQ to test & submit all CLs in a cycle at the same time, never
// alone.
//
// A user must vote on CQ label on **each CL** individually. Since it can't be
// instantaneous, `stabilization_delay` controls how long CQ waits for all
// CQ+1/2 votes before computing maximal expanded set of CLs and starting the
// attempt.
//
// For any CL with CQ+1/2 vote, each of its dependency must have the same CQ
// vote and be configured for CQ **in the same config group**, else CQ would
// abort the attempt with appropriate error message.
//
// Each tryjob CQ triggers via Buildbucket will be associated with each CL of
// the attempt via `gerrit_changes` parameter of Buildbucket. These changes are
// then available to a build as it is being executed. If ran via recipes,
// the `ordered_gerrit_changes` property of
// https://chromium.googlesource.com/infra/luci/recipes-py/+/HEAD/README.recipes.md#class-cqapi_recipeapi
// can be used to CLs in the right order.
//
// WARNING: When submitting CLs, CQ can not do so atomically (all submitted or
// none submitted) because Gerrit doesn't support this even for the same repo.
type CombineCLs struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Roughly, how long CQ waits for CQ to be triggered on each of the related
// CLs.
//
// Must be greater than 10s.
// 30s is recommended.
//
// Technically precise definition is time to wait since the latest CL among
// related ones receives CQ+1/2 vote before starting actual attempt.
//
// For example, during this delay, a CQ vote may be added on another CL
// which depends on previously CQ-ed CL in this not-yet-started attempt. Then,
// CQ would extend the attempt with additional CL and reset the waiting
// counter.
//
// Additional implication is that a standalone CL w/o any other relations to
// other CLs will need to wait this much time before CQ would start processing
// it (i.e., before it triggers first tryjob).
StabilizationDelay *durationpb.Duration `protobuf:"bytes,1,opt,name=stabilization_delay,json=stabilizationDelay,proto3" json:"stabilization_delay,omitempty"`
}
func (x *CombineCLs) Reset() {
*x = CombineCLs{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CombineCLs) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CombineCLs) ProtoMessage() {}
func (x *CombineCLs) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[4]
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 CombineCLs.ProtoReflect.Descriptor instead.
func (*CombineCLs) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{4}
}
func (x *CombineCLs) GetStabilizationDelay() *durationpb.Duration {
if x != nil {
return x.StabilizationDelay
}
return nil
}
// Verifiers are various types of checks that a Commit Queue performs on a CL.
// All verifiers must pass in order for a CL to be submitted. Configuration file
// describes types of verifiers that should be applied to each CL and their
// parameters.
type Verifiers struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. GerritCQAbility ensures that a user who triggered
// this CQ attempt actually has rights to do so based on 3 factors:
// - membership of the user in committers & dryrunners group,
// - the state of CL/patchset on which CQ is triggered,
// - relationship of the user to the CL.
GerritCqAbility *Verifiers_GerritCQAbility `protobuf:"bytes,1,opt,name=gerrit_cq_ability,json=gerritCqAbility,proto3" json:"gerrit_cq_ability,omitempty"`
// This verifier is used to check tree status before committing a CL. If the
// tree is closed, then the verifier will wait until it is reopened.
TreeStatus *Verifiers_TreeStatus `protobuf:"bytes,2,opt,name=tree_status,json=treeStatus,proto3" json:"tree_status,omitempty"`
// This verifier triggers a set of builds through Buildbucket.
//
// CQ automatically retries failed tryjobs and only allows CL to land if each
// builder has succeeded in the latest retry.
// If a given tryjob result is too old (>1 day) it is ignored.
//
// Typically, builds from Buildbucket are executed on LUCI stack, however, CQ
// is agnostic to how and where builds are executed.
Tryjob *Verifiers_Tryjob `protobuf:"bytes,3,opt,name=tryjob,proto3" json:"tryjob,omitempty"`
// CQLinter is for internal CQ use only. DO NOT USE IN YOUR cq.cfg.
Cqlinter *Verifiers_CQLinter `protobuf:"bytes,4,opt,name=cqlinter,proto3" json:"cqlinter,omitempty"`
// Fake is for internal CQ use only. DO NOT USE IN YOUR cq.cfg.
Fake *Verifiers_Fake `protobuf:"bytes,5,opt,name=fake,proto3" json:"fake,omitempty"`
}
func (x *Verifiers) Reset() {
*x = Verifiers{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Verifiers) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Verifiers) ProtoMessage() {}
func (x *Verifiers) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[5]
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 Verifiers.ProtoReflect.Descriptor instead.
func (*Verifiers) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{5}
}
func (x *Verifiers) GetGerritCqAbility() *Verifiers_GerritCQAbility {
if x != nil {
return x.GerritCqAbility
}
return nil
}
func (x *Verifiers) GetTreeStatus() *Verifiers_TreeStatus {
if x != nil {
return x.TreeStatus
}
return nil
}
func (x *Verifiers) GetTryjob() *Verifiers_Tryjob {
if x != nil {
return x.Tryjob
}
return nil
}
func (x *Verifiers) GetCqlinter() *Verifiers_CQLinter {
if x != nil {
return x.Cqlinter
}
return nil
}
func (x *Verifiers) GetFake() *Verifiers_Fake {
if x != nil {
return x.Fake
}
return nil
}
// UserLimit specifies Run and Tryjob limits per user.
type UserLimit struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Name of the limit. Must be unique across all the policies
// with the LUCI project.
//
// Required. Must match regex '^[0-9A-Za-z][0-9A-Za-z\.\-@_+]{0,511}$'
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Principals to apply the limits to.
//
// Each entry can be either an identity string "user:<email>"
// or a LUCI group reference "group:<name>"
Principals []string `protobuf:"bytes,2,rep,name=principals,proto3" json:"principals,omitempty"`
// Run limits. Required.
Run *UserLimit_Run `protobuf:"bytes,5,opt,name=run,proto3" json:"run,omitempty"`
// Tryjob limits. Required
Tryjob *UserLimit_Tryjob `protobuf:"bytes,6,opt,name=tryjob,proto3" json:"tryjob,omitempty"`
}
func (x *UserLimit) Reset() {
*x = UserLimit{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UserLimit) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UserLimit) ProtoMessage() {}
func (x *UserLimit) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[6]
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 UserLimit.ProtoReflect.Descriptor instead.
func (*UserLimit) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{6}
}
func (x *UserLimit) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *UserLimit) GetPrincipals() []string {
if x != nil {
return x.Principals
}
return nil
}
func (x *UserLimit) GetRun() *UserLimit_Run {
if x != nil {
return x.Run
}
return nil
}
func (x *UserLimit) GetTryjob() *UserLimit_Tryjob {
if x != nil {
return x.Tryjob
}
return nil
}
// Enumerates repositories on a Gerrit instance for which CQ should work.
type ConfigGroup_Gerrit struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Gerrit URL, e.g., https://chromium-review.googlesource.com.
// No trailing slashes allowed.
Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
// Gerrit projects of this Gerrit instance to work with.
//
// At least 1 required.
Projects []*ConfigGroup_Gerrit_Project `protobuf:"bytes,2,rep,name=projects,proto3" json:"projects,omitempty"`
}
func (x *ConfigGroup_Gerrit) Reset() {
*x = ConfigGroup_Gerrit{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ConfigGroup_Gerrit) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ConfigGroup_Gerrit) ProtoMessage() {}
func (x *ConfigGroup_Gerrit) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[7]
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 ConfigGroup_Gerrit.ProtoReflect.Descriptor instead.
func (*ConfigGroup_Gerrit) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{1, 0}
}
func (x *ConfigGroup_Gerrit) GetUrl() string {
if x != nil {
return x.Url
}
return ""
}
func (x *ConfigGroup_Gerrit) GetProjects() []*ConfigGroup_Gerrit_Project {
if x != nil {
return x.Projects
}
return nil
}
// Action to be performed on a Run completion.
type ConfigGroup_PostAction struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Name of the post action.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// If at least one of the conditions is met,
// the action will be triggered on a Run completion.
Conditions []*ConfigGroup_PostAction_TriggeringCondition `protobuf:"bytes,2,rep,name=conditions,proto3" json:"conditions,omitempty"`
// Types that are assignable to Action:
//
// *ConfigGroup_PostAction_VoteGerritLabels_
Action isConfigGroup_PostAction_Action `protobuf_oneof:"action"`
}
func (x *ConfigGroup_PostAction) Reset() {
*x = ConfigGroup_PostAction{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ConfigGroup_PostAction) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ConfigGroup_PostAction) ProtoMessage() {}
func (x *ConfigGroup_PostAction) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ConfigGroup_PostAction.ProtoReflect.Descriptor instead.
func (*ConfigGroup_PostAction) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{1, 1}
}
func (x *ConfigGroup_PostAction) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *ConfigGroup_PostAction) GetConditions() []*ConfigGroup_PostAction_TriggeringCondition {
if x != nil {
return x.Conditions
}
return nil
}
func (m *ConfigGroup_PostAction) GetAction() isConfigGroup_PostAction_Action {
if m != nil {
return m.Action
}
return nil
}
func (x *ConfigGroup_PostAction) GetVoteGerritLabels() *ConfigGroup_PostAction_VoteGerritLabels {
if x, ok := x.GetAction().(*ConfigGroup_PostAction_VoteGerritLabels_); ok {
return x.VoteGerritLabels
}
return nil
}
type isConfigGroup_PostAction_Action interface {
isConfigGroup_PostAction_Action()
}
type ConfigGroup_PostAction_VoteGerritLabels_ struct {
VoteGerritLabels *ConfigGroup_PostAction_VoteGerritLabels `protobuf:"bytes,3,opt,name=vote_gerrit_labels,json=voteGerritLabels,proto3,oneof"`
}
func (*ConfigGroup_PostAction_VoteGerritLabels_) isConfigGroup_PostAction_Action() {}
// TryjobExperiment is experiment (e.g. Buildbucket Build experiment) that
// will be enabled on the Tryjobs of CLs that meet the condition.
//
// TODO(crbug/1440834): Currently this feature has a caveat that a Run with
// this experiment enabled may reuse the Tryjob from previous Run that
// doesn't have this experiment enabled. This typically happens to the Run
// triggered immediately after the config change.
type ConfigGroup_TryjobExperiment struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Name of the experiment.
//
// See `experiments` field in
// https://pkg.go.dev/go.chromium.org/luci/buildbucket/proto#BuilderConfig
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// The condition to meet to enable this experiment.
//
// The absence of condition means the experiment will be enabled
// unconditionally.
Condition *ConfigGroup_TryjobExperiment_Condition `protobuf:"bytes,2,opt,name=condition,proto3" json:"condition,omitempty"`
}
func (x *ConfigGroup_TryjobExperiment) Reset() {
*x = ConfigGroup_TryjobExperiment{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ConfigGroup_TryjobExperiment) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ConfigGroup_TryjobExperiment) ProtoMessage() {}
func (x *ConfigGroup_TryjobExperiment) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ConfigGroup_TryjobExperiment.ProtoReflect.Descriptor instead.
func (*ConfigGroup_TryjobExperiment) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{1, 2}
}
func (x *ConfigGroup_TryjobExperiment) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *ConfigGroup_TryjobExperiment) GetCondition() *ConfigGroup_TryjobExperiment_Condition {
if x != nil {
return x.Condition
}
return nil
}
type ConfigGroup_Gerrit_Project struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Repository name inside Gerrit host. Required.
//
// No leading or trailing slashes allowed, no '.git' at the end.
// 'a/' prefix is also not allowed (it's used on *.googlesource.com for
// forcing authentication).
//
// Examples on https://chromium-review.googlesource.com:
//
// catapult
// chromium/src
// chromium/tools/depot_tools
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Limit CLs in this repo to only these refs. Required.
//
// If not specified, defaults to "refs/heads/master".
//
// NOTE: your Gerrit admin must configure Gerrit ACLs such that CQ has
// read access to these refs, otherwise your users will be waiting for CQ
// to act on their CLs forever.
//
// Regular expression is validated by https://github.com/google/re2 library.
//
// NOTE: Git globs aren't supported. Convert them to a regular expression,
// e.g., Git glob "refs/heads/*" should be "refs/heads/[^/]+".
// However, users typically expect "refs/heads/.+", since expectation is
// that every typical Git branch to be CQ-able, including
// "refs/heads/experimental/foobar".
RefRegexp []string `protobuf:"bytes,2,rep,name=ref_regexp,json=refRegexp,proto3" json:"ref_regexp,omitempty"`
// Exclude matching refs in this repo. Optional.
//
// If a ref is matches at least one of the ref_regexp_exclude,
// then it is ignored by this config group regardless of ref_regexp.
//
// The syntax is the same as for ref_regexp.
RefRegexpExclude []string `protobuf:"bytes,3,rep,name=ref_regexp_exclude,json=refRegexpExclude,proto3" json:"ref_regexp_exclude,omitempty"`
}
func (x *ConfigGroup_Gerrit_Project) Reset() {
*x = ConfigGroup_Gerrit_Project{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ConfigGroup_Gerrit_Project) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ConfigGroup_Gerrit_Project) ProtoMessage() {}
func (x *ConfigGroup_Gerrit_Project) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[10]
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 ConfigGroup_Gerrit_Project.ProtoReflect.Descriptor instead.
func (*ConfigGroup_Gerrit_Project) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{1, 0, 0}
}
func (x *ConfigGroup_Gerrit_Project) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *ConfigGroup_Gerrit_Project) GetRefRegexp() []string {
if x != nil {
return x.RefRegexp
}
return nil
}
func (x *ConfigGroup_Gerrit_Project) GetRefRegexpExclude() []string {
if x != nil {
return x.RefRegexpExclude
}
return nil
}
// Condition to be met for the action to be triggered.
type ConfigGroup_PostAction_TriggeringCondition struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Name of the mode to be matched.
//
// Must be FULL_RUN, DRY_RUN, NEW_PATCHSET_RUN, or one of the additional
// modes configured.
Mode string `protobuf:"bytes,1,opt,name=mode,proto3" json:"mode,omitempty"`
// Statuses to trigger the action on.
//
// Must be terminal statuses.
// Duplicates are not allowed.
Statuses []v1.Run_Status `protobuf:"varint,2,rep,packed,name=statuses,proto3,enum=cv.v1.Run_Status" json:"statuses,omitempty"`
}
func (x *ConfigGroup_PostAction_TriggeringCondition) Reset() {
*x = ConfigGroup_PostAction_TriggeringCondition{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ConfigGroup_PostAction_TriggeringCondition) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ConfigGroup_PostAction_TriggeringCondition) ProtoMessage() {}
func (x *ConfigGroup_PostAction_TriggeringCondition) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[11]
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 ConfigGroup_PostAction_TriggeringCondition.ProtoReflect.Descriptor instead.
func (*ConfigGroup_PostAction_TriggeringCondition) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{1, 1, 0}
}
func (x *ConfigGroup_PostAction_TriggeringCondition) GetMode() string {
if x != nil {
return x.Mode
}
return ""
}
func (x *ConfigGroup_PostAction_TriggeringCondition) GetStatuses() []v1.Run_Status {
if x != nil {
return x.Statuses
}
return nil
}
// Vote Gerrit labels with given values.
type ConfigGroup_PostAction_VoteGerritLabels struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// All label names must be unique.
Votes []*ConfigGroup_PostAction_VoteGerritLabels_Vote `protobuf:"bytes,1,rep,name=votes,proto3" json:"votes,omitempty"`
}
func (x *ConfigGroup_PostAction_VoteGerritLabels) Reset() {
*x = ConfigGroup_PostAction_VoteGerritLabels{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ConfigGroup_PostAction_VoteGerritLabels) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ConfigGroup_PostAction_VoteGerritLabels) ProtoMessage() {}
func (x *ConfigGroup_PostAction_VoteGerritLabels) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[12]
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 ConfigGroup_PostAction_VoteGerritLabels.ProtoReflect.Descriptor instead.
func (*ConfigGroup_PostAction_VoteGerritLabels) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{1, 1, 1}
}
func (x *ConfigGroup_PostAction_VoteGerritLabels) GetVotes() []*ConfigGroup_PostAction_VoteGerritLabels_Vote {
if x != nil {
return x.Votes
}
return nil
}
type ConfigGroup_PostAction_VoteGerritLabels_Vote struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Gerrit label name
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Value to set on the label
Value int32 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"`
}
func (x *ConfigGroup_PostAction_VoteGerritLabels_Vote) Reset() {
*x = ConfigGroup_PostAction_VoteGerritLabels_Vote{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ConfigGroup_PostAction_VoteGerritLabels_Vote) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ConfigGroup_PostAction_VoteGerritLabels_Vote) ProtoMessage() {}
func (x *ConfigGroup_PostAction_VoteGerritLabels_Vote) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[13]
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 ConfigGroup_PostAction_VoteGerritLabels_Vote.ProtoReflect.Descriptor instead.
func (*ConfigGroup_PostAction_VoteGerritLabels_Vote) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{1, 1, 1, 0}
}
func (x *ConfigGroup_PostAction_VoteGerritLabels_Vote) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *ConfigGroup_PostAction_VoteGerritLabels_Vote) GetValue() int32 {
if x != nil {
return x.Value
}
return 0
}
// Condition describes the condition for this experiment to be enabled.
type ConfigGroup_TryjobExperiment_Condition struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// ownerGroupAllowlist is a list of CrIA groups that the owner of the CL
// must be a member in any of those groups in order to enable the
// experiment.
//
// If the list is empty, this condition is considered as met.
OwnerGroupAllowlist []string `protobuf:"bytes,1,rep,name=owner_group_allowlist,json=ownerGroupAllowlist,proto3" json:"owner_group_allowlist,omitempty"`
}
func (x *ConfigGroup_TryjobExperiment_Condition) Reset() {
*x = ConfigGroup_TryjobExperiment_Condition{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ConfigGroup_TryjobExperiment_Condition) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ConfigGroup_TryjobExperiment_Condition) ProtoMessage() {}
func (x *ConfigGroup_TryjobExperiment_Condition) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[14]
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 ConfigGroup_TryjobExperiment_Condition.ProtoReflect.Descriptor instead.
func (*ConfigGroup_TryjobExperiment_Condition) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{1, 2, 0}
}
func (x *ConfigGroup_TryjobExperiment_Condition) GetOwnerGroupAllowlist() []string {
if x != nil {
return x.OwnerGroupAllowlist
}
return nil
}
// Next tag: 8.
type Verifiers_GerritCQAbility struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. List of chrome-infra-auth groups, whose members are authorized
// to trigger full CQ runs.
//
// Typically, such groups are named "project-<name>-committers".
CommitterList []string `protobuf:"bytes,1,rep,name=committer_list,json=committerList,proto3" json:"committer_list,omitempty"`
// Optional, but strongly recommended. List of chrome-infra-auth groups,
// whose members are authorized to trigger CQ dry run on Gerrit CLs.
//
// By default, they are allowed to trigger CQ dry runs on their own
// CLs only, but this can be relaxed, if `allow_non_owner_dry_runner`
// is set.
//
// Typically, such groups are named "project-<name>-tryjob-access".
DryRunAccessList []string `protobuf:"bytes,2,rep,name=dry_run_access_list,json=dryRunAccessList,proto3" json:"dry_run_access_list,omitempty"`
// Optional, but required to use auto-triggered runs on new patchset upload,
// it defines a list of chrome-infra-auth groups whose members are
// authorized to trigger a new patchset runs. That is, CV will check the
// owner of the CL when a new patchset is uploaded against these.
NewPatchsetRunAccessList []string `protobuf:"bytes,5,rep,name=new_patchset_run_access_list,json=newPatchsetRunAccessList,proto3" json:"new_patchset_run_access_list,omitempty"`
// Optional. allow_submit_with_open_deps controls how CQ full run behaves
// when current Gerrit CL has open dependencies (not yet submitted CLs on
// which *this* CL depends).
//
// If set to false (default), CQ will abort full run attempt immediately if
// open dependencies are detected.
//
// If set to true, then CQ will not abort full run and upon passing all
// other verifiers, CQ will attempt to submit the CL regardless of open
// dependencies and whether CQ verified those open dependencies.
// In turn, if Gerrit project config allows this, Gerrit will execute submit
// of all dependent CLs first and then this CL.
AllowSubmitWithOpenDeps bool `protobuf:"varint,3,opt,name=allow_submit_with_open_deps,json=allowSubmitWithOpenDeps,proto3" json:"allow_submit_with_open_deps,omitempty"`
// Optional. Allow CL owner to trigger CQ dry or full run on their own CL,
// even if not a member of `committer_list` or `dry_run_access_list`.
// Defaults to no such allowance.
//
// WARNING: using this option is not recommended if you have sticky
// Code-Review label because this allows a malicious developer to upload
// an good looking patchset at first, get code review approval,
// and then upload a bad patchset and CQ it right away.
//
// CL owner is Gerrit user owning a CL, i.e., its first patchset uploader.
// not to be confused with OWNERS files.
AllowOwnerIfSubmittable Verifiers_GerritCQAbility_CQAction `protobuf:"varint,4,opt,name=allow_owner_if_submittable,json=allowOwnerIfSubmittable,proto3,enum=cv.config.Verifiers_GerritCQAbility_CQAction" json:"allow_owner_if_submittable,omitempty"`
// Optional. Consider CL dependencies that are owned by members of
// `dry_run_access_list` as trusted, even if they are not approved.
//
// By default, unapproved dependencies are only trusted if they are owned
// by members of `committer_list`.
//
// This allows CQ dry run on CLs with unapproved dependencies owned by
// members of `dry_run_access_list`.
TrustDryRunnerDeps bool `protobuf:"varint,6,opt,name=trust_dry_runner_deps,json=trustDryRunnerDeps,proto3" json:"trust_dry_runner_deps,omitempty"`
// Optional. Allow members of `dry_run_access_list` to trigger CQ dry run
// on Gerrit CLs they do not own, even if the CL hasn't been approved.
//
// By default, members of `dry_run_access_list` can only trigger CQ dry run
// on Gerrit CLs they own.
AllowNonOwnerDryRunner bool `protobuf:"varint,7,opt,name=allow_non_owner_dry_runner,json=allowNonOwnerDryRunner,proto3" json:"allow_non_owner_dry_runner,omitempty"`
}
func (x *Verifiers_GerritCQAbility) Reset() {
*x = Verifiers_GerritCQAbility{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Verifiers_GerritCQAbility) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Verifiers_GerritCQAbility) ProtoMessage() {}
func (x *Verifiers_GerritCQAbility) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[15]
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 Verifiers_GerritCQAbility.ProtoReflect.Descriptor instead.
func (*Verifiers_GerritCQAbility) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{5, 0}
}
func (x *Verifiers_GerritCQAbility) GetCommitterList() []string {
if x != nil {
return x.CommitterList
}
return nil
}
func (x *Verifiers_GerritCQAbility) GetDryRunAccessList() []string {
if x != nil {
return x.DryRunAccessList
}
return nil
}
func (x *Verifiers_GerritCQAbility) GetNewPatchsetRunAccessList() []string {
if x != nil {
return x.NewPatchsetRunAccessList
}
return nil
}
func (x *Verifiers_GerritCQAbility) GetAllowSubmitWithOpenDeps() bool {
if x != nil {
return x.AllowSubmitWithOpenDeps
}
return false
}
func (x *Verifiers_GerritCQAbility) GetAllowOwnerIfSubmittable() Verifiers_GerritCQAbility_CQAction {
if x != nil {
return x.AllowOwnerIfSubmittable
}
return Verifiers_GerritCQAbility_UNSET
}
func (x *Verifiers_GerritCQAbility) GetTrustDryRunnerDeps() bool {
if x != nil {
return x.TrustDryRunnerDeps
}
return false
}
func (x *Verifiers_GerritCQAbility) GetAllowNonOwnerDryRunner() bool {
if x != nil {
return x.AllowNonOwnerDryRunner
}
return false
}
type Verifiers_TreeStatus struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. URL of the project tree status app.
Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
}
func (x *Verifiers_TreeStatus) Reset() {
*x = Verifiers_TreeStatus{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Verifiers_TreeStatus) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Verifiers_TreeStatus) ProtoMessage() {}
func (x *Verifiers_TreeStatus) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[16]
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 Verifiers_TreeStatus.ProtoReflect.Descriptor instead.
func (*Verifiers_TreeStatus) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{5, 1}
}
func (x *Verifiers_TreeStatus) GetUrl() string {
if x != nil {
return x.Url
}
return ""
}
// Tryjob configures builders which CQ may trigger and/or use to verify CL(s).
type Verifiers_Tryjob struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Builders on which tryjobs should be triggered.
//
// CQ won't allow adding any builder via `CQ-Include-Trybots:` in CL
// description except those in this list (including the equivalent
// builders).
Builders []*Verifiers_Tryjob_Builder `protobuf:"bytes,1,rep,name=builders,proto3" json:"builders,omitempty"`
// Optional, defaulting to no retries whatsoever.
RetryConfig *Verifiers_Tryjob_RetryConfig `protobuf:"bytes,2,opt,name=retry_config,json=retryConfig,proto3" json:"retry_config,omitempty"`
// DEPRECATED. Use per-builder `cancel_stale` instead.
//
// Deprecated: Marked as deprecated in go.chromium.org/luci/cv/api/config/v2/config.proto.
CancelStaleTryjobs Toggle `protobuf:"varint,3,opt,name=cancel_stale_tryjobs,json=cancelStaleTryjobs,proto3,enum=cv.config.Toggle" json:"cancel_stale_tryjobs,omitempty"`
}
func (x *Verifiers_Tryjob) Reset() {
*x = Verifiers_Tryjob{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Verifiers_Tryjob) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Verifiers_Tryjob) ProtoMessage() {}
func (x *Verifiers_Tryjob) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[17]
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 Verifiers_Tryjob.ProtoReflect.Descriptor instead.
func (*Verifiers_Tryjob) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{5, 2}
}
func (x *Verifiers_Tryjob) GetBuilders() []*Verifiers_Tryjob_Builder {
if x != nil {
return x.Builders
}
return nil
}
func (x *Verifiers_Tryjob) GetRetryConfig() *Verifiers_Tryjob_RetryConfig {
if x != nil {
return x.RetryConfig
}
return nil
}
// Deprecated: Marked as deprecated in go.chromium.org/luci/cv/api/config/v2/config.proto.
func (x *Verifiers_Tryjob) GetCancelStaleTryjobs() Toggle {
if x != nil {
return x.CancelStaleTryjobs
}
return Toggle_UNSET
}
// CQLinter is for internal use in CQ.
//
// Deprecated. Do not use.
// TODO(crbug/1127991): Remove after migration off CQDaemon is completed.
type Verifiers_CQLinter struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *Verifiers_CQLinter) Reset() {
*x = Verifiers_CQLinter{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Verifiers_CQLinter) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Verifiers_CQLinter) ProtoMessage() {}
func (x *Verifiers_CQLinter) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[18]
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 Verifiers_CQLinter.ProtoReflect.Descriptor instead.
func (*Verifiers_CQLinter) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{5, 3}
}
// Fake is for internal use in CQ.
//
// Deprecated. Do not use.
// TODO(crbug/1127991): Remove after migration off CQDaemon is completed.
type Verifiers_Fake struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
EventualState string `protobuf:"bytes,2,opt,name=eventual_state,json=eventualState,proto3" json:"eventual_state,omitempty"`
Delay int32 `protobuf:"varint,3,opt,name=delay,proto3" json:"delay,omitempty"`
}
func (x *Verifiers_Fake) Reset() {
*x = Verifiers_Fake{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Verifiers_Fake) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Verifiers_Fake) ProtoMessage() {}
func (x *Verifiers_Fake) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[19]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Verifiers_Fake.ProtoReflect.Descriptor instead.
func (*Verifiers_Fake) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{5, 4}
}
func (x *Verifiers_Fake) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Verifiers_Fake) GetEventualState() string {
if x != nil {
return x.EventualState
}
return ""
}
func (x *Verifiers_Fake) GetDelay() int32 {
if x != nil {
return x.Delay
}
return 0
}
type Verifiers_Tryjob_Builder struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The buildbucket host name.
//
// Optional. If empty, default to "cr-buildbucket.appspot.com".
Host string `protobuf:"bytes,16,opt,name=host,proto3" json:"host,omitempty"`
// Required. Name of the builder as <project>/<bucket>/<builder>
//
// Examples:
//
// "chromium/try/linux-tester"
// "other-project/try/shared-try-builder"
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// If true, this builder will only be used if specified via
// `CQ-Include-Trybots:` on CL description.
//
// If false, the builder may still be included via `CQ-Include-Trybots:`
// on CL description.
//
// This is useful if you want individual CLs to opt-in to this builder,
// e.g.:
//
// builder {name: "win-release"} # required for all.
// builder {name: "win-debug" includable_only: true} # opt in only.
//
// Not combinable with:
// - location_filters
// - experiment_percentage
IncludableOnly bool `protobuf:"varint,9,opt,name=includable_only,json=includableOnly,proto3" json:"includable_only,omitempty"`
// Determines how visible the results of a build for this builder are in
// Gerrit for this tryjob.
//
// This doesn't affect the buildbucket plugin (green/red chips).
ResultVisibility CommentLevel `protobuf:"varint,10,opt,name=result_visibility,json=resultVisibility,proto3,enum=cv.config.CommentLevel" json:"result_visibility,omitempty"`
// Optional. If true, a fresh build will be required for each CQ attempt.
//
// Default is false, meaning CQ may re-use a successful build
// triggered before current CQ attempt started.
//
// This option is typically used for builders which run depot_tools'
// PRESUBMIT scripts, which are supposed to be quick to run and provide
// additional OWNERS, lint, etc checks which are useful to run against
// the latest revision of the CL's target branch.
DisableReuse bool `protobuf:"varint,2,opt,name=disable_reuse,json=disableReuse,proto3" json:"disable_reuse,omitempty"`
// Optional. If YES (default), running or not-yet-started builds of this
// builder previously triggered by CQ will be cancelled as soon as
// a substantially different patchset is uploaded to a CL.
//
// The following paragraph is only applicable to LUCI Change Verifier (
// The successor of legacy CQ). As of 09/2020, the implementation is
// still WIP. TODO(crbug/1127991): Remove after migration is done.
//
// CV will snapshot the value of this option when a Run is created
// and use it throughout the lifecycle of this Run. Therefore,
// modification on this option will only take effect on newly-created
// Runs after config change is propagated to CV.
CancelStale Toggle `protobuf:"varint,11,opt,name=cancel_stale,json=cancelStale,proto3,enum=cv.config.Toggle" json:"cancel_stale,omitempty"`
// Optional. When this field is present, it marks given builder as
// experimental. It is only triggered on a given percentage of the CLs
// and the outcome does not affect the decision of whether a CL can land
// or not. This is typically used to test new builders and estimate their
// capacity requirements. May be combined with location_filters.
ExperimentPercentage float32 `protobuf:"fixed32,4,opt,name=experiment_percentage,json=experimentPercentage,proto3" json:"experiment_percentage,omitempty"`
// Optionally specified alternative builder for CQ to choose instead.
// If provided, CQ will choose only one of the equivalent builders as
// required based purely on given CL and CL's owner and **regardless** of
// the possibly already completed tryjobs.
//
// Note: The equivalent builders can be included using
// `CQ-Include-Trybots:` footer. In this case, CQ will always try to
// trigger the equivalent builders regardless of the equivalent
// percentage.
EquivalentTo *Verifiers_Tryjob_EquivalentBuilder `protobuf:"bytes,5,opt,name=equivalent_to,json=equivalentTo,proto3" json:"equivalent_to,omitempty"`
LocationFilters []*Verifiers_Tryjob_Builder_LocationFilter `protobuf:"bytes,15,rep,name=location_filters,json=locationFilters,proto3" json:"location_filters,omitempty"`
// If set, this builder will only be triggered if the CL owner (who first
// uploaded the CL) is a member of at least one of these groups.
OwnerWhitelistGroup []string `protobuf:"bytes,8,rep,name=owner_whitelist_group,json=ownerWhitelistGroup,proto3" json:"owner_whitelist_group,omitempty"`
// If set, require this builder only if the Run mode matches one of the
// modes in this list. If unset, it implies that only FULL_RUN and
// DRY_RUN are allowed. Optional.
ModeAllowlist []string `protobuf:"bytes,14,rep,name=mode_allowlist,json=modeAllowlist,proto3" json:"mode_allowlist,omitempty"`
}
func (x *Verifiers_Tryjob_Builder) Reset() {
*x = Verifiers_Tryjob_Builder{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Verifiers_Tryjob_Builder) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Verifiers_Tryjob_Builder) ProtoMessage() {}
func (x *Verifiers_Tryjob_Builder) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[20]
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 Verifiers_Tryjob_Builder.ProtoReflect.Descriptor instead.
func (*Verifiers_Tryjob_Builder) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{5, 2, 0}
}
func (x *Verifiers_Tryjob_Builder) GetHost() string {
if x != nil {
return x.Host
}
return ""
}
func (x *Verifiers_Tryjob_Builder) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Verifiers_Tryjob_Builder) GetIncludableOnly() bool {
if x != nil {
return x.IncludableOnly
}
return false
}
func (x *Verifiers_Tryjob_Builder) GetResultVisibility() CommentLevel {
if x != nil {
return x.ResultVisibility
}
return CommentLevel_COMMENT_LEVEL_UNSET
}
func (x *Verifiers_Tryjob_Builder) GetDisableReuse() bool {
if x != nil {
return x.DisableReuse
}
return false
}
func (x *Verifiers_Tryjob_Builder) GetCancelStale() Toggle {
if x != nil {
return x.CancelStale
}
return Toggle_UNSET
}
func (x *Verifiers_Tryjob_Builder) GetExperimentPercentage() float32 {
if x != nil {
return x.ExperimentPercentage
}
return 0
}
func (x *Verifiers_Tryjob_Builder) GetEquivalentTo() *Verifiers_Tryjob_EquivalentBuilder {
if x != nil {
return x.EquivalentTo
}
return nil
}
func (x *Verifiers_Tryjob_Builder) GetLocationFilters() []*Verifiers_Tryjob_Builder_LocationFilter {
if x != nil {
return x.LocationFilters
}
return nil
}
func (x *Verifiers_Tryjob_Builder) GetOwnerWhitelistGroup() []string {
if x != nil {
return x.OwnerWhitelistGroup
}
return nil
}
func (x *Verifiers_Tryjob_Builder) GetModeAllowlist() []string {
if x != nil {
return x.ModeAllowlist
}
return nil
}
type Verifiers_Tryjob_EquivalentBuilder struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. Name of this builder.
// Format is the same in the same format as Builder.name.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Percentage expressing probability of CQ triggering this builder instead
// of the builder to which this builder is equivalent to.
//
// A choice itself is made deterministically based on CL alone, hereby
// all CQ attempts on all patchsets of a given CL will trigger the same
// builder, assuming CQ config doesn't change in the mean time.
//
// Note that if `owner_whitelist_group` is also specified, the choice over
// which of the two builders to trigger will be made only for CLs owned by
// whitelisted group.
//
// If not specified, defaults to 0, meaning this builder is never
// triggered by CQ, but an existing build can be re-used by CQ.
//
// To illustrate, suppose percentage=10. Then,
//
// Without owner_whitelist_group,
// ~10% of all CQ attempts will trigger this builder.
// With owner_whitelist_group set and, suppose, 1/5 of CQ attempts are
// ran on CLs owned by this group, then only ~(1/10)*(1/5) or
// ~2% of all CQ attempts will trigger this builder.
Percentage float32 `protobuf:"fixed32,2,opt,name=percentage,proto3" json:"percentage,omitempty"`
// If specified, limits the builder to CL owners in this group.
OwnerWhitelistGroup string `protobuf:"bytes,3,opt,name=owner_whitelist_group,json=ownerWhitelistGroup,proto3" json:"owner_whitelist_group,omitempty"`
}
func (x *Verifiers_Tryjob_EquivalentBuilder) Reset() {
*x = Verifiers_Tryjob_EquivalentBuilder{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Verifiers_Tryjob_EquivalentBuilder) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Verifiers_Tryjob_EquivalentBuilder) ProtoMessage() {}
func (x *Verifiers_Tryjob_EquivalentBuilder) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[21]
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 Verifiers_Tryjob_EquivalentBuilder.ProtoReflect.Descriptor instead.
func (*Verifiers_Tryjob_EquivalentBuilder) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{5, 2, 1}
}
func (x *Verifiers_Tryjob_EquivalentBuilder) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Verifiers_Tryjob_EquivalentBuilder) GetPercentage() float32 {
if x != nil {
return x.Percentage
}
return 0
}
func (x *Verifiers_Tryjob_EquivalentBuilder) GetOwnerWhitelistGroup() string {
if x != nil {
return x.OwnerWhitelistGroup
}
return ""
}
// Builder which can be included via `CQ-Include-Trybots:` in CL
// description.
type Verifiers_Tryjob_IncludableBuilder struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. Name of this builder.
// Format is the same in the same format as Builder.name.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
}
func (x *Verifiers_Tryjob_IncludableBuilder) Reset() {
*x = Verifiers_Tryjob_IncludableBuilder{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Verifiers_Tryjob_IncludableBuilder) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Verifiers_Tryjob_IncludableBuilder) ProtoMessage() {}
func (x *Verifiers_Tryjob_IncludableBuilder) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[22]
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 Verifiers_Tryjob_IncludableBuilder.ProtoReflect.Descriptor instead.
func (*Verifiers_Tryjob_IncludableBuilder) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{5, 2, 2}
}
func (x *Verifiers_Tryjob_IncludableBuilder) GetName() string {
if x != nil {
return x.Name
}
return ""
}
// Collection of parameters for deciding whether to retry a single build.
// If parameter is not specified, its value defaults to 0 (per proto3).
// Thus, omitting all parameters means no retries of any kind.
//
// CQ's retry logic is as follows:
// All builds triggered during the lifetime of a CQ attempt for a tryjob are
// weighted according to the failure type, as described below. The resulting
// weights are then added together. Call this number W. If W > single_quota,
// then no more builds are scheduled for that tryjob.
//
// W for every tryjob is then summed up. If that result is strictly greater
// than global_quota, then the CQ attempt fails, and no more builds are
// scheduled for the attempt.
type Verifiers_Tryjob_RetryConfig struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Retry quota for a single tryjob.
SingleQuota int32 `protobuf:"varint,1,opt,name=single_quota,json=singleQuota,proto3" json:"single_quota,omitempty"`
// Retry quota for all tryjobs in a CL.
GlobalQuota int32 `protobuf:"varint,2,opt,name=global_quota,json=globalQuota,proto3" json:"global_quota,omitempty"`
// The weight assigned to each tryjob failure. A failure is as a
// buildbucket build whose result == 'FAILURE'.
FailureWeight int32 `protobuf:"varint,3,opt,name=failure_weight,json=failureWeight,proto3" json:"failure_weight,omitempty"`
// The weight assigned to each transient failure. A transient failure is a
// buildbucket build which has result == 'FAILURE' and 'failure_reason' in
// ('BUILDBUCKET_FAILURE', 'INFRA_FAILURE').
TransientFailureWeight int32 `protobuf:"varint,4,opt,name=transient_failure_weight,json=transientFailureWeight,proto3" json:"transient_failure_weight,omitempty"`
// The weight assigned to tryjob timeouts. A tryjob timeout is as a
// buildbucket build with result == 'CANCELED' and cancelation_reason ==
// 'TIMEOUT'.
TimeoutWeight int32 `protobuf:"varint,5,opt,name=timeout_weight,json=timeoutWeight,proto3" json:"timeout_weight,omitempty"`
}
func (x *Verifiers_Tryjob_RetryConfig) Reset() {
*x = Verifiers_Tryjob_RetryConfig{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Verifiers_Tryjob_RetryConfig) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Verifiers_Tryjob_RetryConfig) ProtoMessage() {}
func (x *Verifiers_Tryjob_RetryConfig) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[23]
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 Verifiers_Tryjob_RetryConfig.ProtoReflect.Descriptor instead.
func (*Verifiers_Tryjob_RetryConfig) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{5, 2, 3}
}
func (x *Verifiers_Tryjob_RetryConfig) GetSingleQuota() int32 {
if x != nil {
return x.SingleQuota
}
return 0
}
func (x *Verifiers_Tryjob_RetryConfig) GetGlobalQuota() int32 {
if x != nil {
return x.GlobalQuota
}
return 0
}
func (x *Verifiers_Tryjob_RetryConfig) GetFailureWeight() int32 {
if x != nil {
return x.FailureWeight
}
return 0
}
func (x *Verifiers_Tryjob_RetryConfig) GetTransientFailureWeight() int32 {
if x != nil {
return x.TransientFailureWeight
}
return 0
}
func (x *Verifiers_Tryjob_RetryConfig) GetTimeoutWeight() int32 {
if x != nil {
return x.TimeoutWeight
}
return 0
}
// Optional. Require this builder only if a file in the CL is included
// by location_filters.
//
// location_filters is an ordered list of LocationFilter messages, where
// each message includes regular expressions for the matching Gerrit
// host, Gerrit project and file path, as well as a boolean field to
// specify whether the filter is an exclude filter or not.
//
// Files "in the CL" means all files touched, i.e. added, modified or
// deleted.
//
// The Gerrit host, Gerrit project and file path are matched against the
// respective patterns in the LocationFilter. The last LocationFilter
// that match all patterns (host, project, and path) determines whether
// the file is considered included, i.e. if the last matching
// LocationFilter has exclude set to false, then it's included; else
// included.
//
// If none of the LocationFilters match, then the file is considered
// included if the first rule is an exclude rule; else the file is
// excluded.
//
// If host, project or path are empty, then they will match anything
// (".*") by default. The comparison is a full match; the pattern is
// implicitly anchored with "^" and "$", so there is no need add them.
// The syntax for regular expressions is Google's re2 syntax for regexp,
// documented here: https://github.com/google/re2/wiki/Syntax.
//
// If location_filters is non-empty, and no file in a CL is included by
// location_filters, then this builder will not be triggered. If
// location_filters is empty or not specified, then the builder will be
// triggered by default, subject to other conditions, e.g.
// mode_allowlist.
//
// This option currently can not be combined with the
// `GerritCQAbility.allow_submit_with_open_deps` option.
// If you need to combine, please talk to LUCI CV owners.
// (https://chromium.googlesource.com/infra/luci/luci-go/+/HEAD/cv/OWNERS)
//
// Examples:
//
// location_filters: {path_regexp: "excluded/.+", exclude: true}
// location_filters: {path_regexp: "excluded/exception", exclude: false}
//
// Result: files outside of the "excluded" directory will be
// included, and so will "excluded/exception" will, but other files
// in the "excluded" directory will not match.
//
// location_filters: {path_regexp: ".*", exclude: false} // include all by default
// location_filters: {host_regexp: "example.com",
// project_regexp: "repo",
// exclude: true}
// location_filters: {host_regexp: "example.com",
// project_regexp: "repo",
// path_regexp: "all/one.txt",
// exclude: false}
//
// Result: files in the specified host and repo will not be included,
// except all/one.txt which will be included; files outside of the
// given host/repo will be included.
type Verifiers_Tryjob_Builder_LocationFilter struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Pattern to match Gerrit host. Does not include scheme, which is
// always assumed to be "https://".
GerritHostRegexp string `protobuf:"bytes,1,opt,name=gerrit_host_regexp,json=gerritHostRegexp,proto3" json:"gerrit_host_regexp,omitempty"`
// Pattern to match Gerrit project, e.g. "infra/luci/luci-go".
GerritProjectRegexp string `protobuf:"bytes,2,opt,name=gerrit_project_regexp,json=gerritProjectRegexp,proto3" json:"gerrit_project_regexp,omitempty"`
// Pattern to match file path. This is a relative path from repo root
// (no starting slash).
PathRegexp string `protobuf:"bytes,3,opt,name=path_regexp,json=pathRegexp,proto3" json:"path_regexp,omitempty"`
// If exclude is true, then if this filter matches a file, the file is
// considered not included. (If all files are not included, then the
// builder is not triggered.)
Exclude bool `protobuf:"varint,4,opt,name=exclude,proto3" json:"exclude,omitempty"`
}
func (x *Verifiers_Tryjob_Builder_LocationFilter) Reset() {
*x = Verifiers_Tryjob_Builder_LocationFilter{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Verifiers_Tryjob_Builder_LocationFilter) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Verifiers_Tryjob_Builder_LocationFilter) ProtoMessage() {}
func (x *Verifiers_Tryjob_Builder_LocationFilter) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[24]
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 Verifiers_Tryjob_Builder_LocationFilter.ProtoReflect.Descriptor instead.
func (*Verifiers_Tryjob_Builder_LocationFilter) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{5, 2, 0, 0}
}
func (x *Verifiers_Tryjob_Builder_LocationFilter) GetGerritHostRegexp() string {
if x != nil {
return x.GerritHostRegexp
}
return ""
}
func (x *Verifiers_Tryjob_Builder_LocationFilter) GetGerritProjectRegexp() string {
if x != nil {
return x.GerritProjectRegexp
}
return ""
}
func (x *Verifiers_Tryjob_Builder_LocationFilter) GetPathRegexp() string {
if x != nil {
return x.PathRegexp
}
return ""
}
func (x *Verifiers_Tryjob_Builder_LocationFilter) GetExclude() bool {
if x != nil {
return x.Exclude
}
return false
}
type UserLimit_Limit struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. value must be > 0, unless unlimited is set to True.
//
// Types that are assignable to Limit:
//
// *UserLimit_Limit_Value
// *UserLimit_Limit_Unlimited
Limit isUserLimit_Limit_Limit `protobuf_oneof:"limit"`
}
func (x *UserLimit_Limit) Reset() {
*x = UserLimit_Limit{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[25]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UserLimit_Limit) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UserLimit_Limit) ProtoMessage() {}
func (x *UserLimit_Limit) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[25]
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 UserLimit_Limit.ProtoReflect.Descriptor instead.
func (*UserLimit_Limit) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{6, 0}
}
func (m *UserLimit_Limit) GetLimit() isUserLimit_Limit_Limit {
if m != nil {
return m.Limit
}
return nil
}
func (x *UserLimit_Limit) GetValue() int64 {
if x, ok := x.GetLimit().(*UserLimit_Limit_Value); ok {
return x.Value
}
return 0
}
func (x *UserLimit_Limit) GetUnlimited() bool {
if x, ok := x.GetLimit().(*UserLimit_Limit_Unlimited); ok {
return x.Unlimited
}
return false
}
type isUserLimit_Limit_Limit interface {
isUserLimit_Limit_Limit()
}
type UserLimit_Limit_Value struct {
Value int64 `protobuf:"varint,1,opt,name=value,proto3,oneof"`
}
type UserLimit_Limit_Unlimited struct {
Unlimited bool `protobuf:"varint,2,opt,name=unlimited,proto3,oneof"`
}
func (*UserLimit_Limit_Value) isUserLimit_Limit_Limit() {}
func (*UserLimit_Limit_Unlimited) isUserLimit_Limit_Limit() {}
type UserLimit_Run struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Maximum number of active runs that the user can have at any moment.
//
// Required. Active Run is a Run that has started but not ended yet.
MaxActive *UserLimit_Limit `protobuf:"bytes,1,opt,name=max_active,json=maxActive,proto3" json:"max_active,omitempty"`
// Optional custom message appended to the end of the quota exhaustion
// message posted to gerrit.
ReachLimitMsg string `protobuf:"bytes,2,opt,name=reach_limit_msg,json=reachLimitMsg,proto3" json:"reach_limit_msg,omitempty"`
}
func (x *UserLimit_Run) Reset() {
*x = UserLimit_Run{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[26]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UserLimit_Run) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UserLimit_Run) ProtoMessage() {}
func (x *UserLimit_Run) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[26]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UserLimit_Run.ProtoReflect.Descriptor instead.
func (*UserLimit_Run) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{6, 1}
}
func (x *UserLimit_Run) GetMaxActive() *UserLimit_Limit {
if x != nil {
return x.MaxActive
}
return nil
}
func (x *UserLimit_Run) GetReachLimitMsg() string {
if x != nil {
return x.ReachLimitMsg
}
return ""
}
type UserLimit_Tryjob struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Maximum number of active tryjobs that the user can have at any
// moment.
//
// Active tryjob is a tryjob that CV has successfully launched,
// and has not ended yet from CV's point of view. Also, optional
// tryjobs, which are experimental tryjobs that were not explicitly
// requested via the git footer, are not counted as active tryjobs.
//
// Note that counting active tryjobs and launching tryjobs are not
// atomic operations. So, # of active tryjobs may not match # of
// the successfully launched tryjobs for a short period, but will
// match eventually.
//
// If not specified, an unlimited number of active Tryjobs are allowed.
MaxActive *UserLimit_Limit `protobuf:"bytes,1,opt,name=max_active,json=maxActive,proto3" json:"max_active,omitempty"`
}
func (x *UserLimit_Tryjob) Reset() {
*x = UserLimit_Tryjob{}
if protoimpl.UnsafeEnabled {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[27]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UserLimit_Tryjob) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UserLimit_Tryjob) ProtoMessage() {}
func (x *UserLimit_Tryjob) ProtoReflect() protoreflect.Message {
mi := &file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[27]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UserLimit_Tryjob.ProtoReflect.Descriptor instead.
func (*UserLimit_Tryjob) Descriptor() ([]byte, []int) {
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP(), []int{6, 2}
}
func (x *UserLimit_Tryjob) GetMaxActive() *UserLimit_Limit {
if x != nil {
return x.MaxActive
}
return nil
}
var File_go_chromium_org_luci_cv_api_config_v2_config_proto protoreflect.FileDescriptor
var file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDesc = []byte{
0x0a, 0x32, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72,
0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x63, 0x76, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a,
0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72,
0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x63,
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x70, 0x74, 0x69,
0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x28, 0x67, 0x6f, 0x2e, 0x63, 0x68,
0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f,
0x63, 0x76, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x22, 0xb1, 0x02, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x32,
0x0a, 0x13, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74,
0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52,
0x11, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69,
0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0e, 0x63, 0x71, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f,
0x68, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c,
0x63, 0x71, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0e,
0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d,
0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3b, 0x0a,
0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x04,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0c, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x4b, 0x0a, 0x16, 0x70, 0x72,
0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x63, 0x76, 0x2e,
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x42, 0x02, 0x18,
0x01, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64,
0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xae, 0x0c, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x67,
0x65, 0x72, 0x72, 0x69, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x76,
0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x72,
0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x52, 0x06, 0x67, 0x65, 0x72, 0x72,
0x69, 0x74, 0x12, 0x36, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x5f, 0x63, 0x6c,
0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x43, 0x4c, 0x73, 0x52, 0x0a,
0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x43, 0x6c, 0x73, 0x12, 0x32, 0x0a, 0x09, 0x76, 0x65,
0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e,
0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69,
0x65, 0x72, 0x73, 0x52, 0x09, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x2d,
0x0a, 0x08, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e,
0x32, 0x11, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x6f, 0x67,
0x67, 0x6c, 0x65, 0x52, 0x08, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x3a, 0x0a,
0x10, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x6f, 0x64, 0x65,
0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69,
0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x0b, 0x75, 0x73, 0x65,
0x72, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14,
0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c,
0x69, 0x6d, 0x69, 0x74, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73,
0x12, 0x42, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x64,
0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63,
0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x6d,
0x69, 0x74, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x44, 0x65, 0x66,
0x61, 0x75, 0x6c, 0x74, 0x12, 0x53, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x76, 0x2e,
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x72, 0x6f,
0x75, 0x70, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0d, 0xfa,
0x42, 0x0a, 0x92, 0x01, 0x07, 0x22, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x70, 0x6f,
0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x65, 0x0a, 0x12, 0x74, 0x72, 0x79,
0x6a, 0x6f, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18,
0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x54, 0x72,
0x79, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x0d,
0xfa, 0x42, 0x0a, 0x92, 0x01, 0x07, 0x22, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x11, 0x74,
0x72, 0x79, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73,
0x1a, 0xc9, 0x01, 0x0a, 0x06, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75,
0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x41, 0x0a,
0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x25, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x2e, 0x50,
0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73,
0x1a, 0x6a, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x18, 0x02, 0x20,
0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, 0x67, 0x65, 0x78, 0x70, 0x12, 0x2c,
0x0a, 0x12, 0x72, 0x65, 0x66, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x5f, 0x65, 0x78, 0x63,
0x6c, 0x75, 0x64, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, 0x66, 0x52,
0x65, 0x67, 0x65, 0x78, 0x70, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x1a, 0xa1, 0x04, 0x0a,
0x0a, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02,
0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x66, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64,
0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63,
0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47,
0x72, 0x6f, 0x75, 0x70, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74,
0x69, 0x6f, 0x6e, 0x42, 0x0f, 0xfa, 0x42, 0x0c, 0x92, 0x01, 0x09, 0x08, 0x01, 0x22, 0x05, 0x8a,
0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73,
0x12, 0x62, 0x0a, 0x12, 0x76, 0x6f, 0x74, 0x65, 0x5f, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x5f,
0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63,
0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47,
0x72, 0x6f, 0x75, 0x70, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
0x56, 0x6f, 0x74, 0x65, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73,
0x48, 0x00, 0x52, 0x10, 0x76, 0x6f, 0x74, 0x65, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x4c, 0x61,
0x62, 0x65, 0x6c, 0x73, 0x1a, 0x72, 0x0a, 0x13, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x69,
0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x04, 0x6d,
0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02,
0x10, 0x01, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74,
0x75, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x63, 0x76, 0x2e,
0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x0f, 0xfa,
0x42, 0x0c, 0x92, 0x01, 0x09, 0x08, 0x01, 0x22, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08,
0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x1a, 0xa6, 0x01, 0x0a, 0x10, 0x56, 0x6f, 0x74,
0x65, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x57, 0x0a,
0x05, 0x76, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63,
0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47,
0x72, 0x6f, 0x75, 0x70, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
0x56, 0x6f, 0x74, 0x65, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73,
0x2e, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52,
0x05, 0x76, 0x6f, 0x74, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x1b,
0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42,
0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x42, 0x0d, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x03, 0xf8, 0x42, 0x01,
0x1a, 0xcf, 0x01, 0x0a, 0x10, 0x54, 0x72, 0x79, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x70, 0x65, 0x72,
0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x12, 0x4f, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x54, 0x72,
0x79, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43,
0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74,
0x69, 0x6f, 0x6e, 0x1a, 0x4d, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e,
0x12, 0x40, 0x0a, 0x15, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f,
0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42,
0x0c, 0xfa, 0x42, 0x09, 0x92, 0x01, 0x06, 0x22, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x13, 0x6f,
0x77, 0x6e, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x6c, 0x69,
0x73, 0x74, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x68, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x6d,
0x69, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78,
0x5f, 0x62, 0x75, 0x72, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61,
0x78, 0x42, 0x75, 0x72, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0b, 0x62, 0x75, 0x72, 0x73, 0x74, 0x5f,
0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75,
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x62, 0x75, 0x72, 0x73, 0x74, 0x44, 0x65, 0x6c,
0x61, 0x79, 0x22, 0x82, 0x02, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x53, 0x0a, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3f, 0xfa, 0x42, 0x3c, 0x72, 0x3a,
0x32, 0x13, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x5d, 0x5b, 0x41, 0x2d, 0x5a, 0x5f, 0x5d, 0x7b, 0x30,
0x2c, 0x33, 0x39, 0x7d, 0x24, 0x5a, 0x07, 0x44, 0x52, 0x59, 0x5f, 0x52, 0x55, 0x4e, 0x5a, 0x08,
0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x52, 0x55, 0x4e, 0x5a, 0x10, 0x4e, 0x45, 0x57, 0x5f, 0x50, 0x41,
0x54, 0x43, 0x48, 0x53, 0x45, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
0x12, 0x2f, 0x0a, 0x0e, 0x63, 0x71, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x76, 0x61, 0x6c,
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x1a, 0x04, 0x30,
0x01, 0x30, 0x02, 0x52, 0x0c, 0x63, 0x71, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x56, 0x61, 0x6c, 0x75,
0x65, 0x12, 0x40, 0x0a, 0x10, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x5f,
0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x15, 0xfa, 0x42, 0x12,
0x72, 0x10, 0x10, 0x01, 0x5a, 0x0c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x2d, 0x51, 0x75, 0x65,
0x75, 0x65, 0x52, 0x0f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x61,
0x62, 0x65, 0x6c, 0x12, 0x32, 0x0a, 0x10, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x69, 0x6e,
0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xfa,
0x42, 0x04, 0x1a, 0x02, 0x20, 0x00, 0x52, 0x0f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x69,
0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x58, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x62, 0x69,
0x6e, 0x65, 0x43, 0x4c, 0x73, 0x12, 0x4a, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69,
0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x73,
0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x61,
0x79, 0x22, 0x9e, 0x12, 0x0a, 0x09, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12,
0x50, 0x0a, 0x11, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x5f, 0x63, 0x71, 0x5f, 0x61, 0x62, 0x69,
0x6c, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x76, 0x2e,
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73,
0x2e, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x43, 0x51, 0x41, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
0x52, 0x0f, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x43, 0x71, 0x41, 0x62, 0x69, 0x6c, 0x69, 0x74,
0x79, 0x12, 0x40, 0x0a, 0x0b, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x2e, 0x54, 0x72, 0x65,
0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0a, 0x74, 0x72, 0x65, 0x65, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x12, 0x33, 0x0a, 0x06, 0x74, 0x72, 0x79, 0x6a, 0x6f, 0x62, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x2e, 0x54, 0x72, 0x79, 0x6a, 0x6f, 0x62,
0x52, 0x06, 0x74, 0x72, 0x79, 0x6a, 0x6f, 0x62, 0x12, 0x39, 0x0a, 0x08, 0x63, 0x71, 0x6c, 0x69,
0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x76, 0x2e,
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73,
0x2e, 0x43, 0x51, 0x4c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, 0x71, 0x6c, 0x69, 0x6e,
0x74, 0x65, 0x72, 0x12, 0x2d, 0x0a, 0x04, 0x66, 0x61, 0x6b, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x19, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65,
0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x2e, 0x46, 0x61, 0x6b, 0x65, 0x52, 0x04, 0x66, 0x61,
0x6b, 0x65, 0x1a, 0xf0, 0x03, 0x0a, 0x0f, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x43, 0x51, 0x41,
0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
0x74, 0x65, 0x72, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d,
0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2d, 0x0a,
0x13, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f,
0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x64, 0x72, 0x79, 0x52,
0x75, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x1c,
0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x73, 0x65, 0x74, 0x5f, 0x72, 0x75, 0x6e,
0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03,
0x28, 0x09, 0x52, 0x18, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x74, 0x63, 0x68, 0x73, 0x65, 0x74, 0x52,
0x75, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x1b,
0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5f, 0x77, 0x69, 0x74,
0x68, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
0x08, 0x52, 0x17, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x57, 0x69,
0x74, 0x68, 0x4f, 0x70, 0x65, 0x6e, 0x44, 0x65, 0x70, 0x73, 0x12, 0x6a, 0x0a, 0x1a, 0x61, 0x6c,
0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x75, 0x62,
0x6d, 0x69, 0x74, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d,
0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66,
0x69, 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x43, 0x51, 0x41, 0x62, 0x69,
0x6c, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x51, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x61,
0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x66, 0x53, 0x75, 0x62, 0x6d, 0x69,
0x74, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x72, 0x75, 0x73, 0x74, 0x5f,
0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18,
0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x74, 0x72, 0x75, 0x73, 0x74, 0x44, 0x72, 0x79, 0x52,
0x75, 0x6e, 0x6e, 0x65, 0x72, 0x44, 0x65, 0x70, 0x73, 0x12, 0x3a, 0x0a, 0x1a, 0x61, 0x6c, 0x6c,
0x6f, 0x77, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x64, 0x72, 0x79,
0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x61,
0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x6f, 0x6e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x44, 0x72, 0x79, 0x52,
0x75, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x2e, 0x0a, 0x08, 0x43, 0x51, 0x41, 0x63, 0x74, 0x69, 0x6f,
0x6e, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07,
0x44, 0x52, 0x59, 0x5f, 0x52, 0x55, 0x4e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d,
0x4d, 0x49, 0x54, 0x10, 0x02, 0x1a, 0x1e, 0x0a, 0x0a, 0x54, 0x72, 0x65, 0x65, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x03, 0x75, 0x72, 0x6c, 0x1a, 0xe5, 0x0a, 0x0a, 0x06, 0x54, 0x72, 0x79, 0x6a, 0x6f, 0x62,
0x12, 0x3f, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56,
0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x2e, 0x54, 0x72, 0x79, 0x6a, 0x6f, 0x62, 0x2e,
0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72,
0x73, 0x12, 0x4a, 0x0a, 0x0c, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x2e, 0x54, 0x72,
0x79, 0x6a, 0x6f, 0x62, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x52, 0x0b, 0x72, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x47, 0x0a,
0x14, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x5f, 0x74, 0x72,
0x79, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x63, 0x76,
0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x42, 0x02,
0x18, 0x01, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x6c, 0x65, 0x54,
0x72, 0x79, 0x6a, 0x6f, 0x62, 0x73, 0x1a, 0x80, 0x06, 0x0a, 0x07, 0x42, 0x75, 0x69, 0x6c, 0x64,
0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09,
0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e,
0x63, 0x6c, 0x75, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x09, 0x20,
0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4f,
0x6e, 0x6c, 0x79, 0x12, 0x44, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x69,
0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17,
0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65,
0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x10, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x56,
0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x69, 0x73,
0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x75, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08,
0x52, 0x0c, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x75, 0x73, 0x65, 0x12, 0x34,
0x0a, 0x0c, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x18, 0x0b,
0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x52, 0x0b, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53,
0x74, 0x61, 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65,
0x6e, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20,
0x01, 0x28, 0x02, 0x52, 0x14, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x50,
0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x65, 0x71, 0x75,
0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x2d, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72,
0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x2e, 0x54, 0x72, 0x79, 0x6a, 0x6f, 0x62, 0x2e, 0x45, 0x71,
0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x52,
0x0c, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x12, 0x5d, 0x0a,
0x10, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72,
0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x2e, 0x54, 0x72,
0x79, 0x6a, 0x6f, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x4c, 0x6f, 0x63,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x0f, 0x6c, 0x6f, 0x63,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x32, 0x0a, 0x15,
0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x5f,
0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x6f, 0x77, 0x6e,
0x65, 0x72, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70,
0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x6c, 0x69,
0x73, 0x74, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x6f, 0x64, 0x65, 0x41, 0x6c,
0x6c, 0x6f, 0x77, 0x6c, 0x69, 0x73, 0x74, 0x1a, 0xad, 0x01, 0x0a, 0x0e, 0x4c, 0x6f, 0x63, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x67, 0x65,
0x72, 0x72, 0x69, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x48, 0x6f,
0x73, 0x74, 0x52, 0x65, 0x67, 0x65, 0x78, 0x70, 0x12, 0x32, 0x0a, 0x15, 0x67, 0x65, 0x72, 0x72,
0x69, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78,
0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x50,
0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x67, 0x65, 0x78, 0x70, 0x12, 0x1f, 0x0a, 0x0b,
0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0a, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x67, 0x65, 0x78, 0x70, 0x12, 0x18, 0x0a,
0x07, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08,
0x0c, 0x10, 0x0d, 0x4a, 0x04, 0x08, 0x0d, 0x10, 0x0e, 0x1a, 0x7b, 0x0a, 0x11, 0x45, 0x71, 0x75,
0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x12,
0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61,
0x67, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x77, 0x68, 0x69, 0x74,
0x65, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x13, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73,
0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x27, 0x0a, 0x11, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64,
0x61, 0x62, 0x6c, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x1a,
0xdb, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x51, 0x75, 0x6f,
0x74, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x71, 0x75, 0x6f,
0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x51, 0x75, 0x6f, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65,
0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x66,
0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x38, 0x0a, 0x18,
0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72,
0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16,
0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x65, 0x6e, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65,
0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75,
0x74, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d,
0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x1a, 0x0a, 0x0a,
0x08, 0x43, 0x51, 0x4c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x1a, 0x57, 0x0a, 0x04, 0x46, 0x61, 0x6b,
0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x61,
0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65,
0x76, 0x65, 0x6e, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05,
0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x64, 0x65, 0x6c,
0x61, 0x79, 0x22, 0x99, 0x03, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74,
0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61,
0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69,
0x70, 0x61, 0x6c, 0x73, 0x12, 0x2a, 0x0a, 0x03, 0x72, 0x75, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x18, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x55, 0x73,
0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x52, 0x75, 0x6e, 0x52, 0x03, 0x72, 0x75, 0x6e,
0x12, 0x33, 0x0a, 0x06, 0x74, 0x72, 0x79, 0x6a, 0x6f, 0x62, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x1b, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x55, 0x73, 0x65,
0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x54, 0x72, 0x79, 0x6a, 0x6f, 0x62, 0x52, 0x06, 0x74,
0x72, 0x79, 0x6a, 0x6f, 0x62, 0x1a, 0x48, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16,
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x09, 0x75, 0x6e, 0x6c, 0x69, 0x6d, 0x69,
0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x75, 0x6e, 0x6c,
0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x1a,
0x68, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x63,
0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x76, 0x2e,
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74,
0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x41, 0x63, 0x74, 0x69, 0x76,
0x65, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, 0x61, 0x63, 0x68, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74,
0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x61, 0x63,
0x68, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4d, 0x73, 0x67, 0x1a, 0x43, 0x0a, 0x06, 0x54, 0x72, 0x79,
0x6a, 0x6f, 0x62, 0x12, 0x39, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76,
0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x76, 0x2e, 0x63, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x4c, 0x69,
0x6d, 0x69, 0x74, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2a, 0x5d,
0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x17,
0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f,
0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4f, 0x4d, 0x4d, 0x45,
0x4e, 0x54, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x01, 0x12,
0x1c, 0x0a, 0x18, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c,
0x5f, 0x52, 0x45, 0x53, 0x54, 0x52, 0x49, 0x43, 0x54, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x24, 0x0a,
0x06, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x4e, 0x53, 0x45, 0x54,
0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x59, 0x45, 0x53, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4e,
0x4f, 0x10, 0x02, 0x42, 0x6c, 0xa2, 0xfe, 0x23, 0x3b, 0x0a, 0x39, 0x68, 0x74, 0x74, 0x70, 0x73,
0x3a, 0x2f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61,
0x70, 0x70, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65,
0x63, 0x74, 0x73, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x2d, 0x71, 0x75, 0x65, 0x75, 0x65,
0x2e, 0x63, 0x66, 0x67, 0x5a, 0x2b, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x63, 0x76, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x66, 0x67, 0x70,
0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescOnce sync.Once
file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescData = file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDesc
)
func file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescGZIP() []byte {
file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescOnce.Do(func() {
file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescData)
})
return file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDescData
}
var file_go_chromium_org_luci_cv_api_config_v2_config_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
var file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes = make([]protoimpl.MessageInfo, 28)
var file_go_chromium_org_luci_cv_api_config_v2_config_proto_goTypes = []interface{}{
(CommentLevel)(0), // 0: cv.config.CommentLevel
(Toggle)(0), // 1: cv.config.Toggle
(Verifiers_GerritCQAbility_CQAction)(0), // 2: cv.config.Verifiers.GerritCQAbility.CQAction
(*Config)(nil), // 3: cv.config.Config
(*ConfigGroup)(nil), // 4: cv.config.ConfigGroup
(*SubmitOptions)(nil), // 5: cv.config.SubmitOptions
(*Mode)(nil), // 6: cv.config.Mode
(*CombineCLs)(nil), // 7: cv.config.CombineCLs
(*Verifiers)(nil), // 8: cv.config.Verifiers
(*UserLimit)(nil), // 9: cv.config.UserLimit
(*ConfigGroup_Gerrit)(nil), // 10: cv.config.ConfigGroup.Gerrit
(*ConfigGroup_PostAction)(nil), // 11: cv.config.ConfigGroup.PostAction
(*ConfigGroup_TryjobExperiment)(nil), // 12: cv.config.ConfigGroup.TryjobExperiment
(*ConfigGroup_Gerrit_Project)(nil), // 13: cv.config.ConfigGroup.Gerrit.Project
(*ConfigGroup_PostAction_TriggeringCondition)(nil), // 14: cv.config.ConfigGroup.PostAction.TriggeringCondition
(*ConfigGroup_PostAction_VoteGerritLabels)(nil), // 15: cv.config.ConfigGroup.PostAction.VoteGerritLabels
(*ConfigGroup_PostAction_VoteGerritLabels_Vote)(nil), // 16: cv.config.ConfigGroup.PostAction.VoteGerritLabels.Vote
(*ConfigGroup_TryjobExperiment_Condition)(nil), // 17: cv.config.ConfigGroup.TryjobExperiment.Condition
(*Verifiers_GerritCQAbility)(nil), // 18: cv.config.Verifiers.GerritCQAbility
(*Verifiers_TreeStatus)(nil), // 19: cv.config.Verifiers.TreeStatus
(*Verifiers_Tryjob)(nil), // 20: cv.config.Verifiers.Tryjob
(*Verifiers_CQLinter)(nil), // 21: cv.config.Verifiers.CQLinter
(*Verifiers_Fake)(nil), // 22: cv.config.Verifiers.Fake
(*Verifiers_Tryjob_Builder)(nil), // 23: cv.config.Verifiers.Tryjob.Builder
(*Verifiers_Tryjob_EquivalentBuilder)(nil), // 24: cv.config.Verifiers.Tryjob.EquivalentBuilder
(*Verifiers_Tryjob_IncludableBuilder)(nil), // 25: cv.config.Verifiers.Tryjob.IncludableBuilder
(*Verifiers_Tryjob_RetryConfig)(nil), // 26: cv.config.Verifiers.Tryjob.RetryConfig
(*Verifiers_Tryjob_Builder_LocationFilter)(nil), // 27: cv.config.Verifiers.Tryjob.Builder.LocationFilter
(*UserLimit_Limit)(nil), // 28: cv.config.UserLimit.Limit
(*UserLimit_Run)(nil), // 29: cv.config.UserLimit.Run
(*UserLimit_Tryjob)(nil), // 30: cv.config.UserLimit.Tryjob
(*durationpb.Duration)(nil), // 31: google.protobuf.Duration
(v1.Run_Status)(0), // 32: cv.v1.Run.Status
}
var file_go_chromium_org_luci_cv_api_config_v2_config_proto_depIdxs = []int32{
5, // 0: cv.config.Config.submit_options:type_name -> cv.config.SubmitOptions
4, // 1: cv.config.Config.config_groups:type_name -> cv.config.ConfigGroup
1, // 2: cv.config.Config.project_scoped_account:type_name -> cv.config.Toggle
10, // 3: cv.config.ConfigGroup.gerrit:type_name -> cv.config.ConfigGroup.Gerrit
7, // 4: cv.config.ConfigGroup.combine_cls:type_name -> cv.config.CombineCLs
8, // 5: cv.config.ConfigGroup.verifiers:type_name -> cv.config.Verifiers
1, // 6: cv.config.ConfigGroup.fallback:type_name -> cv.config.Toggle
6, // 7: cv.config.ConfigGroup.additional_modes:type_name -> cv.config.Mode
9, // 8: cv.config.ConfigGroup.user_limits:type_name -> cv.config.UserLimit
9, // 9: cv.config.ConfigGroup.user_limit_default:type_name -> cv.config.UserLimit
11, // 10: cv.config.ConfigGroup.post_actions:type_name -> cv.config.ConfigGroup.PostAction
12, // 11: cv.config.ConfigGroup.tryjob_experiments:type_name -> cv.config.ConfigGroup.TryjobExperiment
31, // 12: cv.config.SubmitOptions.burst_delay:type_name -> google.protobuf.Duration
31, // 13: cv.config.CombineCLs.stabilization_delay:type_name -> google.protobuf.Duration
18, // 14: cv.config.Verifiers.gerrit_cq_ability:type_name -> cv.config.Verifiers.GerritCQAbility
19, // 15: cv.config.Verifiers.tree_status:type_name -> cv.config.Verifiers.TreeStatus
20, // 16: cv.config.Verifiers.tryjob:type_name -> cv.config.Verifiers.Tryjob
21, // 17: cv.config.Verifiers.cqlinter:type_name -> cv.config.Verifiers.CQLinter
22, // 18: cv.config.Verifiers.fake:type_name -> cv.config.Verifiers.Fake
29, // 19: cv.config.UserLimit.run:type_name -> cv.config.UserLimit.Run
30, // 20: cv.config.UserLimit.tryjob:type_name -> cv.config.UserLimit.Tryjob
13, // 21: cv.config.ConfigGroup.Gerrit.projects:type_name -> cv.config.ConfigGroup.Gerrit.Project
14, // 22: cv.config.ConfigGroup.PostAction.conditions:type_name -> cv.config.ConfigGroup.PostAction.TriggeringCondition
15, // 23: cv.config.ConfigGroup.PostAction.vote_gerrit_labels:type_name -> cv.config.ConfigGroup.PostAction.VoteGerritLabels
17, // 24: cv.config.ConfigGroup.TryjobExperiment.condition:type_name -> cv.config.ConfigGroup.TryjobExperiment.Condition
32, // 25: cv.config.ConfigGroup.PostAction.TriggeringCondition.statuses:type_name -> cv.v1.Run.Status
16, // 26: cv.config.ConfigGroup.PostAction.VoteGerritLabels.votes:type_name -> cv.config.ConfigGroup.PostAction.VoteGerritLabels.Vote
2, // 27: cv.config.Verifiers.GerritCQAbility.allow_owner_if_submittable:type_name -> cv.config.Verifiers.GerritCQAbility.CQAction
23, // 28: cv.config.Verifiers.Tryjob.builders:type_name -> cv.config.Verifiers.Tryjob.Builder
26, // 29: cv.config.Verifiers.Tryjob.retry_config:type_name -> cv.config.Verifiers.Tryjob.RetryConfig
1, // 30: cv.config.Verifiers.Tryjob.cancel_stale_tryjobs:type_name -> cv.config.Toggle
0, // 31: cv.config.Verifiers.Tryjob.Builder.result_visibility:type_name -> cv.config.CommentLevel
1, // 32: cv.config.Verifiers.Tryjob.Builder.cancel_stale:type_name -> cv.config.Toggle
24, // 33: cv.config.Verifiers.Tryjob.Builder.equivalent_to:type_name -> cv.config.Verifiers.Tryjob.EquivalentBuilder
27, // 34: cv.config.Verifiers.Tryjob.Builder.location_filters:type_name -> cv.config.Verifiers.Tryjob.Builder.LocationFilter
28, // 35: cv.config.UserLimit.Run.max_active:type_name -> cv.config.UserLimit.Limit
28, // 36: cv.config.UserLimit.Tryjob.max_active:type_name -> cv.config.UserLimit.Limit
37, // [37:37] is the sub-list for method output_type
37, // [37:37] is the sub-list for method input_type
37, // [37:37] is the sub-list for extension type_name
37, // [37:37] is the sub-list for extension extendee
0, // [0:37] is the sub-list for field type_name
}
func init() { file_go_chromium_org_luci_cv_api_config_v2_config_proto_init() }
func file_go_chromium_org_luci_cv_api_config_v2_config_proto_init() {
if File_go_chromium_org_luci_cv_api_config_v2_config_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Config); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ConfigGroup); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SubmitOptions); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Mode); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CombineCLs); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Verifiers); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UserLimit); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ConfigGroup_Gerrit); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ConfigGroup_PostAction); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ConfigGroup_TryjobExperiment); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ConfigGroup_Gerrit_Project); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ConfigGroup_PostAction_TriggeringCondition); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ConfigGroup_PostAction_VoteGerritLabels); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ConfigGroup_PostAction_VoteGerritLabels_Vote); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ConfigGroup_TryjobExperiment_Condition); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Verifiers_GerritCQAbility); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Verifiers_TreeStatus); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Verifiers_Tryjob); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Verifiers_CQLinter); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Verifiers_Fake); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Verifiers_Tryjob_Builder); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Verifiers_Tryjob_EquivalentBuilder); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Verifiers_Tryjob_IncludableBuilder); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Verifiers_Tryjob_RetryConfig); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Verifiers_Tryjob_Builder_LocationFilter); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UserLimit_Limit); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UserLimit_Run); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UserLimit_Tryjob); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[8].OneofWrappers = []interface{}{
(*ConfigGroup_PostAction_VoteGerritLabels_)(nil),
}
file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes[25].OneofWrappers = []interface{}{
(*UserLimit_Limit_Value)(nil),
(*UserLimit_Limit_Unlimited)(nil),
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDesc,
NumEnums: 3,
NumMessages: 28,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_go_chromium_org_luci_cv_api_config_v2_config_proto_goTypes,
DependencyIndexes: file_go_chromium_org_luci_cv_api_config_v2_config_proto_depIdxs,
EnumInfos: file_go_chromium_org_luci_cv_api_config_v2_config_proto_enumTypes,
MessageInfos: file_go_chromium_org_luci_cv_api_config_v2_config_proto_msgTypes,
}.Build()
File_go_chromium_org_luci_cv_api_config_v2_config_proto = out.File
file_go_chromium_org_luci_cv_api_config_v2_config_proto_rawDesc = nil
file_go_chromium_org_luci_cv_api_config_v2_config_proto_goTypes = nil
file_go_chromium_org_luci_cv_api_config_v2_config_proto_depIdxs = nil
}