| // Code generated by protoc-gen-go. DO NOT EDIT. |
| // source: go.chromium.org/luci/cq/api/config/v2/cq.proto |
| |
| package config |
| |
| import ( |
| fmt "fmt" |
| proto "github.com/golang/protobuf/proto" |
| duration "github.com/golang/protobuf/ptypes/duration" |
| math "math" |
| ) |
| |
| // Reference imports to suppress errors if they are not otherwise used. |
| var _ = proto.Marshal |
| var _ = fmt.Errorf |
| var _ = math.Inf |
| |
| // This is a compile-time assertion to ensure that this generated file |
| // is compatible with the proto package it is being compiled against. |
| // A compilation error at this line likely means your copy of the |
| // proto package needs to be updated. |
| const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package |
| |
| // A boolean with an undefined value. |
| type Toggle int32 |
| |
| const ( |
| Toggle_UNSET Toggle = 0 |
| Toggle_YES Toggle = 1 |
| Toggle_NO Toggle = 2 |
| ) |
| |
| var Toggle_name = map[int32]string{ |
| 0: "UNSET", |
| 1: "YES", |
| 2: "NO", |
| } |
| |
| var Toggle_value = map[string]int32{ |
| "UNSET": 0, |
| "YES": 1, |
| "NO": 2, |
| } |
| |
| func (x Toggle) String() string { |
| return proto.EnumName(Toggle_name, int32(x)) |
| } |
| |
| func (Toggle) EnumDescriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{0} |
| } |
| |
| // 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 |
| ) |
| |
| var Verifiers_GerritCQAbility_CQAction_name = map[int32]string{ |
| 0: "UNSET", |
| 1: "DRY_RUN", |
| 2: "COMMIT", |
| } |
| |
| var Verifiers_GerritCQAbility_CQAction_value = map[string]int32{ |
| "UNSET": 0, |
| "DRY_RUN": 1, |
| "COMMIT": 2, |
| } |
| |
| func (x Verifiers_GerritCQAbility_CQAction) String() string { |
| return proto.EnumName(Verifiers_GerritCQAbility_CQAction_name, int32(x)) |
| } |
| |
| func (Verifiers_GerritCQAbility_CQAction) EnumDescriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{4, 0, 0} |
| } |
| |
| // This message describes a Commit Queue configuration. |
| // |
| // The config file commit-queue.cfg should be stored in the config directory of your |
| // project, alongside cr-buildbucket.cfg. |
| type Config struct { |
| // Optional. If present, the CQ will refrain from processing any CLs, |
| // on which CQ was triggered after the specified time. |
| // |
| // This is an UTC RFC3339 (stiptime(tm)) string representing the time. |
| // For example, "2017-12-23T15:47:58Z" and Z is required. |
| DrainingStartTime string `protobuf:"bytes,1,opt,name=draining_start_time,json=drainingStartTime,proto3" json:"draining_start_time,omitempty"` |
| // Optional and deprecated. |
| // URL of the CQ status app to push updates to. |
| 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"` |
| // Toggles the use of project scoped account for Gerrit access. |
| // UNSET = Disabled, subject to change in the future. |
| // NO = Disabled. |
| // YES = Enabled. |
| ProjectScopedAccount Toggle `protobuf:"varint,5,opt,name=project_scoped_account,json=projectScopedAccount,proto3,enum=cq.config.Toggle" json:"project_scoped_account,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *Config) Reset() { *m = Config{} } |
| func (m *Config) String() string { return proto.CompactTextString(m) } |
| func (*Config) ProtoMessage() {} |
| func (*Config) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{0} |
| } |
| |
| func (m *Config) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_Config.Unmarshal(m, b) |
| } |
| func (m *Config) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_Config.Marshal(b, m, deterministic) |
| } |
| func (m *Config) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_Config.Merge(m, src) |
| } |
| func (m *Config) XXX_Size() int { |
| return xxx_messageInfo_Config.Size(m) |
| } |
| func (m *Config) XXX_DiscardUnknown() { |
| xxx_messageInfo_Config.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_Config proto.InternalMessageInfo |
| |
| func (m *Config) GetDrainingStartTime() string { |
| if m != nil { |
| return m.DrainingStartTime |
| } |
| return "" |
| } |
| |
| func (m *Config) GetCqStatusHost() string { |
| if m != nil { |
| return m.CqStatusHost |
| } |
| return "" |
| } |
| |
| func (m *Config) GetSubmitOptions() *SubmitOptions { |
| if m != nil { |
| return m.SubmitOptions |
| } |
| return nil |
| } |
| |
| func (m *Config) GetConfigGroups() []*ConfigGroup { |
| if m != nil { |
| return m.ConfigGroups |
| } |
| return nil |
| } |
| |
| func (m *Config) GetProjectScopedAccount() Toggle { |
| if m != nil { |
| return m.ProjectScopedAccount |
| } |
| return Toggle_UNSET |
| } |
| |
| // SubmitOptions control how CQ submits CLs. |
| type SubmitOptions struct { |
| // 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 *duration.Duration `protobuf:"bytes,2,opt,name=burst_delay,json=burstDelay,proto3" json:"burst_delay,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *SubmitOptions) Reset() { *m = SubmitOptions{} } |
| func (m *SubmitOptions) String() string { return proto.CompactTextString(m) } |
| func (*SubmitOptions) ProtoMessage() {} |
| func (*SubmitOptions) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{1} |
| } |
| |
| func (m *SubmitOptions) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_SubmitOptions.Unmarshal(m, b) |
| } |
| func (m *SubmitOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_SubmitOptions.Marshal(b, m, deterministic) |
| } |
| func (m *SubmitOptions) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_SubmitOptions.Merge(m, src) |
| } |
| func (m *SubmitOptions) XXX_Size() int { |
| return xxx_messageInfo_SubmitOptions.Size(m) |
| } |
| func (m *SubmitOptions) XXX_DiscardUnknown() { |
| xxx_messageInfo_SubmitOptions.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_SubmitOptions proto.InternalMessageInfo |
| |
| func (m *SubmitOptions) GetMaxBurst() int32 { |
| if m != nil { |
| return m.MaxBurst |
| } |
| return 0 |
| } |
| |
| func (m *SubmitOptions) GetBurstDelay() *duration.Duration { |
| if m != nil { |
| return m.BurstDelay |
| } |
| return nil |
| } |
| |
| // ConfigGroup allows one to share single verifiers config across a set of |
| // Gerrit repositories, which may be in different Gerrit installations. |
| type ConfigGroup struct { |
| // 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. |
| 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"` |
| // EXPERIMENTAL! TODO(tandrii, crbug/966115): add better doc or remove. |
| // |
| // 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/master, |
| // and fallback one for refs/heads/* which will pick up all CLs on |
| // non-master branches. |
| Fallback Toggle `protobuf:"varint,5,opt,name=fallback,proto3,enum=cq.config.Toggle" json:"fallback,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *ConfigGroup) Reset() { *m = ConfigGroup{} } |
| func (m *ConfigGroup) String() string { return proto.CompactTextString(m) } |
| func (*ConfigGroup) ProtoMessage() {} |
| func (*ConfigGroup) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{2} |
| } |
| |
| func (m *ConfigGroup) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_ConfigGroup.Unmarshal(m, b) |
| } |
| func (m *ConfigGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_ConfigGroup.Marshal(b, m, deterministic) |
| } |
| func (m *ConfigGroup) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_ConfigGroup.Merge(m, src) |
| } |
| func (m *ConfigGroup) XXX_Size() int { |
| return xxx_messageInfo_ConfigGroup.Size(m) |
| } |
| func (m *ConfigGroup) XXX_DiscardUnknown() { |
| xxx_messageInfo_ConfigGroup.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_ConfigGroup proto.InternalMessageInfo |
| |
| func (m *ConfigGroup) GetGerrit() []*ConfigGroup_Gerrit { |
| if m != nil { |
| return m.Gerrit |
| } |
| return nil |
| } |
| |
| func (m *ConfigGroup) GetCombineCls() *CombineCLs { |
| if m != nil { |
| return m.CombineCls |
| } |
| return nil |
| } |
| |
| func (m *ConfigGroup) GetVerifiers() *Verifiers { |
| if m != nil { |
| return m.Verifiers |
| } |
| return nil |
| } |
| |
| func (m *ConfigGroup) GetFallback() Toggle { |
| if m != nil { |
| return m.Fallback |
| } |
| return Toggle_UNSET |
| } |
| |
| // Enumerates repositories on a Gerrit instance for which CQ should work. |
| type ConfigGroup_Gerrit struct { |
| // 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"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *ConfigGroup_Gerrit) Reset() { *m = ConfigGroup_Gerrit{} } |
| func (m *ConfigGroup_Gerrit) String() string { return proto.CompactTextString(m) } |
| func (*ConfigGroup_Gerrit) ProtoMessage() {} |
| func (*ConfigGroup_Gerrit) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{2, 0} |
| } |
| |
| func (m *ConfigGroup_Gerrit) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_ConfigGroup_Gerrit.Unmarshal(m, b) |
| } |
| func (m *ConfigGroup_Gerrit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_ConfigGroup_Gerrit.Marshal(b, m, deterministic) |
| } |
| func (m *ConfigGroup_Gerrit) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_ConfigGroup_Gerrit.Merge(m, src) |
| } |
| func (m *ConfigGroup_Gerrit) XXX_Size() int { |
| return xxx_messageInfo_ConfigGroup_Gerrit.Size(m) |
| } |
| func (m *ConfigGroup_Gerrit) XXX_DiscardUnknown() { |
| xxx_messageInfo_ConfigGroup_Gerrit.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_ConfigGroup_Gerrit proto.InternalMessageInfo |
| |
| func (m *ConfigGroup_Gerrit) GetUrl() string { |
| if m != nil { |
| return m.Url |
| } |
| return "" |
| } |
| |
| func (m *ConfigGroup_Gerrit) GetProjects() []*ConfigGroup_Gerrit_Project { |
| if m != nil { |
| return m.Projects |
| } |
| return nil |
| } |
| |
| type ConfigGroup_Gerrit_Project struct { |
| // 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"` |
| CrosMigration *ConfigGroup_Gerrit_Project_CrOSMigration `protobuf:"bytes,3,opt,name=cros_migration,json=crosMigration,proto3" json:"cros_migration,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *ConfigGroup_Gerrit_Project) Reset() { *m = ConfigGroup_Gerrit_Project{} } |
| func (m *ConfigGroup_Gerrit_Project) String() string { return proto.CompactTextString(m) } |
| func (*ConfigGroup_Gerrit_Project) ProtoMessage() {} |
| func (*ConfigGroup_Gerrit_Project) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{2, 0, 0} |
| } |
| |
| func (m *ConfigGroup_Gerrit_Project) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_ConfigGroup_Gerrit_Project.Unmarshal(m, b) |
| } |
| func (m *ConfigGroup_Gerrit_Project) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_ConfigGroup_Gerrit_Project.Marshal(b, m, deterministic) |
| } |
| func (m *ConfigGroup_Gerrit_Project) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_ConfigGroup_Gerrit_Project.Merge(m, src) |
| } |
| func (m *ConfigGroup_Gerrit_Project) XXX_Size() int { |
| return xxx_messageInfo_ConfigGroup_Gerrit_Project.Size(m) |
| } |
| func (m *ConfigGroup_Gerrit_Project) XXX_DiscardUnknown() { |
| xxx_messageInfo_ConfigGroup_Gerrit_Project.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_ConfigGroup_Gerrit_Project proto.InternalMessageInfo |
| |
| func (m *ConfigGroup_Gerrit_Project) GetName() string { |
| if m != nil { |
| return m.Name |
| } |
| return "" |
| } |
| |
| func (m *ConfigGroup_Gerrit_Project) GetRefRegexp() []string { |
| if m != nil { |
| return m.RefRegexp |
| } |
| return nil |
| } |
| |
| func (m *ConfigGroup_Gerrit_Project) GetCrosMigration() *ConfigGroup_Gerrit_Project_CrOSMigration { |
| if m != nil { |
| return m.CrosMigration |
| } |
| return nil |
| } |
| |
| // DO NOT USE. TODO(crbug/965615, tandrii): delete this. |
| // HACK(cbrug/965615). Only for CrOS during LUCI CQ migration. |
| type ConfigGroup_Gerrit_Project_CrOSMigration struct { |
| // % of new CQ attempts which LUCI CQ will process itself. |
| // The rest will be delegated to legacy CrOS CQ. |
| // If not set, implies 0%, ie all CLs are delegated. |
| // To set these per ref_regexp of a single repo, duplicate project{} |
| // block for this repo but with diff regexp. |
| LuciPercentage float32 `protobuf:"fixed32,1,opt,name=luci_percentage,json=luciPercentage,proto3" json:"luci_percentage,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *ConfigGroup_Gerrit_Project_CrOSMigration) Reset() { |
| *m = ConfigGroup_Gerrit_Project_CrOSMigration{} |
| } |
| func (m *ConfigGroup_Gerrit_Project_CrOSMigration) String() string { return proto.CompactTextString(m) } |
| func (*ConfigGroup_Gerrit_Project_CrOSMigration) ProtoMessage() {} |
| func (*ConfigGroup_Gerrit_Project_CrOSMigration) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{2, 0, 0, 0} |
| } |
| |
| func (m *ConfigGroup_Gerrit_Project_CrOSMigration) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_ConfigGroup_Gerrit_Project_CrOSMigration.Unmarshal(m, b) |
| } |
| func (m *ConfigGroup_Gerrit_Project_CrOSMigration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_ConfigGroup_Gerrit_Project_CrOSMigration.Marshal(b, m, deterministic) |
| } |
| func (m *ConfigGroup_Gerrit_Project_CrOSMigration) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_ConfigGroup_Gerrit_Project_CrOSMigration.Merge(m, src) |
| } |
| func (m *ConfigGroup_Gerrit_Project_CrOSMigration) XXX_Size() int { |
| return xxx_messageInfo_ConfigGroup_Gerrit_Project_CrOSMigration.Size(m) |
| } |
| func (m *ConfigGroup_Gerrit_Project_CrOSMigration) XXX_DiscardUnknown() { |
| xxx_messageInfo_ConfigGroup_Gerrit_Project_CrOSMigration.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_ConfigGroup_Gerrit_Project_CrOSMigration proto.InternalMessageInfo |
| |
| func (m *ConfigGroup_Gerrit_Project_CrOSMigration) GetLuciPercentage() float32 { |
| if m != nil { |
| return m.LuciPercentage |
| } |
| 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 & |
| // target_ref. |
| type CombineCLs struct { |
| // 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 *duration.Duration `protobuf:"bytes,1,opt,name=stabilization_delay,json=stabilizationDelay,proto3" json:"stabilization_delay,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *CombineCLs) Reset() { *m = CombineCLs{} } |
| func (m *CombineCLs) String() string { return proto.CompactTextString(m) } |
| func (*CombineCLs) ProtoMessage() {} |
| func (*CombineCLs) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{3} |
| } |
| |
| func (m *CombineCLs) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_CombineCLs.Unmarshal(m, b) |
| } |
| func (m *CombineCLs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_CombineCLs.Marshal(b, m, deterministic) |
| } |
| func (m *CombineCLs) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_CombineCLs.Merge(m, src) |
| } |
| func (m *CombineCLs) XXX_Size() int { |
| return xxx_messageInfo_CombineCLs.Size(m) |
| } |
| func (m *CombineCLs) XXX_DiscardUnknown() { |
| xxx_messageInfo_CombineCLs.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_CombineCLs proto.InternalMessageInfo |
| |
| func (m *CombineCLs) GetStabilizationDelay() *duration.Duration { |
| if m != nil { |
| return m.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 { |
| // 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"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *Verifiers) Reset() { *m = Verifiers{} } |
| func (m *Verifiers) String() string { return proto.CompactTextString(m) } |
| func (*Verifiers) ProtoMessage() {} |
| func (*Verifiers) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{4} |
| } |
| |
| func (m *Verifiers) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_Verifiers.Unmarshal(m, b) |
| } |
| func (m *Verifiers) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_Verifiers.Marshal(b, m, deterministic) |
| } |
| func (m *Verifiers) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_Verifiers.Merge(m, src) |
| } |
| func (m *Verifiers) XXX_Size() int { |
| return xxx_messageInfo_Verifiers.Size(m) |
| } |
| func (m *Verifiers) XXX_DiscardUnknown() { |
| xxx_messageInfo_Verifiers.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_Verifiers proto.InternalMessageInfo |
| |
| func (m *Verifiers) GetGerritCqAbility() *Verifiers_GerritCQAbility { |
| if m != nil { |
| return m.GerritCqAbility |
| } |
| return nil |
| } |
| |
| func (m *Verifiers) GetTreeStatus() *Verifiers_TreeStatus { |
| if m != nil { |
| return m.TreeStatus |
| } |
| return nil |
| } |
| |
| func (m *Verifiers) GetTryjob() *Verifiers_Tryjob { |
| if m != nil { |
| return m.Tryjob |
| } |
| return nil |
| } |
| |
| func (m *Verifiers) GetCqlinter() *Verifiers_CQLinter { |
| if m != nil { |
| return m.Cqlinter |
| } |
| return nil |
| } |
| |
| func (m *Verifiers) GetFake() *Verifiers_Fake { |
| if m != nil { |
| return m.Fake |
| } |
| return nil |
| } |
| |
| type Verifiers_GerritCQAbility struct { |
| // 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 they own |
| // (not to be confused with OWNER files) even if CL hasn't been approved. |
| // |
| // 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. 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=cq.config.Verifiers_GerritCQAbility_CQAction" json:"allow_owner_if_submittable,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *Verifiers_GerritCQAbility) Reset() { *m = Verifiers_GerritCQAbility{} } |
| func (m *Verifiers_GerritCQAbility) String() string { return proto.CompactTextString(m) } |
| func (*Verifiers_GerritCQAbility) ProtoMessage() {} |
| func (*Verifiers_GerritCQAbility) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{4, 0} |
| } |
| |
| func (m *Verifiers_GerritCQAbility) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_Verifiers_GerritCQAbility.Unmarshal(m, b) |
| } |
| func (m *Verifiers_GerritCQAbility) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_Verifiers_GerritCQAbility.Marshal(b, m, deterministic) |
| } |
| func (m *Verifiers_GerritCQAbility) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_Verifiers_GerritCQAbility.Merge(m, src) |
| } |
| func (m *Verifiers_GerritCQAbility) XXX_Size() int { |
| return xxx_messageInfo_Verifiers_GerritCQAbility.Size(m) |
| } |
| func (m *Verifiers_GerritCQAbility) XXX_DiscardUnknown() { |
| xxx_messageInfo_Verifiers_GerritCQAbility.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_Verifiers_GerritCQAbility proto.InternalMessageInfo |
| |
| func (m *Verifiers_GerritCQAbility) GetCommitterList() []string { |
| if m != nil { |
| return m.CommitterList |
| } |
| return nil |
| } |
| |
| func (m *Verifiers_GerritCQAbility) GetDryRunAccessList() []string { |
| if m != nil { |
| return m.DryRunAccessList |
| } |
| return nil |
| } |
| |
| func (m *Verifiers_GerritCQAbility) GetAllowSubmitWithOpenDeps() bool { |
| if m != nil { |
| return m.AllowSubmitWithOpenDeps |
| } |
| return false |
| } |
| |
| func (m *Verifiers_GerritCQAbility) GetAllowOwnerIfSubmittable() Verifiers_GerritCQAbility_CQAction { |
| if m != nil { |
| return m.AllowOwnerIfSubmittable |
| } |
| return Verifiers_GerritCQAbility_UNSET |
| } |
| |
| type Verifiers_TreeStatus struct { |
| // Required. URL of the project tree status app. |
| Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *Verifiers_TreeStatus) Reset() { *m = Verifiers_TreeStatus{} } |
| func (m *Verifiers_TreeStatus) String() string { return proto.CompactTextString(m) } |
| func (*Verifiers_TreeStatus) ProtoMessage() {} |
| func (*Verifiers_TreeStatus) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{4, 1} |
| } |
| |
| func (m *Verifiers_TreeStatus) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_Verifiers_TreeStatus.Unmarshal(m, b) |
| } |
| func (m *Verifiers_TreeStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_Verifiers_TreeStatus.Marshal(b, m, deterministic) |
| } |
| func (m *Verifiers_TreeStatus) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_Verifiers_TreeStatus.Merge(m, src) |
| } |
| func (m *Verifiers_TreeStatus) XXX_Size() int { |
| return xxx_messageInfo_Verifiers_TreeStatus.Size(m) |
| } |
| func (m *Verifiers_TreeStatus) XXX_DiscardUnknown() { |
| xxx_messageInfo_Verifiers_TreeStatus.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_Verifiers_TreeStatus proto.InternalMessageInfo |
| |
| func (m *Verifiers_TreeStatus) GetUrl() string { |
| if m != nil { |
| return m.Url |
| } |
| return "" |
| } |
| |
| type Verifiers_Tryjob struct { |
| // Builders on which tryjobs should be triggered. |
| 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"` |
| // EXPERIMENTAL. WORK IN PROGRESS. https://crbug.com/909895. |
| // Optional. If YES, running or not-yet-started tryjobs will be cancelled as |
| // soon as substantially different patchset is uploaded to a CL. |
| CancelStaleTryjobs Toggle `protobuf:"varint,3,opt,name=cancel_stale_tryjobs,json=cancelStaleTryjobs,proto3,enum=cq.config.Toggle" json:"cancel_stale_tryjobs,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *Verifiers_Tryjob) Reset() { *m = Verifiers_Tryjob{} } |
| func (m *Verifiers_Tryjob) String() string { return proto.CompactTextString(m) } |
| func (*Verifiers_Tryjob) ProtoMessage() {} |
| func (*Verifiers_Tryjob) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{4, 2} |
| } |
| |
| func (m *Verifiers_Tryjob) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_Verifiers_Tryjob.Unmarshal(m, b) |
| } |
| func (m *Verifiers_Tryjob) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_Verifiers_Tryjob.Marshal(b, m, deterministic) |
| } |
| func (m *Verifiers_Tryjob) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_Verifiers_Tryjob.Merge(m, src) |
| } |
| func (m *Verifiers_Tryjob) XXX_Size() int { |
| return xxx_messageInfo_Verifiers_Tryjob.Size(m) |
| } |
| func (m *Verifiers_Tryjob) XXX_DiscardUnknown() { |
| xxx_messageInfo_Verifiers_Tryjob.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_Verifiers_Tryjob proto.InternalMessageInfo |
| |
| func (m *Verifiers_Tryjob) GetBuilders() []*Verifiers_Tryjob_Builder { |
| if m != nil { |
| return m.Builders |
| } |
| return nil |
| } |
| |
| func (m *Verifiers_Tryjob) GetRetryConfig() *Verifiers_Tryjob_RetryConfig { |
| if m != nil { |
| return m.RetryConfig |
| } |
| return nil |
| } |
| |
| func (m *Verifiers_Tryjob) GetCancelStaleTryjobs() Toggle { |
| if m != nil { |
| return m.CancelStaleTryjobs |
| } |
| return Toggle_UNSET |
| } |
| |
| type Verifiers_Tryjob_Builder struct { |
| // 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"` |
| // 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 name of a builder (aka parent) which will trigger this builder |
| // (aka child). |
| // |
| // If `triggered_by` is not specified (default), CQ will trigger this |
| // builder directly. |
| // |
| // Else, CQ will wait for `triggered_by` (parent) builder to trigger |
| // (possibly, indirectly) this (child) builder. |
| // Conditions: |
| // * `triggered_by` (parent) builder must set a special property |
| // `triggered_build_ids` upon successful completion with value set |
| // to a list of triggered Buildbucket build IDs, |
| // corresponding to each triggered build. One or more of the IDs must |
| // correspond to this (child) builder, which will then be waited for |
| // by CQ. |
| // * parent->child relationship graph must be a forest (set of a trees). |
| // However, grandparent->parent->child triggering structure isn't well |
| // tested. Please, talk to CQ maintainers to discuss your use case if you |
| // actually need it. |
| // |
| // Failure/Retry semantics: |
| // * If `triggered_by` (parent) builder succeeds, but doesn't set |
| // the right `triggered_build_ids` s.t. CQ can't find this (child) |
| // builder among triggered builds, then CQ will wait till |
| // TRYJOB_PENDING_TIMEOUT is reached, currently hardcoded at 2 hours. |
| // TODO(tandrii,sergiyb): improve this. |
| // * If this (child) builder fails and CQ still has retry budget, |
| // CQ will retry a parent builder. |
| // |
| // For example, given config: |
| // builder { name: "*/m/mac_compiler" } |
| // builder { name: "*/m/mac_tester_10.12" |
| // triggered_by: "*/m/mac_compiler" } |
| // builder { name: "*/m/mac_tester_10.13" |
| // triggered_by: "*/m/mac_compiler" } |
| // CQ will trigger and wait for "mac_compiler" to succeed. Then, it'll |
| // check its `triggered_build_ids` and find which ones correspond to |
| // "mac_tester_10.12" and "mac_tester_10.13" and wait for each to |
| // complete. If say "mac_tester_10.12" fails, CQ will retry |
| // "mac_compiler" and expect it to trigger new builds for |
| // "mac_tester_10.12" and "mac_tester_10.13". |
| TriggeredBy string `protobuf:"bytes,3,opt,name=triggered_by,json=triggeredBy,proto3" json:"triggered_by,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 decicion whether a CL can land or not. |
| // This is typically used to test new builders and estimate their capacity |
| // requirements. |
| 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 try jobs. |
| // |
| // Note: none of the equivalent builders should be part of triggered_by |
| // chain, although CQ may eventually relax this requirement. |
| EquivalentTo *Verifiers_Tryjob_EquivalentBuilder `protobuf:"bytes,5,opt,name=equivalent_to,json=equivalentTo,proto3" json:"equivalent_to,omitempty"` |
| // Optional. Require this builder only if location_regexp matches a file in |
| // this CL. |
| // |
| // This means: |
| // * If specified and no file in a CL matches any of the location_regexp, |
| // then CQ will not care about this builder. |
| // * If a file in a CL matches any location_regexp_exclude, then this file |
| // won't be considered when matching location_regexp. |
| // |
| // If location_regexp is not specified (default), builder will be used |
| // on all CLs. |
| // |
| // The location_regexp is matches are done against the following string: |
| // <gerrit_url>/<gerrit_project_name>/+/<cl_file_path> |
| // File path must be relative to root of the repo, and it uses Unix / |
| // directory separators. |
| // |
| // The comparison is a full match; the pattern is implicitly anchored with |
| // "^" and "$", so there is no need add them. |
| // |
| // Touching a file means either adding, modifying or removing it. |
| // |
| // These options currently can not be combined with the following other options: |
| // * experiment_percentage |
| // * triggered_by |
| // * GerritCQAbility.allow_submit_with_open_deps |
| // If you need to combine them, please talk to CQ owners. |
| // |
| // Examples: |
| // |
| // location_regexp: |
| // "https://chromium-review.googlesource.com/chromium/src/[+]/third_party/WebKit/.+" |
| // will enable builder for all CLs touching any file in |
| // third_party/WebKit directory of the chromium/src repo, but not |
| // directory itself. |
| // |
| // location_regexp: "https://example.com/repo/[+]/.+" |
| // location_regexp_exclude: "https://example.com/repo/[+]/all/one.txt" |
| // will match a CL which touches at least one file other than |
| // 'one.txt' inside all/ directory of the Gerrit project "repo". |
| // |
| // location_regexp_exclude: "https://example.com/.+/[+]/one.txt" |
| // will match a CL which touches at least one file other than |
| // 'one.txt' in any repository OR belongs to any other Gerrit server. |
| // Note, in this case location_regexp defaults to ".*". |
| LocationRegexp []string `protobuf:"bytes,6,rep,name=location_regexp,json=locationRegexp,proto3" json:"location_regexp,omitempty"` |
| LocationRegexpExclude []string `protobuf:"bytes,7,rep,name=location_regexp_exclude,json=locationRegexpExclude,proto3" json:"location_regexp_exclude,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"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *Verifiers_Tryjob_Builder) Reset() { *m = Verifiers_Tryjob_Builder{} } |
| func (m *Verifiers_Tryjob_Builder) String() string { return proto.CompactTextString(m) } |
| func (*Verifiers_Tryjob_Builder) ProtoMessage() {} |
| func (*Verifiers_Tryjob_Builder) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{4, 2, 0} |
| } |
| |
| func (m *Verifiers_Tryjob_Builder) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_Verifiers_Tryjob_Builder.Unmarshal(m, b) |
| } |
| func (m *Verifiers_Tryjob_Builder) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_Verifiers_Tryjob_Builder.Marshal(b, m, deterministic) |
| } |
| func (m *Verifiers_Tryjob_Builder) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_Verifiers_Tryjob_Builder.Merge(m, src) |
| } |
| func (m *Verifiers_Tryjob_Builder) XXX_Size() int { |
| return xxx_messageInfo_Verifiers_Tryjob_Builder.Size(m) |
| } |
| func (m *Verifiers_Tryjob_Builder) XXX_DiscardUnknown() { |
| xxx_messageInfo_Verifiers_Tryjob_Builder.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_Verifiers_Tryjob_Builder proto.InternalMessageInfo |
| |
| func (m *Verifiers_Tryjob_Builder) GetName() string { |
| if m != nil { |
| return m.Name |
| } |
| return "" |
| } |
| |
| func (m *Verifiers_Tryjob_Builder) GetDisableReuse() bool { |
| if m != nil { |
| return m.DisableReuse |
| } |
| return false |
| } |
| |
| func (m *Verifiers_Tryjob_Builder) GetTriggeredBy() string { |
| if m != nil { |
| return m.TriggeredBy |
| } |
| return "" |
| } |
| |
| func (m *Verifiers_Tryjob_Builder) GetExperimentPercentage() float32 { |
| if m != nil { |
| return m.ExperimentPercentage |
| } |
| return 0 |
| } |
| |
| func (m *Verifiers_Tryjob_Builder) GetEquivalentTo() *Verifiers_Tryjob_EquivalentBuilder { |
| if m != nil { |
| return m.EquivalentTo |
| } |
| return nil |
| } |
| |
| func (m *Verifiers_Tryjob_Builder) GetLocationRegexp() []string { |
| if m != nil { |
| return m.LocationRegexp |
| } |
| return nil |
| } |
| |
| func (m *Verifiers_Tryjob_Builder) GetLocationRegexpExclude() []string { |
| if m != nil { |
| return m.LocationRegexpExclude |
| } |
| return nil |
| } |
| |
| func (m *Verifiers_Tryjob_Builder) GetOwnerWhitelistGroup() []string { |
| if m != nil { |
| return m.OwnerWhitelistGroup |
| } |
| return nil |
| } |
| |
| type Verifiers_Tryjob_EquivalentBuilder struct { |
| // 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 equilvanet to. |
| // |
| // A choice itself is made deterministicly 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"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *Verifiers_Tryjob_EquivalentBuilder) Reset() { *m = Verifiers_Tryjob_EquivalentBuilder{} } |
| func (m *Verifiers_Tryjob_EquivalentBuilder) String() string { return proto.CompactTextString(m) } |
| func (*Verifiers_Tryjob_EquivalentBuilder) ProtoMessage() {} |
| func (*Verifiers_Tryjob_EquivalentBuilder) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{4, 2, 1} |
| } |
| |
| func (m *Verifiers_Tryjob_EquivalentBuilder) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_Verifiers_Tryjob_EquivalentBuilder.Unmarshal(m, b) |
| } |
| func (m *Verifiers_Tryjob_EquivalentBuilder) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_Verifiers_Tryjob_EquivalentBuilder.Marshal(b, m, deterministic) |
| } |
| func (m *Verifiers_Tryjob_EquivalentBuilder) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_Verifiers_Tryjob_EquivalentBuilder.Merge(m, src) |
| } |
| func (m *Verifiers_Tryjob_EquivalentBuilder) XXX_Size() int { |
| return xxx_messageInfo_Verifiers_Tryjob_EquivalentBuilder.Size(m) |
| } |
| func (m *Verifiers_Tryjob_EquivalentBuilder) XXX_DiscardUnknown() { |
| xxx_messageInfo_Verifiers_Tryjob_EquivalentBuilder.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_Verifiers_Tryjob_EquivalentBuilder proto.InternalMessageInfo |
| |
| func (m *Verifiers_Tryjob_EquivalentBuilder) GetName() string { |
| if m != nil { |
| return m.Name |
| } |
| return "" |
| } |
| |
| func (m *Verifiers_Tryjob_EquivalentBuilder) GetPercentage() float32 { |
| if m != nil { |
| return m.Percentage |
| } |
| return 0 |
| } |
| |
| func (m *Verifiers_Tryjob_EquivalentBuilder) GetOwnerWhitelistGroup() string { |
| if m != nil { |
| return m.OwnerWhitelistGroup |
| } |
| 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. |
| type Verifiers_Tryjob_RetryConfig struct { |
| // 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. |
| FailureWeight int32 `protobuf:"varint,3,opt,name=failure_weight,json=failureWeight,proto3" json:"failure_weight,omitempty"` |
| // The weight assigned to each transient 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. |
| TimeoutWeight int32 `protobuf:"varint,5,opt,name=timeout_weight,json=timeoutWeight,proto3" json:"timeout_weight,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *Verifiers_Tryjob_RetryConfig) Reset() { *m = Verifiers_Tryjob_RetryConfig{} } |
| func (m *Verifiers_Tryjob_RetryConfig) String() string { return proto.CompactTextString(m) } |
| func (*Verifiers_Tryjob_RetryConfig) ProtoMessage() {} |
| func (*Verifiers_Tryjob_RetryConfig) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{4, 2, 2} |
| } |
| |
| func (m *Verifiers_Tryjob_RetryConfig) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_Verifiers_Tryjob_RetryConfig.Unmarshal(m, b) |
| } |
| func (m *Verifiers_Tryjob_RetryConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_Verifiers_Tryjob_RetryConfig.Marshal(b, m, deterministic) |
| } |
| func (m *Verifiers_Tryjob_RetryConfig) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_Verifiers_Tryjob_RetryConfig.Merge(m, src) |
| } |
| func (m *Verifiers_Tryjob_RetryConfig) XXX_Size() int { |
| return xxx_messageInfo_Verifiers_Tryjob_RetryConfig.Size(m) |
| } |
| func (m *Verifiers_Tryjob_RetryConfig) XXX_DiscardUnknown() { |
| xxx_messageInfo_Verifiers_Tryjob_RetryConfig.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_Verifiers_Tryjob_RetryConfig proto.InternalMessageInfo |
| |
| func (m *Verifiers_Tryjob_RetryConfig) GetSingleQuota() int32 { |
| if m != nil { |
| return m.SingleQuota |
| } |
| return 0 |
| } |
| |
| func (m *Verifiers_Tryjob_RetryConfig) GetGlobalQuota() int32 { |
| if m != nil { |
| return m.GlobalQuota |
| } |
| return 0 |
| } |
| |
| func (m *Verifiers_Tryjob_RetryConfig) GetFailureWeight() int32 { |
| if m != nil { |
| return m.FailureWeight |
| } |
| return 0 |
| } |
| |
| func (m *Verifiers_Tryjob_RetryConfig) GetTransientFailureWeight() int32 { |
| if m != nil { |
| return m.TransientFailureWeight |
| } |
| return 0 |
| } |
| |
| func (m *Verifiers_Tryjob_RetryConfig) GetTimeoutWeight() int32 { |
| if m != nil { |
| return m.TimeoutWeight |
| } |
| return 0 |
| } |
| |
| // CQLinter is for internal use in CQ. |
| type Verifiers_CQLinter struct { |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *Verifiers_CQLinter) Reset() { *m = Verifiers_CQLinter{} } |
| func (m *Verifiers_CQLinter) String() string { return proto.CompactTextString(m) } |
| func (*Verifiers_CQLinter) ProtoMessage() {} |
| func (*Verifiers_CQLinter) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{4, 3} |
| } |
| |
| func (m *Verifiers_CQLinter) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_Verifiers_CQLinter.Unmarshal(m, b) |
| } |
| func (m *Verifiers_CQLinter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_Verifiers_CQLinter.Marshal(b, m, deterministic) |
| } |
| func (m *Verifiers_CQLinter) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_Verifiers_CQLinter.Merge(m, src) |
| } |
| func (m *Verifiers_CQLinter) XXX_Size() int { |
| return xxx_messageInfo_Verifiers_CQLinter.Size(m) |
| } |
| func (m *Verifiers_CQLinter) XXX_DiscardUnknown() { |
| xxx_messageInfo_Verifiers_CQLinter.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_Verifiers_CQLinter proto.InternalMessageInfo |
| |
| // Fake is for internal use in CQ. |
| type Verifiers_Fake struct { |
| 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"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *Verifiers_Fake) Reset() { *m = Verifiers_Fake{} } |
| func (m *Verifiers_Fake) String() string { return proto.CompactTextString(m) } |
| func (*Verifiers_Fake) ProtoMessage() {} |
| func (*Verifiers_Fake) Descriptor() ([]byte, []int) { |
| return fileDescriptor_59a2f489dbd601ec, []int{4, 4} |
| } |
| |
| func (m *Verifiers_Fake) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_Verifiers_Fake.Unmarshal(m, b) |
| } |
| func (m *Verifiers_Fake) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_Verifiers_Fake.Marshal(b, m, deterministic) |
| } |
| func (m *Verifiers_Fake) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_Verifiers_Fake.Merge(m, src) |
| } |
| func (m *Verifiers_Fake) XXX_Size() int { |
| return xxx_messageInfo_Verifiers_Fake.Size(m) |
| } |
| func (m *Verifiers_Fake) XXX_DiscardUnknown() { |
| xxx_messageInfo_Verifiers_Fake.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_Verifiers_Fake proto.InternalMessageInfo |
| |
| func (m *Verifiers_Fake) GetName() string { |
| if m != nil { |
| return m.Name |
| } |
| return "" |
| } |
| |
| func (m *Verifiers_Fake) GetEventualState() string { |
| if m != nil { |
| return m.EventualState |
| } |
| return "" |
| } |
| |
| func (m *Verifiers_Fake) GetDelay() int32 { |
| if m != nil { |
| return m.Delay |
| } |
| return 0 |
| } |
| |
| func init() { |
| proto.RegisterEnum("cq.config.Toggle", Toggle_name, Toggle_value) |
| proto.RegisterEnum("cq.config.Verifiers_GerritCQAbility_CQAction", Verifiers_GerritCQAbility_CQAction_name, Verifiers_GerritCQAbility_CQAction_value) |
| proto.RegisterType((*Config)(nil), "cq.config.Config") |
| proto.RegisterType((*SubmitOptions)(nil), "cq.config.SubmitOptions") |
| proto.RegisterType((*ConfigGroup)(nil), "cq.config.ConfigGroup") |
| proto.RegisterType((*ConfigGroup_Gerrit)(nil), "cq.config.ConfigGroup.Gerrit") |
| proto.RegisterType((*ConfigGroup_Gerrit_Project)(nil), "cq.config.ConfigGroup.Gerrit.Project") |
| proto.RegisterType((*ConfigGroup_Gerrit_Project_CrOSMigration)(nil), "cq.config.ConfigGroup.Gerrit.Project.CrOSMigration") |
| proto.RegisterType((*CombineCLs)(nil), "cq.config.CombineCLs") |
| proto.RegisterType((*Verifiers)(nil), "cq.config.Verifiers") |
| proto.RegisterType((*Verifiers_GerritCQAbility)(nil), "cq.config.Verifiers.GerritCQAbility") |
| proto.RegisterType((*Verifiers_TreeStatus)(nil), "cq.config.Verifiers.TreeStatus") |
| proto.RegisterType((*Verifiers_Tryjob)(nil), "cq.config.Verifiers.Tryjob") |
| proto.RegisterType((*Verifiers_Tryjob_Builder)(nil), "cq.config.Verifiers.Tryjob.Builder") |
| proto.RegisterType((*Verifiers_Tryjob_EquivalentBuilder)(nil), "cq.config.Verifiers.Tryjob.EquivalentBuilder") |
| proto.RegisterType((*Verifiers_Tryjob_RetryConfig)(nil), "cq.config.Verifiers.Tryjob.RetryConfig") |
| proto.RegisterType((*Verifiers_CQLinter)(nil), "cq.config.Verifiers.CQLinter") |
| proto.RegisterType((*Verifiers_Fake)(nil), "cq.config.Verifiers.Fake") |
| } |
| |
| func init() { |
| proto.RegisterFile("go.chromium.org/luci/cq/api/config/v2/cq.proto", fileDescriptor_59a2f489dbd601ec) |
| } |
| |
| var fileDescriptor_59a2f489dbd601ec = []byte{ |
| // 1336 bytes of a gzipped FileDescriptorProto |
| 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0xcf, 0x72, 0x13, 0xc7, |
| 0x13, 0xfe, 0x49, 0x96, 0x65, 0xa9, 0x65, 0x09, 0x79, 0xb0, 0x41, 0x3f, 0x51, 0x10, 0xc7, 0xe0, |
| 0xc2, 0x95, 0x8a, 0x57, 0x55, 0x72, 0x85, 0x22, 0x21, 0x55, 0xc4, 0x96, 0x0d, 0x81, 0x02, 0x8c, |
| 0x47, 0x26, 0x0e, 0x5c, 0xa6, 0x56, 0xab, 0xd1, 0x6a, 0x60, 0xb5, 0x23, 0xcd, 0xcc, 0xda, 0x56, |
| 0x72, 0xcc, 0x5b, 0xe4, 0x9e, 0x17, 0xc8, 0x35, 0xa7, 0x1c, 0xf2, 0x02, 0xb9, 0xe6, 0x65, 0x52, |
| 0xf3, 0x47, 0x2b, 0x19, 0x84, 0xc3, 0x6d, 0xa7, 0xfb, 0xfb, 0x7a, 0x7a, 0xba, 0x7b, 0xbe, 0x1d, |
| 0xf0, 0x42, 0xee, 0x05, 0x7d, 0xc1, 0x07, 0x2c, 0x19, 0x78, 0x5c, 0x84, 0x8d, 0x28, 0x09, 0x58, |
| 0x23, 0x18, 0x35, 0xfc, 0x21, 0x6b, 0x04, 0x3c, 0xee, 0xb1, 0xb0, 0x71, 0xda, 0x6c, 0x04, 0x23, |
| 0x6f, 0x28, 0xb8, 0xe2, 0xa8, 0x18, 0x8c, 0x3c, 0x6b, 0xae, 0xdf, 0x0a, 0x39, 0x0f, 0x23, 0xda, |
| 0x30, 0x8e, 0x4e, 0xd2, 0x6b, 0x74, 0x13, 0xe1, 0x2b, 0xc6, 0x63, 0x0b, 0xdd, 0xf8, 0x2d, 0x0b, |
| 0xf9, 0x96, 0x81, 0x22, 0x0f, 0xae, 0x76, 0x85, 0xcf, 0x62, 0x16, 0x87, 0x44, 0x2a, 0x5f, 0x28, |
| 0xa2, 0xd8, 0x80, 0xd6, 0x32, 0xeb, 0x99, 0xad, 0x22, 0x5e, 0x99, 0xb8, 0xda, 0xda, 0x73, 0xcc, |
| 0x06, 0x14, 0xdd, 0x81, 0x4a, 0x30, 0xd2, 0x48, 0x95, 0x48, 0xd2, 0xe7, 0x52, 0xd5, 0xb2, 0x06, |
| 0xba, 0x1c, 0x8c, 0xda, 0xc6, 0xf8, 0x3d, 0x97, 0x0a, 0x3d, 0x84, 0x8a, 0x4c, 0x3a, 0x03, 0xa6, |
| 0x08, 0x1f, 0xea, 0x7d, 0x65, 0x6d, 0x61, 0x3d, 0xb3, 0x55, 0x6a, 0xd6, 0xbc, 0x34, 0x49, 0xaf, |
| 0x6d, 0x00, 0x87, 0xd6, 0x8f, 0xcb, 0x72, 0x76, 0x89, 0x1e, 0x40, 0xd9, 0xc2, 0x48, 0x28, 0x78, |
| 0x32, 0x94, 0xb5, 0xdc, 0xfa, 0xc2, 0x56, 0xa9, 0x79, 0x6d, 0x86, 0x6f, 0x0f, 0xf0, 0x58, 0xbb, |
| 0xf1, 0x72, 0x30, 0x5d, 0x48, 0xf4, 0x18, 0xae, 0x0d, 0x05, 0x7f, 0x4b, 0x03, 0x45, 0x64, 0xc0, |
| 0x87, 0xb4, 0x4b, 0xfc, 0x20, 0xe0, 0x49, 0xac, 0x6a, 0x8b, 0xeb, 0x99, 0xad, 0x4a, 0x73, 0x65, |
| 0x26, 0xca, 0x31, 0x0f, 0xc3, 0x88, 0xe2, 0x55, 0x47, 0x68, 0x1b, 0xfc, 0xae, 0x85, 0x6f, 0xf4, |
| 0xa1, 0x7c, 0x21, 0x4b, 0x74, 0x03, 0x8a, 0x03, 0xff, 0x9c, 0x74, 0x12, 0x21, 0x95, 0xa9, 0xd1, |
| 0x22, 0x2e, 0x0c, 0xfc, 0xf3, 0x3d, 0xbd, 0x46, 0xdf, 0x40, 0xc9, 0x38, 0x48, 0x97, 0x46, 0xfe, |
| 0xd8, 0xd4, 0xa5, 0xd4, 0xfc, 0xbf, 0x67, 0x7b, 0xe1, 0x4d, 0x7a, 0xe1, 0xed, 0xbb, 0x5e, 0x60, |
| 0x30, 0xe8, 0x7d, 0x0d, 0xde, 0xf8, 0x35, 0x07, 0xa5, 0x99, 0x03, 0xa1, 0xaf, 0x20, 0x1f, 0x52, |
| 0x21, 0x98, 0xde, 0x45, 0x1f, 0xfc, 0xe6, 0xfc, 0x83, 0x7b, 0x8f, 0x0d, 0x08, 0x3b, 0x30, 0xba, |
| 0x07, 0xa5, 0x80, 0x0f, 0x3a, 0x2c, 0xa6, 0x24, 0x88, 0x74, 0xd1, 0x74, 0x0a, 0x6b, 0x17, 0xb8, |
| 0xc6, 0xdb, 0x7a, 0x26, 0x31, 0x38, 0x64, 0x2b, 0x92, 0xa8, 0x09, 0xc5, 0x53, 0x2a, 0x58, 0x8f, |
| 0x51, 0x21, 0x5d, 0xe2, 0xab, 0x33, 0xac, 0x1f, 0x26, 0x3e, 0x3c, 0x85, 0xa1, 0x6d, 0x28, 0xf4, |
| 0xfc, 0x28, 0xea, 0xf8, 0xc1, 0xbb, 0x8f, 0xd7, 0x35, 0x85, 0xd4, 0x7f, 0xcf, 0x42, 0xde, 0x66, |
| 0x8b, 0xaa, 0xb0, 0x90, 0x88, 0xc8, 0xcd, 0x98, 0xfe, 0x44, 0xbb, 0x50, 0x70, 0x0d, 0xd0, 0xdb, |
| 0xeb, 0x03, 0x6f, 0x5e, 0x7a, 0x60, 0xef, 0xa5, 0x45, 0xe3, 0x94, 0x56, 0xff, 0x3b, 0x03, 0x4b, |
| 0xce, 0x8a, 0x10, 0xe4, 0x62, 0x3f, 0x9d, 0x62, 0xf3, 0x8d, 0x6e, 0x02, 0x08, 0xda, 0x23, 0x82, |
| 0x86, 0xf4, 0x7c, 0x68, 0x36, 0x29, 0xe2, 0xa2, 0xa0, 0x3d, 0x6c, 0x0c, 0xe8, 0x0d, 0x54, 0x02, |
| 0xc1, 0x25, 0x19, 0xb0, 0xd0, 0xb6, 0xc7, 0x4d, 0xec, 0xce, 0x27, 0xe5, 0xe1, 0xb5, 0xc4, 0x61, |
| 0xfb, 0xf9, 0x84, 0x8a, 0xcb, 0x3a, 0x54, 0xba, 0xac, 0xdf, 0x87, 0xf2, 0x05, 0x3f, 0xba, 0x0b, |
| 0x57, 0xf4, 0x65, 0x26, 0x43, 0x2a, 0x02, 0x1a, 0x2b, 0x3f, 0xb4, 0xa9, 0x66, 0x71, 0x45, 0x9b, |
| 0x5f, 0xa6, 0xd6, 0xa7, 0xb9, 0xc2, 0x42, 0x35, 0xb7, 0xf1, 0x23, 0xc0, 0xb4, 0x6f, 0xe8, 0x29, |
| 0x5c, 0x95, 0xca, 0xef, 0xb0, 0x88, 0xfd, 0x64, 0xa2, 0xb9, 0x71, 0xcb, 0xfc, 0xd7, 0xb8, 0xa1, |
| 0x0b, 0x2c, 0x3b, 0x76, 0x7f, 0x95, 0xa1, 0x98, 0x36, 0x17, 0xbd, 0x84, 0x15, 0x3b, 0x47, 0x24, |
| 0x18, 0x11, 0x83, 0x55, 0x93, 0xb8, 0x77, 0xe6, 0x4d, 0x83, 0x2b, 0x42, 0xeb, 0x68, 0xd7, 0x62, |
| 0xf1, 0x15, 0x4b, 0x6f, 0x8d, 0x9c, 0x01, 0x7d, 0x07, 0x25, 0x25, 0x28, 0x75, 0x7a, 0xe1, 0x26, |
| 0xeb, 0xb3, 0xb9, 0xb1, 0x8e, 0x05, 0xa5, 0x56, 0x41, 0x30, 0xa8, 0xf4, 0x1b, 0xed, 0x40, 0x5e, |
| 0x89, 0xf1, 0x5b, 0xde, 0x71, 0xfd, 0xb8, 0xf1, 0x11, 0xb2, 0x86, 0x60, 0x07, 0x45, 0x5f, 0x43, |
| 0x21, 0x18, 0x45, 0x2c, 0x56, 0x54, 0xb8, 0x3b, 0x70, 0x73, 0x2e, 0xad, 0x75, 0xf4, 0xcc, 0x80, |
| 0x70, 0x0a, 0x47, 0xdb, 0x90, 0xeb, 0xf9, 0xef, 0xa8, 0x99, 0x68, 0x5d, 0xce, 0x79, 0xb4, 0x47, |
| 0xfe, 0x3b, 0x8a, 0x0d, 0xac, 0xfe, 0x67, 0x16, 0xae, 0xbc, 0x57, 0x05, 0xb4, 0x09, 0x95, 0x80, |
| 0x0f, 0x06, 0x4c, 0x29, 0x2a, 0x48, 0xc4, 0xa4, 0xbd, 0xc3, 0x45, 0x5c, 0x4e, 0xad, 0xcf, 0x98, |
| 0x54, 0x68, 0x5b, 0x2b, 0xef, 0x98, 0x88, 0x24, 0xd6, 0xf2, 0x44, 0xa5, 0xb4, 0x58, 0x3b, 0x99, |
| 0xd5, 0xae, 0x18, 0xe3, 0x24, 0xde, 0x35, 0x0e, 0x03, 0xff, 0x16, 0x6e, 0xf8, 0x51, 0xc4, 0xcf, |
| 0x88, 0x13, 0xd6, 0x33, 0xa6, 0xfa, 0x84, 0x0f, 0xa9, 0xee, 0xff, 0xd0, 0xea, 0x6b, 0x01, 0x5f, |
| 0x37, 0x10, 0xab, 0x59, 0x27, 0x4c, 0xf5, 0x0f, 0x87, 0x34, 0xde, 0xa7, 0x43, 0x89, 0xde, 0x42, |
| 0xdd, 0xb2, 0xf9, 0x59, 0x4c, 0x05, 0x61, 0x3d, 0x17, 0x46, 0xf9, 0x9d, 0x88, 0x9a, 0x1a, 0x55, |
| 0x9a, 0xdb, 0x9f, 0xd2, 0x63, 0xaf, 0x75, 0xb4, 0x1b, 0x98, 0x79, 0xb2, 0x7b, 0x1d, 0xea, 0x78, |
| 0x4f, 0x7a, 0xed, 0x69, 0xb4, 0x0d, 0x0f, 0x0a, 0x13, 0x10, 0x2a, 0xc2, 0xe2, 0xab, 0x17, 0xed, |
| 0x83, 0xe3, 0xea, 0xff, 0x50, 0x09, 0x96, 0xf6, 0xf1, 0x6b, 0x82, 0x5f, 0xbd, 0xa8, 0x66, 0x10, |
| 0x40, 0xbe, 0x75, 0xf8, 0xfc, 0xf9, 0x93, 0xe3, 0x6a, 0xb6, 0x7e, 0x0b, 0x60, 0xda, 0xfc, 0x0f, |
| 0xc5, 0xa1, 0xfe, 0xc7, 0x12, 0xe4, 0x6d, 0x83, 0xd1, 0x43, 0x28, 0x74, 0x12, 0x16, 0x75, 0xb5, |
| 0x4c, 0x59, 0x61, 0xbc, 0x7d, 0xc9, 0x3c, 0x78, 0x7b, 0x16, 0x8b, 0x53, 0x12, 0x7a, 0x0a, 0xcb, |
| 0x82, 0x2a, 0x31, 0x26, 0x96, 0xe2, 0x26, 0xf2, 0xee, 0x65, 0x41, 0xb0, 0xc6, 0xdb, 0xab, 0x8f, |
| 0x4b, 0x62, 0xba, 0x40, 0x2d, 0x58, 0x0d, 0xfc, 0x38, 0xa0, 0x91, 0x1e, 0xef, 0x88, 0x12, 0x3b, |
| 0x7c, 0xb6, 0x15, 0x73, 0xc5, 0x10, 0x59, 0x78, 0x5b, 0xa3, 0x6d, 0x70, 0x59, 0xff, 0x65, 0x01, |
| 0x96, 0x5c, 0x9a, 0x73, 0x65, 0xeb, 0x36, 0x94, 0xbb, 0x4c, 0xea, 0xba, 0x12, 0x41, 0x13, 0x49, |
| 0x4d, 0xc6, 0x05, 0xbc, 0xec, 0x8c, 0x58, 0xdb, 0xd0, 0xe7, 0xb0, 0xac, 0x04, 0x0b, 0x43, 0x2a, |
| 0x68, 0x97, 0x74, 0xc6, 0x26, 0x83, 0x22, 0x2e, 0xa5, 0xb6, 0xbd, 0x31, 0xda, 0x81, 0x35, 0x7a, |
| 0x3e, 0xa4, 0x82, 0x0d, 0x68, 0xac, 0x66, 0x85, 0x27, 0x67, 0x84, 0x67, 0x75, 0xea, 0x9c, 0xca, |
| 0x0f, 0xc2, 0x50, 0xa6, 0xa3, 0x84, 0x9d, 0xfa, 0x91, 0x26, 0x29, 0xee, 0x6e, 0xc5, 0xf6, 0x65, |
| 0xe5, 0x3a, 0x48, 0x09, 0x93, 0xea, 0x2f, 0x4f, 0x63, 0x1c, 0x73, 0xa3, 0x7d, 0x3c, 0xb0, 0xca, |
| 0xe5, 0xc4, 0x38, 0x6f, 0x46, 0xbe, 0x32, 0x31, 0x3b, 0x45, 0xbe, 0x07, 0xd7, 0xdf, 0x03, 0x12, |
| 0x7a, 0x1e, 0x44, 0x49, 0x97, 0xd6, 0x96, 0x0c, 0x61, 0xed, 0x22, 0xe1, 0xc0, 0x3a, 0x51, 0x13, |
| 0xd6, 0xec, 0x90, 0x9f, 0xf5, 0x99, 0xa2, 0xfa, 0x4e, 0xd9, 0x37, 0x44, 0xad, 0x60, 0x58, 0x57, |
| 0x8d, 0xf3, 0x64, 0xe2, 0x33, 0x6a, 0x5e, 0xff, 0x19, 0x56, 0x3e, 0xc8, 0x7b, 0x6e, 0x3b, 0x6e, |
| 0x01, 0xcc, 0xd4, 0x2e, 0x6b, 0x6a, 0x37, 0x63, 0xf9, 0xf8, 0xe6, 0xb6, 0x25, 0x73, 0x37, 0xff, |
| 0x27, 0x03, 0xa5, 0x99, 0x21, 0xd3, 0xdd, 0x94, 0x2c, 0x0e, 0x23, 0x4a, 0x46, 0x09, 0x57, 0xbe, |
| 0x7b, 0x67, 0x94, 0xac, 0xed, 0x48, 0x9b, 0x34, 0x24, 0x8c, 0x78, 0xc7, 0x8f, 0x1c, 0x24, 0x6b, |
| 0x21, 0xd6, 0x66, 0x21, 0x9b, 0x50, 0xe9, 0xf9, 0x2c, 0x4a, 0x04, 0x25, 0x67, 0x94, 0x85, 0x7d, |
| 0x65, 0x52, 0x58, 0xc4, 0x65, 0x67, 0x3d, 0x31, 0x46, 0x74, 0x1f, 0x6a, 0x4a, 0xf8, 0xb1, 0x64, |
| 0xba, 0xc3, 0xef, 0x11, 0x72, 0x86, 0x70, 0x2d, 0xf5, 0x3f, 0xba, 0xc0, 0xdc, 0x84, 0x8a, 0x7e, |
| 0x2a, 0xf2, 0x44, 0x4d, 0xf0, 0x8b, 0x76, 0x03, 0x67, 0xb5, 0xb0, 0x3a, 0x68, 0x35, 0xb0, 0x32, |
| 0x5b, 0x3f, 0x81, 0x9c, 0xd6, 0xce, 0xb9, 0x95, 0xdd, 0x84, 0x0a, 0x3d, 0xa5, 0xb1, 0x4a, 0x7c, |
| 0x73, 0x9f, 0x14, 0x75, 0x0f, 0xcb, 0xf2, 0xc4, 0xaa, 0xf5, 0x81, 0xa2, 0x55, 0x58, 0xb4, 0xff, |
| 0x3b, 0x7b, 0x1a, 0xbb, 0xf8, 0xe2, 0x0e, 0xe4, 0xed, 0x1d, 0x9b, 0x15, 0x9c, 0x25, 0x58, 0x78, |
| 0x7d, 0xd0, 0xae, 0x66, 0x50, 0x1e, 0xb2, 0x2f, 0x0e, 0xab, 0xd9, 0x3d, 0xef, 0xcd, 0x97, 0x9f, |
| 0xf4, 0xa6, 0x7e, 0x60, 0xbf, 0x3a, 0x79, 0xf3, 0x13, 0xdd, 0xf9, 0x37, 0x00, 0x00, 0xff, 0xff, |
| 0x73, 0x7d, 0x69, 0xa3, 0x8a, 0x0b, 0x00, 0x00, |
| } |