blob: 49a4dd6966c52d6b82294f2a9e205f3e419f806a [file] [log] [blame]
// 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,
}