github.com/GoogleCloudPlatform/testgrid@v0.0.174/web/src/gen/pb/config/config.ts (about)

     1  // @generated by protobuf-ts 2.8.3 with parameter long_type_string
     2  // @generated from protobuf file "pb/config/config.proto" (package "testgrid.config", syntax proto3)
     3  // tslint:disable
     4  import type { BinaryWriteOptions } from "@protobuf-ts/runtime";
     5  import type { IBinaryWriter } from "@protobuf-ts/runtime";
     6  import { WireType } from "@protobuf-ts/runtime";
     7  import type { BinaryReadOptions } from "@protobuf-ts/runtime";
     8  import type { IBinaryReader } from "@protobuf-ts/runtime";
     9  import { UnknownFieldHandler } from "@protobuf-ts/runtime";
    10  import type { PartialMessage } from "@protobuf-ts/runtime";
    11  import { reflectionMergePartial } from "@protobuf-ts/runtime";
    12  import { MESSAGE_TYPE } from "@protobuf-ts/runtime";
    13  import { MessageType } from "@protobuf-ts/runtime";
    14  import { RuleSet } from "../custom_evaluator/custom_evaluator";
    15  /**
    16   * Specifies the test name, and its source
    17   *
    18   * @generated from protobuf message testgrid.config.TestNameConfig
    19   */
    20  export interface TestNameConfig {
    21      /**
    22       * The name elements specifying the target test name for this tab.
    23       *
    24       * @generated from protobuf field: repeated testgrid.config.TestNameConfig.NameElement name_elements = 1;
    25       */
    26      nameElements: TestNameConfig_NameElement[];
    27      /**
    28       * Specifies a printf-style format string for name elements. The format
    29       * string should have as many conversions as there are name_elements.
    30       * For example, two name_elements could be used with name_format="%s: %s".
    31       *
    32       * @generated from protobuf field: string name_format = 2;
    33       */
    34      nameFormat: string;
    35  }
    36  /**
    37   * Specifies name elements to be selected from configuration values
    38   *
    39   * @generated from protobuf message testgrid.config.TestNameConfig.NameElement
    40   */
    41  export interface TestNameConfig_NameElement {
    42      /**
    43       * A space-delimited string of labels
    44       *
    45       * @generated from protobuf field: string labels = 1;
    46       */
    47      labels: string;
    48      /**
    49       * Configuration value to use.
    50       * Valid choice are:
    51       * 'Tests name': The name of a test case
    52       * 'Commit': The commit number of the build
    53       * 'Context', 'Thread': The info extracted from each junit files:
    54       *    - junit_core-os_01.xml -> Context: core-os, Thread: 01
    55       *    - junit_runner.xml -> Context: runner
    56       *    - junit_01.xml -> Thread: 01
    57       * or any metadata key from finished.json, which is copied from your test
    58       * suite.
    59       *
    60       * A valid sample TestNameConfig looks like:
    61       * test_name_config:
    62       *   name_elements:
    63       *   - target_config: Tests name
    64       *   - target_config: Context
    65       *   name_format: '%s [%s]'
    66       *
    67       * @generated from protobuf field: string target_config = 2;
    68       */
    69      targetConfig: string;
    70      /**
    71       * Whether to use the build-target name
    72       *
    73       * @generated from protobuf field: bool build_target = 3;
    74       */
    75      buildTarget: boolean;
    76      /**
    77       * A space-delimited string of Bazel build tags.
    78       *
    79       * @generated from protobuf field: string tags = 4;
    80       */
    81      tags: string;
    82      /**
    83       * The key of a test result's property.
    84       *
    85       * @generated from protobuf field: string test_property = 5;
    86       */
    87      testProperty: string;
    88  }
    89  /**
    90   * A single notification.
    91   *
    92   * @generated from protobuf message testgrid.config.Notification
    93   */
    94  export interface Notification {
    95      /**
    96       * Required: Text summary of the issue or notice.
    97       *
    98       * @generated from protobuf field: string summary = 1;
    99       */
   100      summary: string;
   101      /**
   102       * Optional: Link to further information, such as a bug, email, document, etc.
   103       *
   104       * @generated from protobuf field: string context_link = 2;
   105       */
   106      contextLink: string;
   107  }
   108  /**
   109   * Specifies a group of tests to gather.
   110   *
   111   * @generated from protobuf message testgrid.config.TestGroup
   112   */
   113  export interface TestGroup {
   114      /**
   115       * Name of this TestGroup, for mapping dashboard tabs to tests.
   116       *
   117       * @generated from protobuf field: string name = 1;
   118       */
   119      name: string;
   120      /**
   121       * Path to the test result stored in gcs (some-bucket/some/optional/path).
   122       *
   123       * @generated from protobuf field: string gcs_prefix = 2;
   124       */
   125      gcsPrefix: string;
   126      /**
   127       * Number of days of test results to gather and serve.
   128       *
   129       * @generated from protobuf field: int32 days_of_results = 3;
   130       */
   131      daysOfResults: number;
   132      /**
   133       * Whether to ignore pending (currently running) test results.
   134       *
   135       * @generated from protobuf field: bool ignore_pending = 4;
   136       */
   137      ignorePending: boolean;
   138      /**
   139       * Whether to ignore reported build results. It is recommended that tests
   140       * report BUILD_FAIL instead of relying on this being disabled.
   141       *
   142       * @generated from protobuf field: bool ignore_built = 5;
   143       */
   144      ignoreBuilt: boolean;
   145      /**
   146       * What to do with the 'Tests name' configuration value. It can replace the
   147       * name of the test, be appended to the name of the test, or ignored. If it is
   148       * ignored, then the name of the tests will be the build target.
   149       *
   150       * @generated from protobuf field: testgrid.config.TestGroup.TestsName tests_name_policy = 6;
   151       */
   152      testsNamePolicy: TestGroup_TestsName;
   153      /**
   154       * Tests with names that include these substrings will be removed from the
   155       * table.
   156       *
   157       * @generated from protobuf field: repeated string ignore_test_substring = 8;
   158       */
   159      ignoreTestSubstring: string[];
   160      /**
   161       * @generated from protobuf field: repeated testgrid.config.TestGroup.ColumnHeader column_header = 9;
   162       */
   163      columnHeader: TestGroup_ColumnHeader[];
   164      /**
   165       * A test grouping option used if not specified by primary_grouping (#29)
   166       *
   167       * @generated from protobuf field: testgrid.config.TestGroup.FallbackGrouping fallback_grouping = 10;
   168       */
   169      fallbackGrouping: TestGroup_FallbackGrouping;
   170      /**
   171       * DEPRECATED: use DashboardTabAlertOptions > alert_stale_result_hours
   172       *
   173       * @deprecated
   174       * @generated from protobuf field: int32 alert_stale_results_hours = 11 [deprecated = true];
   175       */
   176      alertStaleResultsHours: number;
   177      /**
   178       * DEPRECATED: use DashboardTabAlertOptions > num_failures_to_alert
   179       *
   180       * @deprecated
   181       * @generated from protobuf field: int32 num_failures_to_alert = 12 [deprecated = true];
   182       */
   183      numFailuresToAlert: number;
   184      /**
   185       * DEPRECATED: use dashboard_tab.beta_autobug_options.beta_autobug_component
   186       * instead.
   187       *
   188       * @deprecated
   189       * @generated from protobuf field: int32 bug_component = 13 [deprecated = true];
   190       */
   191      bugComponent: number;
   192      /**
   193       * Default code search path for searching regressions. Overridden by
   194       * code_search_path in DashboardTab.
   195       *
   196       * @generated from protobuf field: string code_search_path = 14;
   197       */
   198      codeSearchPath: string;
   199      /**
   200       * The number of columns to consider "recent" for a variety of purposes.
   201       *
   202       * @generated from protobuf field: int32 num_columns_recent = 15;
   203       */
   204      numColumnsRecent: number;
   205      /**
   206       * Whether to read test metadata from the test results. Information
   207       * from the test metadata is used to determine where bugs are filed in
   208       * specific cases.
   209       *
   210       * @generated from protobuf field: bool use_test_metadata = 16;
   211       */
   212      useTestMetadata: boolean;
   213      /**
   214       * DEPRECATED: use DashboardTabAlertOptions > alert_mail_to_address instead
   215       *
   216       * @deprecated
   217       * @generated from protobuf field: string alert_mail_to_addresses = 17 [deprecated = true];
   218       */
   219      alertMailToAddresses: string;
   220      /**
   221       * DEPRECATED: use DashboardTabAlertOptions > subject
   222       *
   223       * @deprecated
   224       * @generated from protobuf field: string alert_mail_subject = 18 [deprecated = true];
   225       */
   226      alertMailSubject: string;
   227      /**
   228       * DEPRECATED: use DashboardTabAlertOptions > alert_mail_failure_message
   229       *
   230       * @deprecated
   231       * @generated from protobuf field: string alert_mail_failure_message = 19 [deprecated = true];
   232       */
   233      alertMailFailureMessage: string;
   234      /**
   235       * DEPRECATED: use DashboardTabAlertOptions > debug_url
   236       *
   237       * @deprecated
   238       * @generated from protobuf field: string alert_mail_debug_url = 20 [deprecated = true];
   239       */
   240      alertMailDebugUrl: string;
   241      /**
   242       * DEPRECATED: use DashboardTabAlertOptions > wait_minutes_between_emails
   243       *
   244       * @deprecated
   245       * @generated from protobuf field: int32 min_elapsed_minutes_between_mails = 21 [deprecated = true];
   246       */
   247      minElapsedMinutesBetweenMails: number;
   248      /**
   249       * Whether to treat a combination of passes and failures within one test as a
   250       * flaky status.
   251       *
   252       * @generated from protobuf field: bool enable_flaky_status = 23;
   253       */
   254      enableFlakyStatus: boolean;
   255      /**
   256       * disable_merged_status will restores deprecated behavior of
   257       * splitting multiple foo rows into foo [2], etc rather a single
   258       * potentially flaky row.
   259       *
   260       * @generated from protobuf field: bool disable_merged_status = 60;
   261       */
   262      disableMergedStatus: boolean;
   263      /**
   264       * deprecated - always set to true
   265       *
   266       * @deprecated
   267       * @generated from protobuf field: bool use_kubernetes_client = 24 [deprecated = true];
   268       */
   269      useKubernetesClient: boolean;
   270      /**
   271       * When use_kubernetes_client is on testgrid expects these results
   272       * to come from prow, which should include a prowjob.json and podinfo.json
   273       * to help debugging. If you do not expect these files to exist, you
   274       * can optionally disable this analysis.
   275       *
   276       * @generated from protobuf field: bool disable_prowjob_analysis = 62;
   277       */
   278      disableProwjobAnalysis: boolean;
   279      /**
   280       * deprecated - always set to true
   281       *
   282       * @generated from protobuf field: bool is_external = 25;
   283       */
   284      isExternal: boolean;
   285      /**
   286       * Specifies the test name for a test.
   287       *
   288       * @generated from protobuf field: testgrid.config.TestNameConfig test_name_config = 26;
   289       */
   290      testNameConfig?: TestNameConfig;
   291      /**
   292       * A list of notifications attached to this test group.
   293       * This is displayed on any dashboard tab backed by this test group.
   294       *
   295       * @generated from protobuf field: repeated testgrid.config.Notification notifications = 27;
   296       */
   297      notifications: Notification[];
   298      /**
   299       * A primary grouping strategy for grouping test results in columns.
   300       * If a primary grouping is specified, the fallback grouping is ignored.
   301       *
   302       * @generated from protobuf field: testgrid.config.TestGroup.PrimaryGrouping primary_grouping = 29;
   303       */
   304      primaryGrouping: TestGroup_PrimaryGrouping;
   305      /**
   306       * Whether to collect pass-fail data for test methods. Additional test cases
   307       * will be added for each test method in a target.
   308       *
   309       * @generated from protobuf field: bool enable_test_methods = 30;
   310       */
   311      enableTestMethods: boolean;
   312      /**
   313       * Test annotations to look for. Adds custom icon to results.
   314       *
   315       * @generated from protobuf field: repeated testgrid.config.TestGroup.TestAnnotation test_annotations = 31;
   316       */
   317      testAnnotations: TestGroup_TestAnnotation[];
   318      /**
   319       * Maximum number of individual test methods to collect for any given test
   320       * row. If a test has more than this many methods, no methods will be
   321       * displayed.
   322       *
   323       * @generated from protobuf field: int32 max_test_methods_per_test = 32;
   324       */
   325      maxTestMethodsPerTest: number;
   326      /**
   327       * Default metadata that should be applied for opening bugs, if a given regex
   328       * matches against a test's name.
   329       * Requires 'use_test_metadata = true'.
   330       *
   331       * @generated from protobuf field: repeated testgrid.config.TestMetadataOptions test_metadata_options = 34;
   332       */
   333      testMetadataOptions: TestMetadataOptions[];
   334      /**
   335       * A space-delimited string of tags that are used to filter test targets.
   336       * A leading - before the tag means this tag should not be present
   337       * in the target.
   338       * Example:
   339       *  contains tag1, but not tag2: test_tag_pattern = 'tag1 -tag2'
   340       *
   341       * @generated from protobuf field: string test_tag_pattern = 35;
   342       */
   343      testTagPattern: string;
   344      /**
   345       * DEPRECATED: use dashboard_tab.beta_autobug_options instead.
   346       *
   347       * @deprecated
   348       * @generated from protobuf field: testgrid.config.AutoBugOptions auto_bug_options = 36 [deprecated = true];
   349       */
   350      autoBugOptions?: AutoBugOptions;
   351      /**
   352       * Max number of days any single test can take.
   353       *
   354       * @generated from protobuf field: int32 max_test_runtime_hours = 37;
   355       */
   356      maxTestRuntimeHours: number;
   357      /**
   358       * The number of consecutive test passes to close the alert.
   359       *
   360       * @generated from protobuf field: int32 num_passes_to_disable_alert = 38;
   361       */
   362      numPassesToDisableAlert: number;
   363      /**
   364       * If true, also associate bugs with tests if the test result's overview/group
   365       * ID is in the bug.
   366       *
   367       * @generated from protobuf field: bool link_bugs_by_group = 39;
   368       */
   369      linkBugsByGroup: boolean;
   370      /**
   371       * Only show test methods with all required properties
   372       *
   373       * @generated from protobuf field: repeated testgrid.config.TestGroup.KeyValue test_method_properties = 41;
   374       */
   375      testMethodProperties: TestGroup_KeyValue[];
   376      /**
   377       * If true, allows gathering and associating bugs with targets in the
   378       * dashboard. Required in order to auto-file bugs.
   379       *
   380       * @generated from protobuf field: bool gather_bugs = 42;
   381       */
   382      gatherBugs: boolean;
   383      /**
   384       * Numeric property metric value to be used for short text. If this property
   385       * is present, it will override all the other short text values.
   386       *
   387       * @generated from protobuf field: string short_text_metric = 43;
   388       */
   389      shortTextMetric: string;
   390      /**
   391       * The key of a key-value pair in metadata (a 'configuration value').
   392       * This overrides the default build with the value from the key-value pair.
   393       *
   394       * @generated from protobuf field: string build_override_configuration_value = 44;
   395       */
   396      buildOverrideConfigurationValue: string;
   397      /**
   398       * If true, only associate bugs with test methods if that test method is
   399       * mentioned in the bug. If false, bugs will be associated with all test
   400       * methods.
   401       *
   402       * @generated from protobuf field: bool link_bugs_by_test_methods = 45;
   403       */
   404      linkBugsByTestMethods: boolean;
   405      /**
   406       * Regex to match test methods. Only test methods with names that match
   407       * this regex will be included in the table.
   408       *
   409       * @generated from protobuf field: string test_method_match_regex = 46;
   410       */
   411      testMethodMatchRegex: string;
   412      /**
   413       * Regex to exclude test methods. Test methods with names that match
   414       * this regex will be excluded from the table, even if they match
   415       * test_method_match_regex.
   416       *
   417       * @generated from protobuf field: string test_method_unmatch_regex = 61;
   418       */
   419      testMethodUnmatchRegex: string;
   420      /**
   421       * If true, test method names are printed with the full class names.
   422       *
   423       * @generated from protobuf field: bool use_full_method_names = 47;
   424       */
   425      useFullMethodNames: boolean;
   426      /**
   427       * A configuration value that is used as a fallback grouping.
   428       * This is useful for cases where there are builds that shared the same
   429       * commit but are run at separate times of day.
   430       *
   431       * @generated from protobuf field: string fallback_grouping_configuration_value = 49;
   432       */
   433      fallbackGroupingConfigurationValue: string;
   434      /**
   435       * Configuration type of the result source.
   436       *
   437       * @generated from protobuf field: testgrid.config.TestGroup.ResultSource result_source = 50;
   438       */
   439      resultSource?: TestGroup_ResultSource;
   440      /**
   441       * Set of rules that are evaluated with each test result. If an evaluation is
   442       * successful, the status of that test result will be whatever is specified
   443       * for a given rule. For more information, look at RuleSet documention
   444       *
   445       * @generated from protobuf field: testgrid.custom_evaluator.RuleSet custom_evaluator_rule_set = 51;
   446       */
   447      customEvaluatorRuleSet?: RuleSet;
   448      /**
   449       * If true, instead of updating the group, read the state proto from storage
   450       * and update summary, alerts, etc. from that state.
   451       * This only applies to test group state, not bug state for a test group.
   452       * This assumes that the state proto is updated through other means (another
   453       * updater, manually, etc).
   454       *
   455       * @generated from protobuf field: bool read_state_from_storage = 52;
   456       */
   457      readStateFromStorage: boolean;
   458      /**
   459       * If true, only add the most recent result for a test when multiple results
   460       * for a test with the same name are encountered.
   461       *
   462       * @generated from protobuf field: bool ignore_old_results = 53;
   463       */
   464      ignoreOldResults: boolean;
   465      /**
   466       * If True, ignore the 'pass with skips' status (show as a blank cell).
   467       *
   468       * @generated from protobuf field: bool ignore_skip = 54;
   469       */
   470      ignoreSkip: boolean;
   471      /**
   472       * A string containing python formatting specifiers that overrides the
   473       * commit with the date formatted according to this string. This is useful
   474       * for aggregating multiple columns that don't have a matching commit.
   475       *
   476       * @generated from protobuf field: string build_override_strftime = 55;
   477       */
   478      buildOverrideStrftime: string;
   479      /**
   480       * Specify a property that will be read into state in the user_property field.
   481       * These can be substituted into LinkTemplates.
   482       *
   483       * @generated from protobuf field: string user_property = 56;
   484       */
   485      userProperty: string;
   486      /**
   487       * Where to gather linked issues from. (Currently a no-op).
   488       *
   489       * @generated from protobuf field: testgrid.config.IssueGatherOptions issue_gather_options = 63;
   490       */
   491      issueGatherOptions?: IssueGatherOptions;
   492  }
   493  /**
   494   * Custom column headers for defining extra column-heading rows from values in
   495   * the test result.
   496   *
   497   * @generated from protobuf message testgrid.config.TestGroup.ColumnHeader
   498   */
   499  export interface TestGroup_ColumnHeader {
   500      /**
   501       * @generated from protobuf field: string label = 1;
   502       */
   503      label: string;
   504      /**
   505       * @generated from protobuf field: string property = 2;
   506       */
   507      property: string;
   508      /**
   509       * @generated from protobuf field: string configuration_value = 3;
   510       */
   511      configurationValue: string;
   512      /**
   513       * If true, list all distinct values. Else, list multiple distinct values as
   514       * "*".
   515       *
   516       * @generated from protobuf field: bool list_all_values = 4;
   517       */
   518      listAllValues: boolean;
   519  }
   520  /**
   521   * Associates the presence of a named test property with a custom short text
   522   * displayed over the results. Short text must be <=5 characters long.
   523   *
   524   * @generated from protobuf message testgrid.config.TestGroup.TestAnnotation
   525   */
   526  export interface TestGroup_TestAnnotation {
   527      /**
   528       * @generated from protobuf field: string short_text = 1;
   529       */
   530      shortText: string;
   531      /**
   532       * @generated from protobuf oneof: short_text_message_source
   533       */
   534      shortTextMessageSource: {
   535          oneofKind: "propertyName";
   536          /**
   537           * @generated from protobuf field: string property_name = 2;
   538           */
   539          propertyName: string;
   540      } | {
   541          oneofKind: undefined;
   542      };
   543  }
   544  /**
   545   * A string key value pair message
   546   *
   547   * @generated from protobuf message testgrid.config.TestGroup.KeyValue
   548   */
   549  export interface TestGroup_KeyValue {
   550      /**
   551       * @generated from protobuf field: string key = 1;
   552       */
   553      key: string;
   554      /**
   555       * @generated from protobuf field: string value = 2;
   556       */
   557      value: string;
   558  }
   559  /**
   560   * @generated from protobuf message testgrid.config.TestGroup.ResultSource
   561   */
   562  export interface TestGroup_ResultSource {
   563      /**
   564       * @generated from protobuf oneof: result_source_config
   565       */
   566      resultSourceConfig: {
   567          oneofKind: "gcsConfig";
   568          /**
   569           * GCS buckets holding junit and json results, typically created by prow.
   570           *
   571           * @generated from protobuf field: testgrid.config.GCSConfig gcs_config = 2;
   572           */
   573          gcsConfig: GCSConfig;
   574      } | {
   575          oneofKind: undefined;
   576      };
   577  }
   578  /**
   579   * @generated from protobuf enum testgrid.config.TestGroup.TestsName
   580   */
   581  export enum TestGroup_TestsName {
   582      /**
   583       * @generated from protobuf enum value: TESTS_NAME_UNSPECIFIED = 0;
   584       */
   585      UNSPECIFIED = 0,
   586      /**
   587       * @generated from protobuf enum value: TESTS_NAME_IGNORE = 1;
   588       */
   589      IGNORE = 1,
   590      /**
   591       * @generated from protobuf enum value: TESTS_NAME_REPLACE = 2;
   592       */
   593      REPLACE = 2,
   594      /**
   595       * @generated from protobuf enum value: TESTS_NAME_APPEND = 3;
   596       */
   597      APPEND = 3
   598  }
   599  /**
   600   * @generated from protobuf enum testgrid.config.TestGroup.FallbackGrouping
   601   */
   602  export enum TestGroup_FallbackGrouping {
   603      /**
   604       * @generated from protobuf enum value: FALLBACK_GROUPING_NONE = 0;
   605       */
   606      NONE = 0,
   607      /**
   608       * @generated from protobuf enum value: FALLBACK_GROUPING_DATE = 1;
   609       */
   610      DATE = 1,
   611      /**
   612       * @generated from protobuf enum value: FALLBACK_GROUPING_LABELS = 2;
   613       */
   614      LABELS = 2,
   615      /**
   616       * @generated from protobuf enum value: FALLBACK_GROUPING_ID = 3;
   617       */
   618      ID = 3,
   619      /**
   620       * @generated from protobuf enum value: FALLBACK_GROUPING_BUILD = 4;
   621       */
   622      BUILD = 4,
   623      /**
   624       * When using this, ensure fallback_grouping_configuration_value is
   625       * also set.
   626       *
   627       * @generated from protobuf enum value: FALLBACK_GROUPING_CONFIGURATION_VALUE = 5;
   628       */
   629      CONFIGURATION_VALUE = 5
   630  }
   631  /**
   632   * @generated from protobuf enum testgrid.config.TestGroup.PrimaryGrouping
   633   */
   634  export enum TestGroup_PrimaryGrouping {
   635      /**
   636       * @generated from protobuf enum value: PRIMARY_GROUPING_NONE = 0;
   637       */
   638      NONE = 0,
   639      /**
   640       * @generated from protobuf enum value: PRIMARY_GROUPING_BUILD = 1;
   641       */
   642      BUILD = 1
   643  }
   644  /**
   645   * GCSConfig specifies results stored in GCS, typically created by prow.
   646   *
   647   * Each invocation is stored in a GCS path, containing json metadata files
   648   * as well as junit and other artifacts specifying the result of the run.
   649   *
   650   * More info:
   651   * https://github.com/GoogleCloudPlatform/testgrid/tree/master/metadata
   652   *
   653   * @generated from protobuf message testgrid.config.GCSConfig
   654   */
   655  export interface GCSConfig {
   656      /**
   657       * Path to the test result stored in gcs (some-bucket/some/optional/path).
   658       *
   659       * @generated from protobuf field: string gcs_prefix = 1;
   660       */
   661      gcsPrefix: string;
   662      /**
   663       * The GCP project where GCS sends notifications for the above prefix.
   664       *
   665       * @generated from protobuf field: string pubsub_project = 2;
   666       */
   667      pubsubProject: string;
   668      /**
   669       * The pubsub subscription ID in the above topic
   670       *
   671       * @generated from protobuf field: string pubsub_subscription = 3;
   672       */
   673      pubsubSubscription: string;
   674  }
   675  /**
   676   * Options for where to gather linked issues from.
   677   *
   678   * @generated from protobuf message testgrid.config.IssueGatherOptions
   679   */
   680  export interface IssueGatherOptions {
   681  }
   682  /**
   683   * Default metadata to apply when opening bugs.
   684   *
   685   * @generated from protobuf message testgrid.config.TestMetadataOptions
   686   */
   687  export interface TestMetadataOptions {
   688      /**
   689       * Apply the following metadata if this regex matches a test's name.
   690       *
   691       * @generated from protobuf field: string test_name_regex = 1;
   692       */
   693      testNameRegex: string;
   694      /**
   695       * Default bug component to open a bug in.
   696       *
   697       * @generated from protobuf field: int32 bug_component = 2;
   698       */
   699      bugComponent: number;
   700      /**
   701       * Default owner to assign a bug to.
   702       *
   703       * @generated from protobuf field: string owner = 3;
   704       */
   705      owner: string;
   706      /**
   707       * List of default users to CC a bug to.
   708       *
   709       * @generated from protobuf field: repeated string cc = 4;
   710       */
   711      cc: string[];
   712      /**
   713       * Apply following metadata if this regex matches a test’s failure message.
   714       *
   715       * @generated from protobuf field: string message_regex = 5;
   716       */
   717      messageRegex: string;
   718  }
   719  /**
   720   * @generated from protobuf message testgrid.config.AutoBugOptions
   721   */
   722  export interface AutoBugOptions {
   723      /**
   724       * [BETA] When specified, file bugs to this component, using the beta AutoBug.
   725       * If you do not want to opt into the beta, specify `bug_component` in your
   726       * TestGroup instead.
   727       * TODO(b/154866134): Rename to autobug_component once we've migrated.
   728       *
   729       * @generated from protobuf field: int32 beta_autobug_component = 10;
   730       */
   731      betaAutobugComponent: number;
   732      /**
   733       * Whether to auto-close auto-filed bugs.
   734       * Alias for "passing_behavior = CLOSE_ON_PASSING";
   735       *
   736       * @generated from protobuf field: bool auto_close = 1;
   737       */
   738      autoClose: boolean;
   739      /**
   740       * A list of hotlist ids attached to auto-filed bugs.
   741       *
   742       * @generated from protobuf field: repeated int64 hotlist_ids = 2;
   743       */
   744      hotlistIds: string[];
   745      /**
   746       * The priority of the auto-filed bug. If provided, this will overwrite the
   747       * priority in the component default template
   748       *
   749       * @generated from protobuf field: testgrid.config.AutoBugOptions.Priority priority = 3;
   750       */
   751      priority: AutoBugOptions_Priority;
   752      /**
   753       * A list of hotlist id sources
   754       * Corresponds with the list hotlist_ids (#2)
   755       *
   756       * @deprecated
   757       * @generated from protobuf field: repeated testgrid.config.HotlistIdFromSource hotlist_ids_from_source = 4 [deprecated = true];
   758       */
   759      hotlistIdsFromSource: HotlistIdFromSource[];
   760      /**
   761       * If True, files separate bugs for each failing target, instead of one bug
   762       * for each set of targets failing at the same run.
   763       *
   764       * @generated from protobuf field: bool file_individual = 5;
   765       */
   766      fileIndividual: boolean;
   767      /**
   768       * If True; keep only one automantic bug per target, regardless of the number
   769       * of separate failures a target gets. Requires `file_individual` to be True.
   770       * Consider setting `num_passes_to_disable_alert` instead if you're tracking
   771       * flaky tests.
   772       *
   773       * @generated from protobuf field: bool singleton_autobug = 6;
   774       */
   775      singletonAutobug: boolean;
   776      /**
   777       * If provided: only raise one bug if the number of failures for a single
   778       * query by testgrid for a single failure group exceeds this value. Requires
   779       * 'file_individual' to be True.
   780       *
   781       * @generated from protobuf field: int32 max_allowed_individual_bugs = 7;
   782       */
   783      maxAllowedIndividualBugs: number;
   784      /**
   785       * If True; file issues for the 'Overall' target, even if otherwise invalid.
   786       *
   787       * @generated from protobuf field: bool file_overall = 8;
   788       */
   789      fileOverall: boolean;
   790      /**
   791       * If provided: supplements `max_allowed_individual_bugs` field to raise a
   792       * single bug if the number of failures for a single query by testgrid exceeds
   793       * the max_allowed_individual_bugs` value, regardless of `TEST_METADATA`
   794       * configurations. This is useful for filing fewer suspected environmental
   795       * failure bugs and routing them to a specific location (i.e. an oncall).
   796       * Requires 'file_individual' to be true and `max_allowed_individual_bugs` to
   797       * not be empty.
   798       *
   799       * @generated from protobuf field: testgrid.config.AutoBugOptions.DefaultTestMetadata default_test_metadata = 9;
   800       */
   801      defaultTestMetadata?: AutoBugOptions_DefaultTestMetadata;
   802      /**
   803       * [BETA] If True, query the test metadata API to get issue-routing metadata.
   804       * Enables routing issues using structured test failures.
   805       *
   806       * @generated from protobuf field: bool advanced_test_metadata = 11;
   807       */
   808      advancedTestMetadata: boolean;
   809      /**
   810       * If True, file a bug when the tab goes stale.
   811       * (Requires `alert_stale_results_hours` to be set.)
   812       *
   813       * @generated from protobuf field: bool file_stale = 12;
   814       */
   815      fileStale: boolean;
   816      /**
   817       * If True, ignore overall rows when auto-filing.
   818       *
   819       * @generated from protobuf field: bool ignore_overall = 13;
   820       */
   821      ignoreOverall: boolean;
   822      /**
   823       * [BETA] Extra text displayed in opened bugs. e.g., for including a link to a
   824       * playbook.
   825       *
   826       * @generated from protobuf field: string note = 14;
   827       */
   828      note: string;
   829  }
   830  /**
   831   * @generated from protobuf message testgrid.config.AutoBugOptions.DefaultTestMetadata
   832   */
   833  export interface AutoBugOptions_DefaultTestMetadata {
   834      /**
   835       * @generated from protobuf field: int32 bug_component = 1;
   836       */
   837      bugComponent: number;
   838      /**
   839       * @generated from protobuf field: string owner = 2;
   840       */
   841      owner: string;
   842      /**
   843       * @generated from protobuf field: repeated string cc = 3;
   844       */
   845      cc: string[];
   846  }
   847  /**
   848   * Scale of issue priority, used to indicate importance of issue.
   849   *
   850   * @generated from protobuf enum testgrid.config.AutoBugOptions.Priority
   851   */
   852  export enum AutoBugOptions_Priority {
   853      /**
   854       * Unspecified; may not set priority at all
   855       *
   856       * @generated from protobuf enum value: PRIORITY_UNSPECIFIED = 0;
   857       */
   858      PRIORITY_UNSPECIFIED = 0,
   859      /**
   860       * See https://developers.google.com/issue-tracker/concepts/issues
   861       *
   862       * @generated from protobuf enum value: P0 = 1;
   863       */
   864      P0 = 1,
   865      /**
   866       * @generated from protobuf enum value: P1 = 2;
   867       */
   868      P1 = 2,
   869      /**
   870       * @generated from protobuf enum value: P2 = 3;
   871       */
   872      P2 = 3,
   873      /**
   874       * @generated from protobuf enum value: P3 = 4;
   875       */
   876      P3 = 4,
   877      /**
   878       * @generated from protobuf enum value: P4 = 5;
   879       */
   880      P4 = 5
   881  }
   882  /**
   883   * @generated from protobuf message testgrid.config.HotlistIdFromSource
   884   */
   885  export interface HotlistIdFromSource {
   886      /**
   887       * @generated from protobuf oneof: hotlist_id_source
   888       */
   889      hotlistIdSource: {
   890          oneofKind: "value";
   891          /**
   892           * ID value of hotlists
   893           *
   894           * @generated from protobuf field: int64 value = 1;
   895           */
   896          value: string;
   897      } | {
   898          oneofKind: "label";
   899          /**
   900           * A label prefix
   901           *
   902           * @generated from protobuf field: string label = 2;
   903           */
   904          label: string;
   905      } | {
   906          oneofKind: undefined;
   907      };
   908  }
   909  /**
   910   * Specifies a dashboard.
   911   *
   912   * @generated from protobuf message testgrid.config.Dashboard
   913   */
   914  export interface Dashboard {
   915      /**
   916       * A list of the tabs on the dashboard.
   917       *
   918       * @generated from protobuf field: repeated testgrid.config.DashboardTab dashboard_tab = 1;
   919       */
   920      dashboardTab: DashboardTab[];
   921      /**
   922       * A name for the Dashboard.
   923       *
   924       * @generated from protobuf field: string name = 2;
   925       */
   926      name: string;
   927      /**
   928       * A list of notifications attached to this dashboard.
   929       * This is displayed on any dashboard tab in this dashboard.
   930       *
   931       * @generated from protobuf field: repeated testgrid.config.Notification notifications = 3;
   932       */
   933      notifications: Notification[];
   934      /**
   935       * Control which tab is displayed when first opening a dashboard.
   936       * Defaults to Summary
   937       *
   938       * @generated from protobuf field: string default_tab = 5;
   939       */
   940      defaultTab: string;
   941      /**
   942       * Controls whether to suppress highlighting of failing tabs.
   943       *
   944       * @generated from protobuf field: bool downplay_failing_tabs = 8;
   945       */
   946      downplayFailingTabs: boolean;
   947      /**
   948       * Deprecated: Invert of 'downplay_failing_tabs'
   949       *
   950       * @deprecated
   951       * @generated from protobuf field: bool highlight_failing_tabs = 6 [deprecated = true];
   952       */
   953      highlightFailingTabs: boolean;
   954      /**
   955       * Controls whether to apply special highlighting to result header columns for
   956       * the current day.
   957       *
   958       * @generated from protobuf field: bool highlight_today = 7;
   959       */
   960      highlightToday: boolean;
   961      /**
   962       * A description paragraph to be displayed.
   963       *
   964       * @generated from protobuf field: string description = 9;
   965       */
   966      description: string;
   967  }
   968  /**
   969   * @generated from protobuf message testgrid.config.LinkTemplate
   970   */
   971  export interface LinkTemplate {
   972      /**
   973       * The URL template.
   974       *
   975       * @generated from protobuf field: string url = 1;
   976       */
   977      url: string;
   978      /**
   979       * The options templates.
   980       *
   981       * @generated from protobuf field: repeated testgrid.config.LinkOptionsTemplate options = 2;
   982       */
   983      options: LinkOptionsTemplate[];
   984      /**
   985       * An optional name, used for the context menu
   986       *
   987       * @generated from protobuf field: string name = 3;
   988       */
   989      name: string;
   990  }
   991  /**
   992   * A simple key/value pair for link options.
   993   *
   994   * @generated from protobuf message testgrid.config.LinkOptionsTemplate
   995   */
   996  export interface LinkOptionsTemplate {
   997      /**
   998       * The key for the option. This is not expanded.
   999       *
  1000       * @generated from protobuf field: string key = 1;
  1001       */
  1002      key: string;
  1003      /**
  1004       * The value for the option. This is expanded the same as the LinkTemplate.
  1005       *
  1006       * @generated from protobuf field: string value = 2;
  1007       */
  1008      value: string;
  1009  }
  1010  /**
  1011   * A single tab on a dashboard.
  1012   *
  1013   * @generated from protobuf message testgrid.config.DashboardTab
  1014   */
  1015  export interface DashboardTab {
  1016      /**
  1017       * The name of the dashboard tab to display in the client.
  1018       *
  1019       * @generated from protobuf field: string name = 1;
  1020       */
  1021      name: string;
  1022      /**
  1023       * The name of the TestGroup specifying the test results for this tab.
  1024       *
  1025       * @generated from protobuf field: string test_group_name = 2;
  1026       */
  1027      testGroupName: string;
  1028      /**
  1029       * Default bug component for manually filing bugs from the dashboard
  1030       *
  1031       * @generated from protobuf field: int32 bug_component = 3;
  1032       */
  1033      bugComponent: number;
  1034      /**
  1035       * Default code search path for searching regressions. This value overrides
  1036       * the default in the TestGroup config so that dashboards may be customized
  1037       * separately.
  1038       *
  1039       * @generated from protobuf field: string code_search_path = 4;
  1040       */
  1041      codeSearchPath: string;
  1042      /**
  1043       * See TestGroup.num_columns_recent. This value overrides the default in the
  1044       * TestGroup config so that dashboards may be customized separately.
  1045       *
  1046       * @generated from protobuf field: int32 num_columns_recent = 5;
  1047       */
  1048      numColumnsRecent: number;
  1049      /**
  1050       * Base options to always include, for example:
  1051       * width=20&include-filter-by-regex=level_tests
  1052       * This is taken from the #fragment part of the testgrid url.
  1053       * Best way to create these is to setup the options on testgrid and then
  1054       * copy the #fragment part.
  1055       *
  1056       * @generated from protobuf field: string base_options = 6;
  1057       */
  1058      baseOptions: string;
  1059      /**
  1060       * The URL template to visit after clicking on a cell.
  1061       *
  1062       * @generated from protobuf field: testgrid.config.LinkTemplate open_test_template = 7;
  1063       */
  1064      openTestTemplate?: LinkTemplate;
  1065      /**
  1066       * The URL template to visit when filing a bug.
  1067       *
  1068       * @generated from protobuf field: testgrid.config.LinkTemplate file_bug_template = 8;
  1069       */
  1070      fileBugTemplate?: LinkTemplate;
  1071      /**
  1072       * The URL template to visit when attaching a bug
  1073       *
  1074       * @generated from protobuf field: testgrid.config.LinkTemplate attach_bug_template = 9;
  1075       */
  1076      attachBugTemplate?: LinkTemplate;
  1077      /**
  1078       * Text to show in the about menu as a link to another view of the results.
  1079       *
  1080       * @generated from protobuf field: string results_text = 10;
  1081       */
  1082      resultsText: string;
  1083      /**
  1084       * The URL template to visit after clicking.
  1085       *
  1086       * @generated from protobuf field: testgrid.config.LinkTemplate results_url_template = 11;
  1087       */
  1088      resultsUrlTemplate?: LinkTemplate;
  1089      /**
  1090       * The URL template to visit when searching for code changes, such as pull
  1091       * requests
  1092       *
  1093       * @generated from protobuf field: testgrid.config.LinkTemplate code_search_url_template = 12;
  1094       */
  1095      codeSearchUrlTemplate?: LinkTemplate;
  1096      /**
  1097       * A description paragraph to be displayed.
  1098       *
  1099       * @generated from protobuf field: string description = 13;
  1100       */
  1101      description: string;
  1102      /**
  1103       * A regular expression that uses the named group syntax to specify how to
  1104       * show names in a table.
  1105       *
  1106       * @generated from protobuf field: string tabular_names_regex = 14;
  1107       */
  1108      tabularNamesRegex: string;
  1109      /**
  1110       * Configuration options for dashboard tab alerts.
  1111       *
  1112       * @generated from protobuf field: testgrid.config.DashboardTabAlertOptions alert_options = 15;
  1113       */
  1114      alertOptions?: DashboardTabAlertOptions;
  1115      /**
  1116       * Configuration options for dashboard tab flakiness alerts.
  1117       *
  1118       * @generated from protobuf field: testgrid.config.DashboardTabFlakinessAlertOptions flakiness_alert_options = 24;
  1119       */
  1120      flakinessAlertOptions?: DashboardTabFlakinessAlertOptions;
  1121      /**
  1122       * Configuration options for customizing dashboard tab status calculation.
  1123       *
  1124       * @generated from protobuf field: testgrid.config.DashboardTabStatusCustomizationOptions status_customization_options = 26;
  1125       */
  1126      statusCustomizationOptions?: DashboardTabStatusCustomizationOptions;
  1127      /**
  1128       * A URL for the "About this Dashboard" menu option
  1129       *
  1130       * @generated from protobuf field: string about_dashboard_url = 16;
  1131       */
  1132      aboutDashboardUrl: string;
  1133      /**
  1134       * The URL template to visit when viewing an associated bug.
  1135       *
  1136       * @generated from protobuf field: testgrid.config.LinkTemplate open_bug_template = 17;
  1137       */
  1138      openBugTemplate?: LinkTemplate;
  1139      /**
  1140       * If true, auto-file bugs when new alerts occur. This requires that the
  1141       * backing test group has `bug_component` set and uses the backing test
  1142       * group's `auto_bug_options`.
  1143       *
  1144       * @generated from protobuf field: bool auto_file_bugs = 18;
  1145       */
  1146      autoFileBugs: boolean;
  1147      /**
  1148       * Display user local time on the dashboard when set to true (by default).
  1149       * If false, uses Pacific Timezone for this DashboardTab.
  1150       *
  1151       * @generated from protobuf field: bool display_local_time = 19;
  1152       */
  1153      displayLocalTime: boolean;
  1154      /**
  1155       * A set of optional LinkTemplates that will become right-click context menu
  1156       * items.
  1157       * TODO(b/159042168) in the near future this should be re-implemented as a
  1158       * generic list of repeated LinkTemplates which users may specify in their
  1159       * reqpective configurations as right-click context menus with names and
  1160       * actions upon being clicked.
  1161       *
  1162       * @generated from protobuf field: testgrid.config.LinkTemplate context_menu_template = 20;
  1163       */
  1164      contextMenuTemplate?: LinkTemplate;
  1165      /**
  1166       * When specified, treat a tab as BROKEN as long as one of the most recent
  1167       * columns are "broken" (ratio of failed to total tests exceeds <threshold>).
  1168       *
  1169       * @generated from protobuf field: float broken_column_threshold = 21;
  1170       */
  1171      brokenColumnThreshold: number;
  1172      /**
  1173       * Options for auto-filed bugs.
  1174       * Using this for a dashboard tab requires specifying `beta_autobug_component`
  1175       * and will opt you into the beta AutoBug.
  1176       *
  1177       * @generated from protobuf field: testgrid.config.AutoBugOptions beta_autobug_options = 22;
  1178       */
  1179      betaAutobugOptions?: AutoBugOptions;
  1180      /**
  1181       * Options for the configuration of the flakiness analysis tool, on a per tab
  1182       * basis
  1183       *
  1184       * @generated from protobuf field: testgrid.config.HealthAnalysisOptions health_analysis_options = 23;
  1185       */
  1186      healthAnalysisOptions?: HealthAnalysisOptions;
  1187      /**
  1188       * A set of optional Link Templates when search for diffs between columns.
  1189       *
  1190       * @generated from protobuf field: repeated testgrid.config.LinkTemplate column_diff_link_templates = 25;
  1191       */
  1192      columnDiffLinkTemplates: LinkTemplate[];
  1193  }
  1194  /**
  1195   * Configuration options for dashboard tab alerts.
  1196   *
  1197   * @generated from protobuf message testgrid.config.DashboardTabAlertOptions
  1198   */
  1199  export interface DashboardTabAlertOptions {
  1200      /**
  1201       * Time in hours before an alert will be added to a test results table if the
  1202       * run date of the latest results are older than this time.  If zero, no
  1203       * alerts are raised.
  1204       *
  1205       * @generated from protobuf field: int32 alert_stale_results_hours = 1;
  1206       */
  1207      alertStaleResultsHours: number;
  1208      /**
  1209       * The number of consecutive test result failures to see before alerting of
  1210       * a consistent failure. If zero, no alerts are raised.
  1211       *
  1212       * @generated from protobuf field: int32 num_failures_to_alert = 2;
  1213       */
  1214      numFailuresToAlert: number;
  1215      /**
  1216       * The comma-separated addresses to send mail.
  1217       *
  1218       * @generated from protobuf field: string alert_mail_to_addresses = 3;
  1219       */
  1220      alertMailToAddresses: string;
  1221      /**
  1222       * The number of consecutive test passes to close the alert.
  1223       *
  1224       * @generated from protobuf field: int32 num_passes_to_disable_alert = 4;
  1225       */
  1226      numPassesToDisableAlert: number;
  1227      /**
  1228       * Custom subject for alert mails.
  1229       *
  1230       * @generated from protobuf field: string subject = 5;
  1231       */
  1232      subject: string;
  1233      /**
  1234       * Custom link for further help/instructions on debugging this alert.
  1235       *
  1236       * @generated from protobuf field: string debug_url = 6;
  1237       */
  1238      debugUrl: string;
  1239      /**
  1240       * Custom text to show for the debug link.
  1241       *
  1242       * @generated from protobuf field: string debug_message = 7;
  1243       */
  1244      debugMessage: string;
  1245      /**
  1246       * Wait time between emails. If unset or zero, an email will be sent only once
  1247       * it becomes a consistent failure, and not again until it succeeds.
  1248       * TestGrid does not pester about staleness
  1249       *
  1250       * @generated from protobuf field: int32 wait_minutes_between_emails = 8;
  1251       */
  1252      waitMinutesBetweenEmails: number;
  1253      /**
  1254       * A custom message
  1255       *
  1256       * @generated from protobuf field: string alert_mail_failure_message = 9;
  1257       */
  1258      alertMailFailureMessage: string;
  1259  }
  1260  /**
  1261   * Configuration options for dashboard tab flakiness alerts.
  1262   *
  1263   * @generated from protobuf message testgrid.config.DashboardTabFlakinessAlertOptions
  1264   */
  1265  export interface DashboardTabFlakinessAlertOptions {
  1266      /**
  1267       * The minimum amount of flakiness needed to trigger a flakiness alert.
  1268       * 0=Disable alerts
  1269       * This is a percentage; expected values go from 0 to 100 (100 = 100% flaky)
  1270       *
  1271       * @generated from protobuf field: float minimum_flakiness_to_alert = 1;
  1272       */
  1273      minimumFlakinessToAlert: number;
  1274      /**
  1275       * The comma-separated addresses to send mail.
  1276       *
  1277       * @generated from protobuf field: string alert_mail_to_addresses = 2;
  1278       */
  1279      alertMailToAddresses: string;
  1280      /**
  1281       * Custom subject for alert mails.
  1282       *
  1283       * @generated from protobuf field: string subject = 3;
  1284       */
  1285      subject: string;
  1286      /**
  1287       * Minimum time between sending mails.
  1288       *
  1289       * @generated from protobuf field: int32 wait_minutes_between_emails = 4;
  1290       */
  1291      waitMinutesBetweenEmails: number;
  1292      /**
  1293       * A custom message
  1294       * TODO(RonWeber): This should be a template
  1295       *
  1296       * @generated from protobuf field: string alert_mail_failure_message = 5;
  1297       */
  1298      alertMailFailureMessage: string;
  1299  }
  1300  /**
  1301   * Configuration options for customizing the tab status calculation.
  1302   *
  1303   * @generated from protobuf message testgrid.config.DashboardTabStatusCustomizationOptions
  1304   */
  1305  export interface DashboardTabStatusCustomizationOptions {
  1306      /**
  1307       * Maximum amount of flakiness tolerated to categorize tab as acceptable. Will
  1308       * supplement dashboard tab status message, and mark the tab as ACCEPTABLE in
  1309       * the dashboard group view. Set to "0" to disable. This is configured as a
  1310       * percentage of valid (non-ignored) columns; expected values go from 0.0 to
  1311       * 100.0 (100% = no passing columns is acceptable)
  1312       *
  1313       * @generated from protobuf field: float max_acceptable_flakiness = 1;
  1314       */
  1315      maxAcceptableFlakiness: number;
  1316      /**
  1317       * @generated from protobuf field: repeated testgrid.config.DashboardTabStatusCustomizationOptions.IgnoredTestStatus ignored_test_statuses = 2;
  1318       */
  1319      ignoredTestStatuses: DashboardTabStatusCustomizationOptions_IgnoredTestStatus[];
  1320      /**
  1321       * Minimum number of runs required excluding ignored ones.
  1322       * If the non-ignored columns is less than this, tab status will be PENDING.
  1323       *
  1324       * @generated from protobuf field: int32 min_acceptable_runs = 3;
  1325       */
  1326      minAcceptableRuns: number;
  1327  }
  1328  /**
  1329   * Columns which contain cells with any status configure below will be
  1330   * ignored. Ignored columns affect the computation of flakiness and
  1331   * non-ignored number of runs.
  1332   *
  1333   * @generated from protobuf enum testgrid.config.DashboardTabStatusCustomizationOptions.IgnoredTestStatus
  1334   */
  1335  export enum DashboardTabStatusCustomizationOptions_IgnoredTestStatus {
  1336      /**
  1337       * @generated from protobuf enum value: TEST_STATUS_UNSPECIFIED = 0;
  1338       */
  1339      TEST_STATUS_UNSPECIFIED = 0,
  1340      /**
  1341       * @generated from protobuf enum value: CATEGORIZED_ABORT = 1;
  1342       */
  1343      CATEGORIZED_ABORT = 1,
  1344      /**
  1345       * @generated from protobuf enum value: UNKNOWN = 2;
  1346       */
  1347      UNKNOWN = 2,
  1348      /**
  1349       * @generated from protobuf enum value: CANCEL = 3;
  1350       */
  1351      CANCEL = 3,
  1352      /**
  1353       * @generated from protobuf enum value: BLOCKED = 4;
  1354       */
  1355      BLOCKED = 4
  1356  }
  1357  /**
  1358   * Specifies a dashboard group.
  1359   *
  1360   * @generated from protobuf message testgrid.config.DashboardGroup
  1361   */
  1362  export interface DashboardGroup {
  1363      /**
  1364       * The name for the dashboard group.
  1365       *
  1366       * @generated from protobuf field: string name = 1;
  1367       */
  1368      name: string;
  1369      /**
  1370       * A list of names specifying dashboards to show links to in a separate tabbed
  1371       * bar at the top of the page for each of the given dashboards.
  1372       *
  1373       * @generated from protobuf field: repeated string dashboard_names = 2;
  1374       */
  1375      dashboardNames: string[];
  1376      /**
  1377       * A description paragraph to be displayed.
  1378       *
  1379       * @generated from protobuf field: string description = 3;
  1380       */
  1381      description: string;
  1382  }
  1383  /**
  1384   * A service configuration consisting of multiple test groups and dashboards.
  1385   *
  1386   * @generated from protobuf message testgrid.config.Configuration
  1387   */
  1388  export interface Configuration {
  1389      /**
  1390       * A list of groups of tests to gather.
  1391       *
  1392       * @generated from protobuf field: repeated testgrid.config.TestGroup test_groups = 1;
  1393       */
  1394      testGroups: TestGroup[];
  1395      /**
  1396       * A list of all of the dashboards for a server.
  1397       *
  1398       * @generated from protobuf field: repeated testgrid.config.Dashboard dashboards = 2;
  1399       */
  1400      dashboards: Dashboard[];
  1401      /**
  1402       * A list of all the dashboard groups for a server.
  1403       *
  1404       * @generated from protobuf field: repeated testgrid.config.DashboardGroup dashboard_groups = 3;
  1405       */
  1406      dashboardGroups: DashboardGroup[];
  1407  }
  1408  /**
  1409   * A grouping of configuration options for the flakiness analysis tool.
  1410   * Later configuration options could include the ability to choose different
  1411   * kinds of flakiness and choosing if and who to email a copy of the flakiness
  1412   * report.
  1413   *
  1414   * @generated from protobuf message testgrid.config.HealthAnalysisOptions
  1415   */
  1416  export interface HealthAnalysisOptions {
  1417      /**
  1418       * Defaults to false; flakiness analysis is opt-in
  1419       *
  1420       * @generated from protobuf field: bool enable = 1;
  1421       */
  1422      enable: boolean;
  1423      /**
  1424       * Defines the number of days for one interval of analysis.
  1425       * i.e. flakiness will be analyzed for the previous N days starting from Now,
  1426       * and it will be compared to the calculated N days before that for trend
  1427       * analysis.
  1428       *
  1429       * @generated from protobuf field: int32 days_of_analysis = 2;
  1430       */
  1431      daysOfAnalysis: number;
  1432      /**
  1433       * When to send healthiness emails out, uses cron string format.
  1434       *
  1435       * @generated from protobuf field: string email_schedule = 3;
  1436       */
  1437      emailSchedule: string;
  1438      /**
  1439       * A comma-separated list of healthiness email recipients.
  1440       *
  1441       * @generated from protobuf field: string email_recipients = 4;
  1442       */
  1443      emailRecipients: string;
  1444      /**
  1445       * A compilable regex string for grouping tests by name.
  1446       * Works the same as the group-by-regex-mask option of base_options:
  1447       * go/testgrid/users/dashboard_guide#grouping-tests
  1448       * An empty string means no grouping.
  1449       * e.g. test name: "//path/to/test - env", regex: ` - \w+`
  1450       * The regex will match " - env" in the above test name and give a group of:
  1451       * //path/to/test  <- Group Name
  1452       *     - env       <- Group Member
  1453       *
  1454       * @generated from protobuf field: string grouping_regex = 5;
  1455       */
  1456      groupingRegex: string;
  1457  }
  1458  /**
  1459   * The DefaultConfiguration Proto is deprecated, and will be deleted after Nov
  1460   * 1, 2019. For defaulting behavior, use the yamlcfg library instead.
  1461   *
  1462   * @generated from protobuf message testgrid.config.DefaultConfiguration
  1463   */
  1464  export interface DefaultConfiguration {
  1465      /**
  1466       * A default testgroup with default initialization data
  1467       *
  1468       * @deprecated
  1469       * @generated from protobuf field: testgrid.config.TestGroup default_test_group = 1 [deprecated = true];
  1470       */
  1471      defaultTestGroup?: TestGroup;
  1472      /**
  1473       * A default dashboard tab with default initialization data
  1474       *
  1475       * @deprecated
  1476       * @generated from protobuf field: testgrid.config.DashboardTab default_dashboard_tab = 2 [deprecated = true];
  1477       */
  1478      defaultDashboardTab?: DashboardTab;
  1479  }
  1480  // @generated message type with reflection information, may provide speed optimized methods
  1481  class TestNameConfig$Type extends MessageType<TestNameConfig> {
  1482      constructor() {
  1483          super("testgrid.config.TestNameConfig", [
  1484              { no: 1, name: "name_elements", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => TestNameConfig_NameElement },
  1485              { no: 2, name: "name_format", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
  1486          ]);
  1487      }
  1488      create(value?: PartialMessage<TestNameConfig>): TestNameConfig {
  1489          const message = { nameElements: [], nameFormat: "" };
  1490          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  1491          if (value !== undefined)
  1492              reflectionMergePartial<TestNameConfig>(this, message, value);
  1493          return message;
  1494      }
  1495      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TestNameConfig): TestNameConfig {
  1496          let message = target ?? this.create(), end = reader.pos + length;
  1497          while (reader.pos < end) {
  1498              let [fieldNo, wireType] = reader.tag();
  1499              switch (fieldNo) {
  1500                  case /* repeated testgrid.config.TestNameConfig.NameElement name_elements */ 1:
  1501                      message.nameElements.push(TestNameConfig_NameElement.internalBinaryRead(reader, reader.uint32(), options));
  1502                      break;
  1503                  case /* string name_format */ 2:
  1504                      message.nameFormat = reader.string();
  1505                      break;
  1506                  default:
  1507                      let u = options.readUnknownField;
  1508                      if (u === "throw")
  1509                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  1510                      let d = reader.skip(wireType);
  1511                      if (u !== false)
  1512                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  1513              }
  1514          }
  1515          return message;
  1516      }
  1517      internalBinaryWrite(message: TestNameConfig, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  1518          /* repeated testgrid.config.TestNameConfig.NameElement name_elements = 1; */
  1519          for (let i = 0; i < message.nameElements.length; i++)
  1520              TestNameConfig_NameElement.internalBinaryWrite(message.nameElements[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
  1521          /* string name_format = 2; */
  1522          if (message.nameFormat !== "")
  1523              writer.tag(2, WireType.LengthDelimited).string(message.nameFormat);
  1524          let u = options.writeUnknownFields;
  1525          if (u !== false)
  1526              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  1527          return writer;
  1528      }
  1529  }
  1530  /**
  1531   * @generated MessageType for protobuf message testgrid.config.TestNameConfig
  1532   */
  1533  export const TestNameConfig = new TestNameConfig$Type();
  1534  // @generated message type with reflection information, may provide speed optimized methods
  1535  class TestNameConfig_NameElement$Type extends MessageType<TestNameConfig_NameElement> {
  1536      constructor() {
  1537          super("testgrid.config.TestNameConfig.NameElement", [
  1538              { no: 1, name: "labels", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1539              { no: 2, name: "target_config", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1540              { no: 3, name: "build_target", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1541              { no: 4, name: "tags", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1542              { no: 5, name: "test_property", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
  1543          ]);
  1544      }
  1545      create(value?: PartialMessage<TestNameConfig_NameElement>): TestNameConfig_NameElement {
  1546          const message = { labels: "", targetConfig: "", buildTarget: false, tags: "", testProperty: "" };
  1547          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  1548          if (value !== undefined)
  1549              reflectionMergePartial<TestNameConfig_NameElement>(this, message, value);
  1550          return message;
  1551      }
  1552      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TestNameConfig_NameElement): TestNameConfig_NameElement {
  1553          let message = target ?? this.create(), end = reader.pos + length;
  1554          while (reader.pos < end) {
  1555              let [fieldNo, wireType] = reader.tag();
  1556              switch (fieldNo) {
  1557                  case /* string labels */ 1:
  1558                      message.labels = reader.string();
  1559                      break;
  1560                  case /* string target_config */ 2:
  1561                      message.targetConfig = reader.string();
  1562                      break;
  1563                  case /* bool build_target */ 3:
  1564                      message.buildTarget = reader.bool();
  1565                      break;
  1566                  case /* string tags */ 4:
  1567                      message.tags = reader.string();
  1568                      break;
  1569                  case /* string test_property */ 5:
  1570                      message.testProperty = reader.string();
  1571                      break;
  1572                  default:
  1573                      let u = options.readUnknownField;
  1574                      if (u === "throw")
  1575                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  1576                      let d = reader.skip(wireType);
  1577                      if (u !== false)
  1578                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  1579              }
  1580          }
  1581          return message;
  1582      }
  1583      internalBinaryWrite(message: TestNameConfig_NameElement, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  1584          /* string labels = 1; */
  1585          if (message.labels !== "")
  1586              writer.tag(1, WireType.LengthDelimited).string(message.labels);
  1587          /* string target_config = 2; */
  1588          if (message.targetConfig !== "")
  1589              writer.tag(2, WireType.LengthDelimited).string(message.targetConfig);
  1590          /* bool build_target = 3; */
  1591          if (message.buildTarget !== false)
  1592              writer.tag(3, WireType.Varint).bool(message.buildTarget);
  1593          /* string tags = 4; */
  1594          if (message.tags !== "")
  1595              writer.tag(4, WireType.LengthDelimited).string(message.tags);
  1596          /* string test_property = 5; */
  1597          if (message.testProperty !== "")
  1598              writer.tag(5, WireType.LengthDelimited).string(message.testProperty);
  1599          let u = options.writeUnknownFields;
  1600          if (u !== false)
  1601              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  1602          return writer;
  1603      }
  1604  }
  1605  /**
  1606   * @generated MessageType for protobuf message testgrid.config.TestNameConfig.NameElement
  1607   */
  1608  export const TestNameConfig_NameElement = new TestNameConfig_NameElement$Type();
  1609  // @generated message type with reflection information, may provide speed optimized methods
  1610  class Notification$Type extends MessageType<Notification> {
  1611      constructor() {
  1612          super("testgrid.config.Notification", [
  1613              { no: 1, name: "summary", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1614              { no: 2, name: "context_link", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
  1615          ]);
  1616      }
  1617      create(value?: PartialMessage<Notification>): Notification {
  1618          const message = { summary: "", contextLink: "" };
  1619          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  1620          if (value !== undefined)
  1621              reflectionMergePartial<Notification>(this, message, value);
  1622          return message;
  1623      }
  1624      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Notification): Notification {
  1625          let message = target ?? this.create(), end = reader.pos + length;
  1626          while (reader.pos < end) {
  1627              let [fieldNo, wireType] = reader.tag();
  1628              switch (fieldNo) {
  1629                  case /* string summary */ 1:
  1630                      message.summary = reader.string();
  1631                      break;
  1632                  case /* string context_link */ 2:
  1633                      message.contextLink = reader.string();
  1634                      break;
  1635                  default:
  1636                      let u = options.readUnknownField;
  1637                      if (u === "throw")
  1638                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  1639                      let d = reader.skip(wireType);
  1640                      if (u !== false)
  1641                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  1642              }
  1643          }
  1644          return message;
  1645      }
  1646      internalBinaryWrite(message: Notification, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  1647          /* string summary = 1; */
  1648          if (message.summary !== "")
  1649              writer.tag(1, WireType.LengthDelimited).string(message.summary);
  1650          /* string context_link = 2; */
  1651          if (message.contextLink !== "")
  1652              writer.tag(2, WireType.LengthDelimited).string(message.contextLink);
  1653          let u = options.writeUnknownFields;
  1654          if (u !== false)
  1655              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  1656          return writer;
  1657      }
  1658  }
  1659  /**
  1660   * @generated MessageType for protobuf message testgrid.config.Notification
  1661   */
  1662  export const Notification = new Notification$Type();
  1663  // @generated message type with reflection information, may provide speed optimized methods
  1664  class TestGroup$Type extends MessageType<TestGroup> {
  1665      constructor() {
  1666          super("testgrid.config.TestGroup", [
  1667              { no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1668              { no: 2, name: "gcs_prefix", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1669              { no: 3, name: "days_of_results", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  1670              { no: 4, name: "ignore_pending", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1671              { no: 5, name: "ignore_built", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1672              { no: 6, name: "tests_name_policy", kind: "enum", T: () => ["testgrid.config.TestGroup.TestsName", TestGroup_TestsName, "TESTS_NAME_"] },
  1673              { no: 8, name: "ignore_test_substring", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
  1674              { no: 9, name: "column_header", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => TestGroup_ColumnHeader },
  1675              { no: 10, name: "fallback_grouping", kind: "enum", T: () => ["testgrid.config.TestGroup.FallbackGrouping", TestGroup_FallbackGrouping, "FALLBACK_GROUPING_"] },
  1676              { no: 11, name: "alert_stale_results_hours", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  1677              { no: 12, name: "num_failures_to_alert", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  1678              { no: 13, name: "bug_component", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  1679              { no: 14, name: "code_search_path", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1680              { no: 15, name: "num_columns_recent", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  1681              { no: 16, name: "use_test_metadata", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1682              { no: 17, name: "alert_mail_to_addresses", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1683              { no: 18, name: "alert_mail_subject", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1684              { no: 19, name: "alert_mail_failure_message", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1685              { no: 20, name: "alert_mail_debug_url", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1686              { no: 21, name: "min_elapsed_minutes_between_mails", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  1687              { no: 23, name: "enable_flaky_status", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1688              { no: 60, name: "disable_merged_status", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1689              { no: 24, name: "use_kubernetes_client", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1690              { no: 62, name: "disable_prowjob_analysis", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1691              { no: 25, name: "is_external", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1692              { no: 26, name: "test_name_config", kind: "message", T: () => TestNameConfig },
  1693              { no: 27, name: "notifications", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Notification },
  1694              { no: 29, name: "primary_grouping", kind: "enum", T: () => ["testgrid.config.TestGroup.PrimaryGrouping", TestGroup_PrimaryGrouping, "PRIMARY_GROUPING_"] },
  1695              { no: 30, name: "enable_test_methods", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1696              { no: 31, name: "test_annotations", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => TestGroup_TestAnnotation },
  1697              { no: 32, name: "max_test_methods_per_test", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  1698              { no: 34, name: "test_metadata_options", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => TestMetadataOptions },
  1699              { no: 35, name: "test_tag_pattern", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1700              { no: 36, name: "auto_bug_options", kind: "message", T: () => AutoBugOptions },
  1701              { no: 37, name: "max_test_runtime_hours", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  1702              { no: 38, name: "num_passes_to_disable_alert", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  1703              { no: 39, name: "link_bugs_by_group", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1704              { no: 41, name: "test_method_properties", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => TestGroup_KeyValue },
  1705              { no: 42, name: "gather_bugs", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1706              { no: 43, name: "short_text_metric", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1707              { no: 44, name: "build_override_configuration_value", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1708              { no: 45, name: "link_bugs_by_test_methods", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1709              { no: 46, name: "test_method_match_regex", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1710              { no: 61, name: "test_method_unmatch_regex", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1711              { no: 47, name: "use_full_method_names", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1712              { no: 49, name: "fallback_grouping_configuration_value", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1713              { no: 50, name: "result_source", kind: "message", T: () => TestGroup_ResultSource },
  1714              { no: 51, name: "custom_evaluator_rule_set", kind: "message", T: () => RuleSet },
  1715              { no: 52, name: "read_state_from_storage", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1716              { no: 53, name: "ignore_old_results", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1717              { no: 54, name: "ignore_skip", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  1718              { no: 55, name: "build_override_strftime", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1719              { no: 56, name: "user_property", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  1720              { no: 63, name: "issue_gather_options", kind: "message", T: () => IssueGatherOptions }
  1721          ]);
  1722      }
  1723      create(value?: PartialMessage<TestGroup>): TestGroup {
  1724          const message = { name: "", gcsPrefix: "", daysOfResults: 0, ignorePending: false, ignoreBuilt: false, testsNamePolicy: 0, ignoreTestSubstring: [], columnHeader: [], fallbackGrouping: 0, alertStaleResultsHours: 0, numFailuresToAlert: 0, bugComponent: 0, codeSearchPath: "", numColumnsRecent: 0, useTestMetadata: false, alertMailToAddresses: "", alertMailSubject: "", alertMailFailureMessage: "", alertMailDebugUrl: "", minElapsedMinutesBetweenMails: 0, enableFlakyStatus: false, disableMergedStatus: false, useKubernetesClient: false, disableProwjobAnalysis: false, isExternal: false, notifications: [], primaryGrouping: 0, enableTestMethods: false, testAnnotations: [], maxTestMethodsPerTest: 0, testMetadataOptions: [], testTagPattern: "", maxTestRuntimeHours: 0, numPassesToDisableAlert: 0, linkBugsByGroup: false, testMethodProperties: [], gatherBugs: false, shortTextMetric: "", buildOverrideConfigurationValue: "", linkBugsByTestMethods: false, testMethodMatchRegex: "", testMethodUnmatchRegex: "", useFullMethodNames: false, fallbackGroupingConfigurationValue: "", readStateFromStorage: false, ignoreOldResults: false, ignoreSkip: false, buildOverrideStrftime: "", userProperty: "" };
  1725          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  1726          if (value !== undefined)
  1727              reflectionMergePartial<TestGroup>(this, message, value);
  1728          return message;
  1729      }
  1730      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TestGroup): TestGroup {
  1731          let message = target ?? this.create(), end = reader.pos + length;
  1732          while (reader.pos < end) {
  1733              let [fieldNo, wireType] = reader.tag();
  1734              switch (fieldNo) {
  1735                  case /* string name */ 1:
  1736                      message.name = reader.string();
  1737                      break;
  1738                  case /* string gcs_prefix */ 2:
  1739                      message.gcsPrefix = reader.string();
  1740                      break;
  1741                  case /* int32 days_of_results */ 3:
  1742                      message.daysOfResults = reader.int32();
  1743                      break;
  1744                  case /* bool ignore_pending */ 4:
  1745                      message.ignorePending = reader.bool();
  1746                      break;
  1747                  case /* bool ignore_built */ 5:
  1748                      message.ignoreBuilt = reader.bool();
  1749                      break;
  1750                  case /* testgrid.config.TestGroup.TestsName tests_name_policy */ 6:
  1751                      message.testsNamePolicy = reader.int32();
  1752                      break;
  1753                  case /* repeated string ignore_test_substring */ 8:
  1754                      message.ignoreTestSubstring.push(reader.string());
  1755                      break;
  1756                  case /* repeated testgrid.config.TestGroup.ColumnHeader column_header */ 9:
  1757                      message.columnHeader.push(TestGroup_ColumnHeader.internalBinaryRead(reader, reader.uint32(), options));
  1758                      break;
  1759                  case /* testgrid.config.TestGroup.FallbackGrouping fallback_grouping */ 10:
  1760                      message.fallbackGrouping = reader.int32();
  1761                      break;
  1762                  case /* int32 alert_stale_results_hours = 11 [deprecated = true];*/ 11:
  1763                      message.alertStaleResultsHours = reader.int32();
  1764                      break;
  1765                  case /* int32 num_failures_to_alert = 12 [deprecated = true];*/ 12:
  1766                      message.numFailuresToAlert = reader.int32();
  1767                      break;
  1768                  case /* int32 bug_component = 13 [deprecated = true];*/ 13:
  1769                      message.bugComponent = reader.int32();
  1770                      break;
  1771                  case /* string code_search_path */ 14:
  1772                      message.codeSearchPath = reader.string();
  1773                      break;
  1774                  case /* int32 num_columns_recent */ 15:
  1775                      message.numColumnsRecent = reader.int32();
  1776                      break;
  1777                  case /* bool use_test_metadata */ 16:
  1778                      message.useTestMetadata = reader.bool();
  1779                      break;
  1780                  case /* string alert_mail_to_addresses = 17 [deprecated = true];*/ 17:
  1781                      message.alertMailToAddresses = reader.string();
  1782                      break;
  1783                  case /* string alert_mail_subject = 18 [deprecated = true];*/ 18:
  1784                      message.alertMailSubject = reader.string();
  1785                      break;
  1786                  case /* string alert_mail_failure_message = 19 [deprecated = true];*/ 19:
  1787                      message.alertMailFailureMessage = reader.string();
  1788                      break;
  1789                  case /* string alert_mail_debug_url = 20 [deprecated = true];*/ 20:
  1790                      message.alertMailDebugUrl = reader.string();
  1791                      break;
  1792                  case /* int32 min_elapsed_minutes_between_mails = 21 [deprecated = true];*/ 21:
  1793                      message.minElapsedMinutesBetweenMails = reader.int32();
  1794                      break;
  1795                  case /* bool enable_flaky_status */ 23:
  1796                      message.enableFlakyStatus = reader.bool();
  1797                      break;
  1798                  case /* bool disable_merged_status */ 60:
  1799                      message.disableMergedStatus = reader.bool();
  1800                      break;
  1801                  case /* bool use_kubernetes_client = 24 [deprecated = true];*/ 24:
  1802                      message.useKubernetesClient = reader.bool();
  1803                      break;
  1804                  case /* bool disable_prowjob_analysis */ 62:
  1805                      message.disableProwjobAnalysis = reader.bool();
  1806                      break;
  1807                  case /* bool is_external */ 25:
  1808                      message.isExternal = reader.bool();
  1809                      break;
  1810                  case /* testgrid.config.TestNameConfig test_name_config */ 26:
  1811                      message.testNameConfig = TestNameConfig.internalBinaryRead(reader, reader.uint32(), options, message.testNameConfig);
  1812                      break;
  1813                  case /* repeated testgrid.config.Notification notifications */ 27:
  1814                      message.notifications.push(Notification.internalBinaryRead(reader, reader.uint32(), options));
  1815                      break;
  1816                  case /* testgrid.config.TestGroup.PrimaryGrouping primary_grouping */ 29:
  1817                      message.primaryGrouping = reader.int32();
  1818                      break;
  1819                  case /* bool enable_test_methods */ 30:
  1820                      message.enableTestMethods = reader.bool();
  1821                      break;
  1822                  case /* repeated testgrid.config.TestGroup.TestAnnotation test_annotations */ 31:
  1823                      message.testAnnotations.push(TestGroup_TestAnnotation.internalBinaryRead(reader, reader.uint32(), options));
  1824                      break;
  1825                  case /* int32 max_test_methods_per_test */ 32:
  1826                      message.maxTestMethodsPerTest = reader.int32();
  1827                      break;
  1828                  case /* repeated testgrid.config.TestMetadataOptions test_metadata_options */ 34:
  1829                      message.testMetadataOptions.push(TestMetadataOptions.internalBinaryRead(reader, reader.uint32(), options));
  1830                      break;
  1831                  case /* string test_tag_pattern */ 35:
  1832                      message.testTagPattern = reader.string();
  1833                      break;
  1834                  case /* testgrid.config.AutoBugOptions auto_bug_options = 36 [deprecated = true];*/ 36:
  1835                      message.autoBugOptions = AutoBugOptions.internalBinaryRead(reader, reader.uint32(), options, message.autoBugOptions);
  1836                      break;
  1837                  case /* int32 max_test_runtime_hours */ 37:
  1838                      message.maxTestRuntimeHours = reader.int32();
  1839                      break;
  1840                  case /* int32 num_passes_to_disable_alert */ 38:
  1841                      message.numPassesToDisableAlert = reader.int32();
  1842                      break;
  1843                  case /* bool link_bugs_by_group */ 39:
  1844                      message.linkBugsByGroup = reader.bool();
  1845                      break;
  1846                  case /* repeated testgrid.config.TestGroup.KeyValue test_method_properties */ 41:
  1847                      message.testMethodProperties.push(TestGroup_KeyValue.internalBinaryRead(reader, reader.uint32(), options));
  1848                      break;
  1849                  case /* bool gather_bugs */ 42:
  1850                      message.gatherBugs = reader.bool();
  1851                      break;
  1852                  case /* string short_text_metric */ 43:
  1853                      message.shortTextMetric = reader.string();
  1854                      break;
  1855                  case /* string build_override_configuration_value */ 44:
  1856                      message.buildOverrideConfigurationValue = reader.string();
  1857                      break;
  1858                  case /* bool link_bugs_by_test_methods */ 45:
  1859                      message.linkBugsByTestMethods = reader.bool();
  1860                      break;
  1861                  case /* string test_method_match_regex */ 46:
  1862                      message.testMethodMatchRegex = reader.string();
  1863                      break;
  1864                  case /* string test_method_unmatch_regex */ 61:
  1865                      message.testMethodUnmatchRegex = reader.string();
  1866                      break;
  1867                  case /* bool use_full_method_names */ 47:
  1868                      message.useFullMethodNames = reader.bool();
  1869                      break;
  1870                  case /* string fallback_grouping_configuration_value */ 49:
  1871                      message.fallbackGroupingConfigurationValue = reader.string();
  1872                      break;
  1873                  case /* testgrid.config.TestGroup.ResultSource result_source */ 50:
  1874                      message.resultSource = TestGroup_ResultSource.internalBinaryRead(reader, reader.uint32(), options, message.resultSource);
  1875                      break;
  1876                  case /* testgrid.custom_evaluator.RuleSet custom_evaluator_rule_set */ 51:
  1877                      message.customEvaluatorRuleSet = RuleSet.internalBinaryRead(reader, reader.uint32(), options, message.customEvaluatorRuleSet);
  1878                      break;
  1879                  case /* bool read_state_from_storage */ 52:
  1880                      message.readStateFromStorage = reader.bool();
  1881                      break;
  1882                  case /* bool ignore_old_results */ 53:
  1883                      message.ignoreOldResults = reader.bool();
  1884                      break;
  1885                  case /* bool ignore_skip */ 54:
  1886                      message.ignoreSkip = reader.bool();
  1887                      break;
  1888                  case /* string build_override_strftime */ 55:
  1889                      message.buildOverrideStrftime = reader.string();
  1890                      break;
  1891                  case /* string user_property */ 56:
  1892                      message.userProperty = reader.string();
  1893                      break;
  1894                  case /* testgrid.config.IssueGatherOptions issue_gather_options */ 63:
  1895                      message.issueGatherOptions = IssueGatherOptions.internalBinaryRead(reader, reader.uint32(), options, message.issueGatherOptions);
  1896                      break;
  1897                  default:
  1898                      let u = options.readUnknownField;
  1899                      if (u === "throw")
  1900                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  1901                      let d = reader.skip(wireType);
  1902                      if (u !== false)
  1903                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  1904              }
  1905          }
  1906          return message;
  1907      }
  1908      internalBinaryWrite(message: TestGroup, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  1909          /* string name = 1; */
  1910          if (message.name !== "")
  1911              writer.tag(1, WireType.LengthDelimited).string(message.name);
  1912          /* string gcs_prefix = 2; */
  1913          if (message.gcsPrefix !== "")
  1914              writer.tag(2, WireType.LengthDelimited).string(message.gcsPrefix);
  1915          /* int32 days_of_results = 3; */
  1916          if (message.daysOfResults !== 0)
  1917              writer.tag(3, WireType.Varint).int32(message.daysOfResults);
  1918          /* bool ignore_pending = 4; */
  1919          if (message.ignorePending !== false)
  1920              writer.tag(4, WireType.Varint).bool(message.ignorePending);
  1921          /* bool ignore_built = 5; */
  1922          if (message.ignoreBuilt !== false)
  1923              writer.tag(5, WireType.Varint).bool(message.ignoreBuilt);
  1924          /* testgrid.config.TestGroup.TestsName tests_name_policy = 6; */
  1925          if (message.testsNamePolicy !== 0)
  1926              writer.tag(6, WireType.Varint).int32(message.testsNamePolicy);
  1927          /* repeated string ignore_test_substring = 8; */
  1928          for (let i = 0; i < message.ignoreTestSubstring.length; i++)
  1929              writer.tag(8, WireType.LengthDelimited).string(message.ignoreTestSubstring[i]);
  1930          /* repeated testgrid.config.TestGroup.ColumnHeader column_header = 9; */
  1931          for (let i = 0; i < message.columnHeader.length; i++)
  1932              TestGroup_ColumnHeader.internalBinaryWrite(message.columnHeader[i], writer.tag(9, WireType.LengthDelimited).fork(), options).join();
  1933          /* testgrid.config.TestGroup.FallbackGrouping fallback_grouping = 10; */
  1934          if (message.fallbackGrouping !== 0)
  1935              writer.tag(10, WireType.Varint).int32(message.fallbackGrouping);
  1936          /* int32 alert_stale_results_hours = 11 [deprecated = true]; */
  1937          if (message.alertStaleResultsHours !== 0)
  1938              writer.tag(11, WireType.Varint).int32(message.alertStaleResultsHours);
  1939          /* int32 num_failures_to_alert = 12 [deprecated = true]; */
  1940          if (message.numFailuresToAlert !== 0)
  1941              writer.tag(12, WireType.Varint).int32(message.numFailuresToAlert);
  1942          /* int32 bug_component = 13 [deprecated = true]; */
  1943          if (message.bugComponent !== 0)
  1944              writer.tag(13, WireType.Varint).int32(message.bugComponent);
  1945          /* string code_search_path = 14; */
  1946          if (message.codeSearchPath !== "")
  1947              writer.tag(14, WireType.LengthDelimited).string(message.codeSearchPath);
  1948          /* int32 num_columns_recent = 15; */
  1949          if (message.numColumnsRecent !== 0)
  1950              writer.tag(15, WireType.Varint).int32(message.numColumnsRecent);
  1951          /* bool use_test_metadata = 16; */
  1952          if (message.useTestMetadata !== false)
  1953              writer.tag(16, WireType.Varint).bool(message.useTestMetadata);
  1954          /* string alert_mail_to_addresses = 17 [deprecated = true]; */
  1955          if (message.alertMailToAddresses !== "")
  1956              writer.tag(17, WireType.LengthDelimited).string(message.alertMailToAddresses);
  1957          /* string alert_mail_subject = 18 [deprecated = true]; */
  1958          if (message.alertMailSubject !== "")
  1959              writer.tag(18, WireType.LengthDelimited).string(message.alertMailSubject);
  1960          /* string alert_mail_failure_message = 19 [deprecated = true]; */
  1961          if (message.alertMailFailureMessage !== "")
  1962              writer.tag(19, WireType.LengthDelimited).string(message.alertMailFailureMessage);
  1963          /* string alert_mail_debug_url = 20 [deprecated = true]; */
  1964          if (message.alertMailDebugUrl !== "")
  1965              writer.tag(20, WireType.LengthDelimited).string(message.alertMailDebugUrl);
  1966          /* int32 min_elapsed_minutes_between_mails = 21 [deprecated = true]; */
  1967          if (message.minElapsedMinutesBetweenMails !== 0)
  1968              writer.tag(21, WireType.Varint).int32(message.minElapsedMinutesBetweenMails);
  1969          /* bool enable_flaky_status = 23; */
  1970          if (message.enableFlakyStatus !== false)
  1971              writer.tag(23, WireType.Varint).bool(message.enableFlakyStatus);
  1972          /* bool disable_merged_status = 60; */
  1973          if (message.disableMergedStatus !== false)
  1974              writer.tag(60, WireType.Varint).bool(message.disableMergedStatus);
  1975          /* bool use_kubernetes_client = 24 [deprecated = true]; */
  1976          if (message.useKubernetesClient !== false)
  1977              writer.tag(24, WireType.Varint).bool(message.useKubernetesClient);
  1978          /* bool disable_prowjob_analysis = 62; */
  1979          if (message.disableProwjobAnalysis !== false)
  1980              writer.tag(62, WireType.Varint).bool(message.disableProwjobAnalysis);
  1981          /* bool is_external = 25; */
  1982          if (message.isExternal !== false)
  1983              writer.tag(25, WireType.Varint).bool(message.isExternal);
  1984          /* testgrid.config.TestNameConfig test_name_config = 26; */
  1985          if (message.testNameConfig)
  1986              TestNameConfig.internalBinaryWrite(message.testNameConfig, writer.tag(26, WireType.LengthDelimited).fork(), options).join();
  1987          /* repeated testgrid.config.Notification notifications = 27; */
  1988          for (let i = 0; i < message.notifications.length; i++)
  1989              Notification.internalBinaryWrite(message.notifications[i], writer.tag(27, WireType.LengthDelimited).fork(), options).join();
  1990          /* testgrid.config.TestGroup.PrimaryGrouping primary_grouping = 29; */
  1991          if (message.primaryGrouping !== 0)
  1992              writer.tag(29, WireType.Varint).int32(message.primaryGrouping);
  1993          /* bool enable_test_methods = 30; */
  1994          if (message.enableTestMethods !== false)
  1995              writer.tag(30, WireType.Varint).bool(message.enableTestMethods);
  1996          /* repeated testgrid.config.TestGroup.TestAnnotation test_annotations = 31; */
  1997          for (let i = 0; i < message.testAnnotations.length; i++)
  1998              TestGroup_TestAnnotation.internalBinaryWrite(message.testAnnotations[i], writer.tag(31, WireType.LengthDelimited).fork(), options).join();
  1999          /* int32 max_test_methods_per_test = 32; */
  2000          if (message.maxTestMethodsPerTest !== 0)
  2001              writer.tag(32, WireType.Varint).int32(message.maxTestMethodsPerTest);
  2002          /* repeated testgrid.config.TestMetadataOptions test_metadata_options = 34; */
  2003          for (let i = 0; i < message.testMetadataOptions.length; i++)
  2004              TestMetadataOptions.internalBinaryWrite(message.testMetadataOptions[i], writer.tag(34, WireType.LengthDelimited).fork(), options).join();
  2005          /* string test_tag_pattern = 35; */
  2006          if (message.testTagPattern !== "")
  2007              writer.tag(35, WireType.LengthDelimited).string(message.testTagPattern);
  2008          /* testgrid.config.AutoBugOptions auto_bug_options = 36 [deprecated = true]; */
  2009          if (message.autoBugOptions)
  2010              AutoBugOptions.internalBinaryWrite(message.autoBugOptions, writer.tag(36, WireType.LengthDelimited).fork(), options).join();
  2011          /* int32 max_test_runtime_hours = 37; */
  2012          if (message.maxTestRuntimeHours !== 0)
  2013              writer.tag(37, WireType.Varint).int32(message.maxTestRuntimeHours);
  2014          /* int32 num_passes_to_disable_alert = 38; */
  2015          if (message.numPassesToDisableAlert !== 0)
  2016              writer.tag(38, WireType.Varint).int32(message.numPassesToDisableAlert);
  2017          /* bool link_bugs_by_group = 39; */
  2018          if (message.linkBugsByGroup !== false)
  2019              writer.tag(39, WireType.Varint).bool(message.linkBugsByGroup);
  2020          /* repeated testgrid.config.TestGroup.KeyValue test_method_properties = 41; */
  2021          for (let i = 0; i < message.testMethodProperties.length; i++)
  2022              TestGroup_KeyValue.internalBinaryWrite(message.testMethodProperties[i], writer.tag(41, WireType.LengthDelimited).fork(), options).join();
  2023          /* bool gather_bugs = 42; */
  2024          if (message.gatherBugs !== false)
  2025              writer.tag(42, WireType.Varint).bool(message.gatherBugs);
  2026          /* string short_text_metric = 43; */
  2027          if (message.shortTextMetric !== "")
  2028              writer.tag(43, WireType.LengthDelimited).string(message.shortTextMetric);
  2029          /* string build_override_configuration_value = 44; */
  2030          if (message.buildOverrideConfigurationValue !== "")
  2031              writer.tag(44, WireType.LengthDelimited).string(message.buildOverrideConfigurationValue);
  2032          /* bool link_bugs_by_test_methods = 45; */
  2033          if (message.linkBugsByTestMethods !== false)
  2034              writer.tag(45, WireType.Varint).bool(message.linkBugsByTestMethods);
  2035          /* string test_method_match_regex = 46; */
  2036          if (message.testMethodMatchRegex !== "")
  2037              writer.tag(46, WireType.LengthDelimited).string(message.testMethodMatchRegex);
  2038          /* string test_method_unmatch_regex = 61; */
  2039          if (message.testMethodUnmatchRegex !== "")
  2040              writer.tag(61, WireType.LengthDelimited).string(message.testMethodUnmatchRegex);
  2041          /* bool use_full_method_names = 47; */
  2042          if (message.useFullMethodNames !== false)
  2043              writer.tag(47, WireType.Varint).bool(message.useFullMethodNames);
  2044          /* string fallback_grouping_configuration_value = 49; */
  2045          if (message.fallbackGroupingConfigurationValue !== "")
  2046              writer.tag(49, WireType.LengthDelimited).string(message.fallbackGroupingConfigurationValue);
  2047          /* testgrid.config.TestGroup.ResultSource result_source = 50; */
  2048          if (message.resultSource)
  2049              TestGroup_ResultSource.internalBinaryWrite(message.resultSource, writer.tag(50, WireType.LengthDelimited).fork(), options).join();
  2050          /* testgrid.custom_evaluator.RuleSet custom_evaluator_rule_set = 51; */
  2051          if (message.customEvaluatorRuleSet)
  2052              RuleSet.internalBinaryWrite(message.customEvaluatorRuleSet, writer.tag(51, WireType.LengthDelimited).fork(), options).join();
  2053          /* bool read_state_from_storage = 52; */
  2054          if (message.readStateFromStorage !== false)
  2055              writer.tag(52, WireType.Varint).bool(message.readStateFromStorage);
  2056          /* bool ignore_old_results = 53; */
  2057          if (message.ignoreOldResults !== false)
  2058              writer.tag(53, WireType.Varint).bool(message.ignoreOldResults);
  2059          /* bool ignore_skip = 54; */
  2060          if (message.ignoreSkip !== false)
  2061              writer.tag(54, WireType.Varint).bool(message.ignoreSkip);
  2062          /* string build_override_strftime = 55; */
  2063          if (message.buildOverrideStrftime !== "")
  2064              writer.tag(55, WireType.LengthDelimited).string(message.buildOverrideStrftime);
  2065          /* string user_property = 56; */
  2066          if (message.userProperty !== "")
  2067              writer.tag(56, WireType.LengthDelimited).string(message.userProperty);
  2068          /* testgrid.config.IssueGatherOptions issue_gather_options = 63; */
  2069          if (message.issueGatherOptions)
  2070              IssueGatherOptions.internalBinaryWrite(message.issueGatherOptions, writer.tag(63, WireType.LengthDelimited).fork(), options).join();
  2071          let u = options.writeUnknownFields;
  2072          if (u !== false)
  2073              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  2074          return writer;
  2075      }
  2076  }
  2077  /**
  2078   * @generated MessageType for protobuf message testgrid.config.TestGroup
  2079   */
  2080  export const TestGroup = new TestGroup$Type();
  2081  // @generated message type with reflection information, may provide speed optimized methods
  2082  class TestGroup_ColumnHeader$Type extends MessageType<TestGroup_ColumnHeader> {
  2083      constructor() {
  2084          super("testgrid.config.TestGroup.ColumnHeader", [
  2085              { no: 1, name: "label", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2086              { no: 2, name: "property", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2087              { no: 3, name: "configuration_value", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2088              { no: 4, name: "list_all_values", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
  2089          ]);
  2090      }
  2091      create(value?: PartialMessage<TestGroup_ColumnHeader>): TestGroup_ColumnHeader {
  2092          const message = { label: "", property: "", configurationValue: "", listAllValues: false };
  2093          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  2094          if (value !== undefined)
  2095              reflectionMergePartial<TestGroup_ColumnHeader>(this, message, value);
  2096          return message;
  2097      }
  2098      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TestGroup_ColumnHeader): TestGroup_ColumnHeader {
  2099          let message = target ?? this.create(), end = reader.pos + length;
  2100          while (reader.pos < end) {
  2101              let [fieldNo, wireType] = reader.tag();
  2102              switch (fieldNo) {
  2103                  case /* string label */ 1:
  2104                      message.label = reader.string();
  2105                      break;
  2106                  case /* string property */ 2:
  2107                      message.property = reader.string();
  2108                      break;
  2109                  case /* string configuration_value */ 3:
  2110                      message.configurationValue = reader.string();
  2111                      break;
  2112                  case /* bool list_all_values */ 4:
  2113                      message.listAllValues = reader.bool();
  2114                      break;
  2115                  default:
  2116                      let u = options.readUnknownField;
  2117                      if (u === "throw")
  2118                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  2119                      let d = reader.skip(wireType);
  2120                      if (u !== false)
  2121                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  2122              }
  2123          }
  2124          return message;
  2125      }
  2126      internalBinaryWrite(message: TestGroup_ColumnHeader, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  2127          /* string label = 1; */
  2128          if (message.label !== "")
  2129              writer.tag(1, WireType.LengthDelimited).string(message.label);
  2130          /* string property = 2; */
  2131          if (message.property !== "")
  2132              writer.tag(2, WireType.LengthDelimited).string(message.property);
  2133          /* string configuration_value = 3; */
  2134          if (message.configurationValue !== "")
  2135              writer.tag(3, WireType.LengthDelimited).string(message.configurationValue);
  2136          /* bool list_all_values = 4; */
  2137          if (message.listAllValues !== false)
  2138              writer.tag(4, WireType.Varint).bool(message.listAllValues);
  2139          let u = options.writeUnknownFields;
  2140          if (u !== false)
  2141              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  2142          return writer;
  2143      }
  2144  }
  2145  /**
  2146   * @generated MessageType for protobuf message testgrid.config.TestGroup.ColumnHeader
  2147   */
  2148  export const TestGroup_ColumnHeader = new TestGroup_ColumnHeader$Type();
  2149  // @generated message type with reflection information, may provide speed optimized methods
  2150  class TestGroup_TestAnnotation$Type extends MessageType<TestGroup_TestAnnotation> {
  2151      constructor() {
  2152          super("testgrid.config.TestGroup.TestAnnotation", [
  2153              { no: 1, name: "short_text", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2154              { no: 2, name: "property_name", kind: "scalar", oneof: "shortTextMessageSource", T: 9 /*ScalarType.STRING*/ }
  2155          ]);
  2156      }
  2157      create(value?: PartialMessage<TestGroup_TestAnnotation>): TestGroup_TestAnnotation {
  2158          const message = { shortText: "", shortTextMessageSource: { oneofKind: undefined } };
  2159          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  2160          if (value !== undefined)
  2161              reflectionMergePartial<TestGroup_TestAnnotation>(this, message, value);
  2162          return message;
  2163      }
  2164      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TestGroup_TestAnnotation): TestGroup_TestAnnotation {
  2165          let message = target ?? this.create(), end = reader.pos + length;
  2166          while (reader.pos < end) {
  2167              let [fieldNo, wireType] = reader.tag();
  2168              switch (fieldNo) {
  2169                  case /* string short_text */ 1:
  2170                      message.shortText = reader.string();
  2171                      break;
  2172                  case /* string property_name */ 2:
  2173                      message.shortTextMessageSource = {
  2174                          oneofKind: "propertyName",
  2175                          propertyName: reader.string()
  2176                      };
  2177                      break;
  2178                  default:
  2179                      let u = options.readUnknownField;
  2180                      if (u === "throw")
  2181                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  2182                      let d = reader.skip(wireType);
  2183                      if (u !== false)
  2184                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  2185              }
  2186          }
  2187          return message;
  2188      }
  2189      internalBinaryWrite(message: TestGroup_TestAnnotation, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  2190          /* string short_text = 1; */
  2191          if (message.shortText !== "")
  2192              writer.tag(1, WireType.LengthDelimited).string(message.shortText);
  2193          /* string property_name = 2; */
  2194          if (message.shortTextMessageSource.oneofKind === "propertyName")
  2195              writer.tag(2, WireType.LengthDelimited).string(message.shortTextMessageSource.propertyName);
  2196          let u = options.writeUnknownFields;
  2197          if (u !== false)
  2198              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  2199          return writer;
  2200      }
  2201  }
  2202  /**
  2203   * @generated MessageType for protobuf message testgrid.config.TestGroup.TestAnnotation
  2204   */
  2205  export const TestGroup_TestAnnotation = new TestGroup_TestAnnotation$Type();
  2206  // @generated message type with reflection information, may provide speed optimized methods
  2207  class TestGroup_KeyValue$Type extends MessageType<TestGroup_KeyValue> {
  2208      constructor() {
  2209          super("testgrid.config.TestGroup.KeyValue", [
  2210              { no: 1, name: "key", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2211              { no: 2, name: "value", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
  2212          ]);
  2213      }
  2214      create(value?: PartialMessage<TestGroup_KeyValue>): TestGroup_KeyValue {
  2215          const message = { key: "", value: "" };
  2216          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  2217          if (value !== undefined)
  2218              reflectionMergePartial<TestGroup_KeyValue>(this, message, value);
  2219          return message;
  2220      }
  2221      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TestGroup_KeyValue): TestGroup_KeyValue {
  2222          let message = target ?? this.create(), end = reader.pos + length;
  2223          while (reader.pos < end) {
  2224              let [fieldNo, wireType] = reader.tag();
  2225              switch (fieldNo) {
  2226                  case /* string key */ 1:
  2227                      message.key = reader.string();
  2228                      break;
  2229                  case /* string value */ 2:
  2230                      message.value = reader.string();
  2231                      break;
  2232                  default:
  2233                      let u = options.readUnknownField;
  2234                      if (u === "throw")
  2235                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  2236                      let d = reader.skip(wireType);
  2237                      if (u !== false)
  2238                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  2239              }
  2240          }
  2241          return message;
  2242      }
  2243      internalBinaryWrite(message: TestGroup_KeyValue, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  2244          /* string key = 1; */
  2245          if (message.key !== "")
  2246              writer.tag(1, WireType.LengthDelimited).string(message.key);
  2247          /* string value = 2; */
  2248          if (message.value !== "")
  2249              writer.tag(2, WireType.LengthDelimited).string(message.value);
  2250          let u = options.writeUnknownFields;
  2251          if (u !== false)
  2252              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  2253          return writer;
  2254      }
  2255  }
  2256  /**
  2257   * @generated MessageType for protobuf message testgrid.config.TestGroup.KeyValue
  2258   */
  2259  export const TestGroup_KeyValue = new TestGroup_KeyValue$Type();
  2260  // @generated message type with reflection information, may provide speed optimized methods
  2261  class TestGroup_ResultSource$Type extends MessageType<TestGroup_ResultSource> {
  2262      constructor() {
  2263          super("testgrid.config.TestGroup.ResultSource", [
  2264              { no: 2, name: "gcs_config", kind: "message", oneof: "resultSourceConfig", T: () => GCSConfig }
  2265          ]);
  2266      }
  2267      create(value?: PartialMessage<TestGroup_ResultSource>): TestGroup_ResultSource {
  2268          const message = { resultSourceConfig: { oneofKind: undefined } };
  2269          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  2270          if (value !== undefined)
  2271              reflectionMergePartial<TestGroup_ResultSource>(this, message, value);
  2272          return message;
  2273      }
  2274      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TestGroup_ResultSource): TestGroup_ResultSource {
  2275          let message = target ?? this.create(), end = reader.pos + length;
  2276          while (reader.pos < end) {
  2277              let [fieldNo, wireType] = reader.tag();
  2278              switch (fieldNo) {
  2279                  case /* testgrid.config.GCSConfig gcs_config */ 2:
  2280                      message.resultSourceConfig = {
  2281                          oneofKind: "gcsConfig",
  2282                          gcsConfig: GCSConfig.internalBinaryRead(reader, reader.uint32(), options, (message.resultSourceConfig as any).gcsConfig)
  2283                      };
  2284                      break;
  2285                  default:
  2286                      let u = options.readUnknownField;
  2287                      if (u === "throw")
  2288                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  2289                      let d = reader.skip(wireType);
  2290                      if (u !== false)
  2291                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  2292              }
  2293          }
  2294          return message;
  2295      }
  2296      internalBinaryWrite(message: TestGroup_ResultSource, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  2297          /* testgrid.config.GCSConfig gcs_config = 2; */
  2298          if (message.resultSourceConfig.oneofKind === "gcsConfig")
  2299              GCSConfig.internalBinaryWrite(message.resultSourceConfig.gcsConfig, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
  2300          let u = options.writeUnknownFields;
  2301          if (u !== false)
  2302              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  2303          return writer;
  2304      }
  2305  }
  2306  /**
  2307   * @generated MessageType for protobuf message testgrid.config.TestGroup.ResultSource
  2308   */
  2309  export const TestGroup_ResultSource = new TestGroup_ResultSource$Type();
  2310  // @generated message type with reflection information, may provide speed optimized methods
  2311  class GCSConfig$Type extends MessageType<GCSConfig> {
  2312      constructor() {
  2313          super("testgrid.config.GCSConfig", [
  2314              { no: 1, name: "gcs_prefix", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2315              { no: 2, name: "pubsub_project", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2316              { no: 3, name: "pubsub_subscription", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
  2317          ]);
  2318      }
  2319      create(value?: PartialMessage<GCSConfig>): GCSConfig {
  2320          const message = { gcsPrefix: "", pubsubProject: "", pubsubSubscription: "" };
  2321          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  2322          if (value !== undefined)
  2323              reflectionMergePartial<GCSConfig>(this, message, value);
  2324          return message;
  2325      }
  2326      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: GCSConfig): GCSConfig {
  2327          let message = target ?? this.create(), end = reader.pos + length;
  2328          while (reader.pos < end) {
  2329              let [fieldNo, wireType] = reader.tag();
  2330              switch (fieldNo) {
  2331                  case /* string gcs_prefix */ 1:
  2332                      message.gcsPrefix = reader.string();
  2333                      break;
  2334                  case /* string pubsub_project */ 2:
  2335                      message.pubsubProject = reader.string();
  2336                      break;
  2337                  case /* string pubsub_subscription */ 3:
  2338                      message.pubsubSubscription = reader.string();
  2339                      break;
  2340                  default:
  2341                      let u = options.readUnknownField;
  2342                      if (u === "throw")
  2343                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  2344                      let d = reader.skip(wireType);
  2345                      if (u !== false)
  2346                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  2347              }
  2348          }
  2349          return message;
  2350      }
  2351      internalBinaryWrite(message: GCSConfig, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  2352          /* string gcs_prefix = 1; */
  2353          if (message.gcsPrefix !== "")
  2354              writer.tag(1, WireType.LengthDelimited).string(message.gcsPrefix);
  2355          /* string pubsub_project = 2; */
  2356          if (message.pubsubProject !== "")
  2357              writer.tag(2, WireType.LengthDelimited).string(message.pubsubProject);
  2358          /* string pubsub_subscription = 3; */
  2359          if (message.pubsubSubscription !== "")
  2360              writer.tag(3, WireType.LengthDelimited).string(message.pubsubSubscription);
  2361          let u = options.writeUnknownFields;
  2362          if (u !== false)
  2363              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  2364          return writer;
  2365      }
  2366  }
  2367  /**
  2368   * @generated MessageType for protobuf message testgrid.config.GCSConfig
  2369   */
  2370  export const GCSConfig = new GCSConfig$Type();
  2371  // @generated message type with reflection information, may provide speed optimized methods
  2372  class IssueGatherOptions$Type extends MessageType<IssueGatherOptions> {
  2373      constructor() {
  2374          super("testgrid.config.IssueGatherOptions", []);
  2375      }
  2376      create(value?: PartialMessage<IssueGatherOptions>): IssueGatherOptions {
  2377          const message = {};
  2378          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  2379          if (value !== undefined)
  2380              reflectionMergePartial<IssueGatherOptions>(this, message, value);
  2381          return message;
  2382      }
  2383      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: IssueGatherOptions): IssueGatherOptions {
  2384          return target ?? this.create();
  2385      }
  2386      internalBinaryWrite(message: IssueGatherOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  2387          let u = options.writeUnknownFields;
  2388          if (u !== false)
  2389              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  2390          return writer;
  2391      }
  2392  }
  2393  /**
  2394   * @generated MessageType for protobuf message testgrid.config.IssueGatherOptions
  2395   */
  2396  export const IssueGatherOptions = new IssueGatherOptions$Type();
  2397  // @generated message type with reflection information, may provide speed optimized methods
  2398  class TestMetadataOptions$Type extends MessageType<TestMetadataOptions> {
  2399      constructor() {
  2400          super("testgrid.config.TestMetadataOptions", [
  2401              { no: 1, name: "test_name_regex", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2402              { no: 2, name: "bug_component", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  2403              { no: 3, name: "owner", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2404              { no: 4, name: "cc", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
  2405              { no: 5, name: "message_regex", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
  2406          ]);
  2407      }
  2408      create(value?: PartialMessage<TestMetadataOptions>): TestMetadataOptions {
  2409          const message = { testNameRegex: "", bugComponent: 0, owner: "", cc: [], messageRegex: "" };
  2410          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  2411          if (value !== undefined)
  2412              reflectionMergePartial<TestMetadataOptions>(this, message, value);
  2413          return message;
  2414      }
  2415      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TestMetadataOptions): TestMetadataOptions {
  2416          let message = target ?? this.create(), end = reader.pos + length;
  2417          while (reader.pos < end) {
  2418              let [fieldNo, wireType] = reader.tag();
  2419              switch (fieldNo) {
  2420                  case /* string test_name_regex */ 1:
  2421                      message.testNameRegex = reader.string();
  2422                      break;
  2423                  case /* int32 bug_component */ 2:
  2424                      message.bugComponent = reader.int32();
  2425                      break;
  2426                  case /* string owner */ 3:
  2427                      message.owner = reader.string();
  2428                      break;
  2429                  case /* repeated string cc */ 4:
  2430                      message.cc.push(reader.string());
  2431                      break;
  2432                  case /* string message_regex */ 5:
  2433                      message.messageRegex = reader.string();
  2434                      break;
  2435                  default:
  2436                      let u = options.readUnknownField;
  2437                      if (u === "throw")
  2438                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  2439                      let d = reader.skip(wireType);
  2440                      if (u !== false)
  2441                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  2442              }
  2443          }
  2444          return message;
  2445      }
  2446      internalBinaryWrite(message: TestMetadataOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  2447          /* string test_name_regex = 1; */
  2448          if (message.testNameRegex !== "")
  2449              writer.tag(1, WireType.LengthDelimited).string(message.testNameRegex);
  2450          /* int32 bug_component = 2; */
  2451          if (message.bugComponent !== 0)
  2452              writer.tag(2, WireType.Varint).int32(message.bugComponent);
  2453          /* string owner = 3; */
  2454          if (message.owner !== "")
  2455              writer.tag(3, WireType.LengthDelimited).string(message.owner);
  2456          /* repeated string cc = 4; */
  2457          for (let i = 0; i < message.cc.length; i++)
  2458              writer.tag(4, WireType.LengthDelimited).string(message.cc[i]);
  2459          /* string message_regex = 5; */
  2460          if (message.messageRegex !== "")
  2461              writer.tag(5, WireType.LengthDelimited).string(message.messageRegex);
  2462          let u = options.writeUnknownFields;
  2463          if (u !== false)
  2464              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  2465          return writer;
  2466      }
  2467  }
  2468  /**
  2469   * @generated MessageType for protobuf message testgrid.config.TestMetadataOptions
  2470   */
  2471  export const TestMetadataOptions = new TestMetadataOptions$Type();
  2472  // @generated message type with reflection information, may provide speed optimized methods
  2473  class AutoBugOptions$Type extends MessageType<AutoBugOptions> {
  2474      constructor() {
  2475          super("testgrid.config.AutoBugOptions", [
  2476              { no: 10, name: "beta_autobug_component", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  2477              { no: 1, name: "auto_close", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  2478              { no: 2, name: "hotlist_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 3 /*ScalarType.INT64*/ },
  2479              { no: 3, name: "priority", kind: "enum", T: () => ["testgrid.config.AutoBugOptions.Priority", AutoBugOptions_Priority] },
  2480              { no: 4, name: "hotlist_ids_from_source", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => HotlistIdFromSource },
  2481              { no: 5, name: "file_individual", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  2482              { no: 6, name: "singleton_autobug", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  2483              { no: 7, name: "max_allowed_individual_bugs", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  2484              { no: 8, name: "file_overall", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  2485              { no: 9, name: "default_test_metadata", kind: "message", T: () => AutoBugOptions_DefaultTestMetadata },
  2486              { no: 11, name: "advanced_test_metadata", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  2487              { no: 12, name: "file_stale", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  2488              { no: 13, name: "ignore_overall", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  2489              { no: 14, name: "note", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
  2490          ]);
  2491      }
  2492      create(value?: PartialMessage<AutoBugOptions>): AutoBugOptions {
  2493          const message = { betaAutobugComponent: 0, autoClose: false, hotlistIds: [], priority: 0, hotlistIdsFromSource: [], fileIndividual: false, singletonAutobug: false, maxAllowedIndividualBugs: 0, fileOverall: false, advancedTestMetadata: false, fileStale: false, ignoreOverall: false, note: "" };
  2494          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  2495          if (value !== undefined)
  2496              reflectionMergePartial<AutoBugOptions>(this, message, value);
  2497          return message;
  2498      }
  2499      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AutoBugOptions): AutoBugOptions {
  2500          let message = target ?? this.create(), end = reader.pos + length;
  2501          while (reader.pos < end) {
  2502              let [fieldNo, wireType] = reader.tag();
  2503              switch (fieldNo) {
  2504                  case /* int32 beta_autobug_component */ 10:
  2505                      message.betaAutobugComponent = reader.int32();
  2506                      break;
  2507                  case /* bool auto_close */ 1:
  2508                      message.autoClose = reader.bool();
  2509                      break;
  2510                  case /* repeated int64 hotlist_ids */ 2:
  2511                      if (wireType === WireType.LengthDelimited)
  2512                          for (let e = reader.int32() + reader.pos; reader.pos < e;)
  2513                              message.hotlistIds.push(reader.int64().toString());
  2514                      else
  2515                          message.hotlistIds.push(reader.int64().toString());
  2516                      break;
  2517                  case /* testgrid.config.AutoBugOptions.Priority priority */ 3:
  2518                      message.priority = reader.int32();
  2519                      break;
  2520                  case /* repeated testgrid.config.HotlistIdFromSource hotlist_ids_from_source = 4 [deprecated = true];*/ 4:
  2521                      message.hotlistIdsFromSource.push(HotlistIdFromSource.internalBinaryRead(reader, reader.uint32(), options));
  2522                      break;
  2523                  case /* bool file_individual */ 5:
  2524                      message.fileIndividual = reader.bool();
  2525                      break;
  2526                  case /* bool singleton_autobug */ 6:
  2527                      message.singletonAutobug = reader.bool();
  2528                      break;
  2529                  case /* int32 max_allowed_individual_bugs */ 7:
  2530                      message.maxAllowedIndividualBugs = reader.int32();
  2531                      break;
  2532                  case /* bool file_overall */ 8:
  2533                      message.fileOverall = reader.bool();
  2534                      break;
  2535                  case /* testgrid.config.AutoBugOptions.DefaultTestMetadata default_test_metadata */ 9:
  2536                      message.defaultTestMetadata = AutoBugOptions_DefaultTestMetadata.internalBinaryRead(reader, reader.uint32(), options, message.defaultTestMetadata);
  2537                      break;
  2538                  case /* bool advanced_test_metadata */ 11:
  2539                      message.advancedTestMetadata = reader.bool();
  2540                      break;
  2541                  case /* bool file_stale */ 12:
  2542                      message.fileStale = reader.bool();
  2543                      break;
  2544                  case /* bool ignore_overall */ 13:
  2545                      message.ignoreOverall = reader.bool();
  2546                      break;
  2547                  case /* string note */ 14:
  2548                      message.note = reader.string();
  2549                      break;
  2550                  default:
  2551                      let u = options.readUnknownField;
  2552                      if (u === "throw")
  2553                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  2554                      let d = reader.skip(wireType);
  2555                      if (u !== false)
  2556                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  2557              }
  2558          }
  2559          return message;
  2560      }
  2561      internalBinaryWrite(message: AutoBugOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  2562          /* int32 beta_autobug_component = 10; */
  2563          if (message.betaAutobugComponent !== 0)
  2564              writer.tag(10, WireType.Varint).int32(message.betaAutobugComponent);
  2565          /* bool auto_close = 1; */
  2566          if (message.autoClose !== false)
  2567              writer.tag(1, WireType.Varint).bool(message.autoClose);
  2568          /* repeated int64 hotlist_ids = 2; */
  2569          if (message.hotlistIds.length) {
  2570              writer.tag(2, WireType.LengthDelimited).fork();
  2571              for (let i = 0; i < message.hotlistIds.length; i++)
  2572                  writer.int64(message.hotlistIds[i]);
  2573              writer.join();
  2574          }
  2575          /* testgrid.config.AutoBugOptions.Priority priority = 3; */
  2576          if (message.priority !== 0)
  2577              writer.tag(3, WireType.Varint).int32(message.priority);
  2578          /* repeated testgrid.config.HotlistIdFromSource hotlist_ids_from_source = 4 [deprecated = true]; */
  2579          for (let i = 0; i < message.hotlistIdsFromSource.length; i++)
  2580              HotlistIdFromSource.internalBinaryWrite(message.hotlistIdsFromSource[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join();
  2581          /* bool file_individual = 5; */
  2582          if (message.fileIndividual !== false)
  2583              writer.tag(5, WireType.Varint).bool(message.fileIndividual);
  2584          /* bool singleton_autobug = 6; */
  2585          if (message.singletonAutobug !== false)
  2586              writer.tag(6, WireType.Varint).bool(message.singletonAutobug);
  2587          /* int32 max_allowed_individual_bugs = 7; */
  2588          if (message.maxAllowedIndividualBugs !== 0)
  2589              writer.tag(7, WireType.Varint).int32(message.maxAllowedIndividualBugs);
  2590          /* bool file_overall = 8; */
  2591          if (message.fileOverall !== false)
  2592              writer.tag(8, WireType.Varint).bool(message.fileOverall);
  2593          /* testgrid.config.AutoBugOptions.DefaultTestMetadata default_test_metadata = 9; */
  2594          if (message.defaultTestMetadata)
  2595              AutoBugOptions_DefaultTestMetadata.internalBinaryWrite(message.defaultTestMetadata, writer.tag(9, WireType.LengthDelimited).fork(), options).join();
  2596          /* bool advanced_test_metadata = 11; */
  2597          if (message.advancedTestMetadata !== false)
  2598              writer.tag(11, WireType.Varint).bool(message.advancedTestMetadata);
  2599          /* bool file_stale = 12; */
  2600          if (message.fileStale !== false)
  2601              writer.tag(12, WireType.Varint).bool(message.fileStale);
  2602          /* bool ignore_overall = 13; */
  2603          if (message.ignoreOverall !== false)
  2604              writer.tag(13, WireType.Varint).bool(message.ignoreOverall);
  2605          /* string note = 14; */
  2606          if (message.note !== "")
  2607              writer.tag(14, WireType.LengthDelimited).string(message.note);
  2608          let u = options.writeUnknownFields;
  2609          if (u !== false)
  2610              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  2611          return writer;
  2612      }
  2613  }
  2614  /**
  2615   * @generated MessageType for protobuf message testgrid.config.AutoBugOptions
  2616   */
  2617  export const AutoBugOptions = new AutoBugOptions$Type();
  2618  // @generated message type with reflection information, may provide speed optimized methods
  2619  class AutoBugOptions_DefaultTestMetadata$Type extends MessageType<AutoBugOptions_DefaultTestMetadata> {
  2620      constructor() {
  2621          super("testgrid.config.AutoBugOptions.DefaultTestMetadata", [
  2622              { no: 1, name: "bug_component", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  2623              { no: 2, name: "owner", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2624              { no: 3, name: "cc", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }
  2625          ]);
  2626      }
  2627      create(value?: PartialMessage<AutoBugOptions_DefaultTestMetadata>): AutoBugOptions_DefaultTestMetadata {
  2628          const message = { bugComponent: 0, owner: "", cc: [] };
  2629          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  2630          if (value !== undefined)
  2631              reflectionMergePartial<AutoBugOptions_DefaultTestMetadata>(this, message, value);
  2632          return message;
  2633      }
  2634      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AutoBugOptions_DefaultTestMetadata): AutoBugOptions_DefaultTestMetadata {
  2635          let message = target ?? this.create(), end = reader.pos + length;
  2636          while (reader.pos < end) {
  2637              let [fieldNo, wireType] = reader.tag();
  2638              switch (fieldNo) {
  2639                  case /* int32 bug_component */ 1:
  2640                      message.bugComponent = reader.int32();
  2641                      break;
  2642                  case /* string owner */ 2:
  2643                      message.owner = reader.string();
  2644                      break;
  2645                  case /* repeated string cc */ 3:
  2646                      message.cc.push(reader.string());
  2647                      break;
  2648                  default:
  2649                      let u = options.readUnknownField;
  2650                      if (u === "throw")
  2651                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  2652                      let d = reader.skip(wireType);
  2653                      if (u !== false)
  2654                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  2655              }
  2656          }
  2657          return message;
  2658      }
  2659      internalBinaryWrite(message: AutoBugOptions_DefaultTestMetadata, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  2660          /* int32 bug_component = 1; */
  2661          if (message.bugComponent !== 0)
  2662              writer.tag(1, WireType.Varint).int32(message.bugComponent);
  2663          /* string owner = 2; */
  2664          if (message.owner !== "")
  2665              writer.tag(2, WireType.LengthDelimited).string(message.owner);
  2666          /* repeated string cc = 3; */
  2667          for (let i = 0; i < message.cc.length; i++)
  2668              writer.tag(3, WireType.LengthDelimited).string(message.cc[i]);
  2669          let u = options.writeUnknownFields;
  2670          if (u !== false)
  2671              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  2672          return writer;
  2673      }
  2674  }
  2675  /**
  2676   * @generated MessageType for protobuf message testgrid.config.AutoBugOptions.DefaultTestMetadata
  2677   */
  2678  export const AutoBugOptions_DefaultTestMetadata = new AutoBugOptions_DefaultTestMetadata$Type();
  2679  // @generated message type with reflection information, may provide speed optimized methods
  2680  class HotlistIdFromSource$Type extends MessageType<HotlistIdFromSource> {
  2681      constructor() {
  2682          super("testgrid.config.HotlistIdFromSource", [
  2683              { no: 1, name: "value", kind: "scalar", oneof: "hotlistIdSource", T: 3 /*ScalarType.INT64*/ },
  2684              { no: 2, name: "label", kind: "scalar", oneof: "hotlistIdSource", T: 9 /*ScalarType.STRING*/ }
  2685          ]);
  2686      }
  2687      create(value?: PartialMessage<HotlistIdFromSource>): HotlistIdFromSource {
  2688          const message = { hotlistIdSource: { oneofKind: undefined } };
  2689          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  2690          if (value !== undefined)
  2691              reflectionMergePartial<HotlistIdFromSource>(this, message, value);
  2692          return message;
  2693      }
  2694      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: HotlistIdFromSource): HotlistIdFromSource {
  2695          let message = target ?? this.create(), end = reader.pos + length;
  2696          while (reader.pos < end) {
  2697              let [fieldNo, wireType] = reader.tag();
  2698              switch (fieldNo) {
  2699                  case /* int64 value */ 1:
  2700                      message.hotlistIdSource = {
  2701                          oneofKind: "value",
  2702                          value: reader.int64().toString()
  2703                      };
  2704                      break;
  2705                  case /* string label */ 2:
  2706                      message.hotlistIdSource = {
  2707                          oneofKind: "label",
  2708                          label: reader.string()
  2709                      };
  2710                      break;
  2711                  default:
  2712                      let u = options.readUnknownField;
  2713                      if (u === "throw")
  2714                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  2715                      let d = reader.skip(wireType);
  2716                      if (u !== false)
  2717                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  2718              }
  2719          }
  2720          return message;
  2721      }
  2722      internalBinaryWrite(message: HotlistIdFromSource, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  2723          /* int64 value = 1; */
  2724          if (message.hotlistIdSource.oneofKind === "value")
  2725              writer.tag(1, WireType.Varint).int64(message.hotlistIdSource.value);
  2726          /* string label = 2; */
  2727          if (message.hotlistIdSource.oneofKind === "label")
  2728              writer.tag(2, WireType.LengthDelimited).string(message.hotlistIdSource.label);
  2729          let u = options.writeUnknownFields;
  2730          if (u !== false)
  2731              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  2732          return writer;
  2733      }
  2734  }
  2735  /**
  2736   * @generated MessageType for protobuf message testgrid.config.HotlistIdFromSource
  2737   */
  2738  export const HotlistIdFromSource = new HotlistIdFromSource$Type();
  2739  // @generated message type with reflection information, may provide speed optimized methods
  2740  class Dashboard$Type extends MessageType<Dashboard> {
  2741      constructor() {
  2742          super("testgrid.config.Dashboard", [
  2743              { no: 1, name: "dashboard_tab", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => DashboardTab },
  2744              { no: 2, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2745              { no: 3, name: "notifications", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Notification },
  2746              { no: 5, name: "default_tab", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2747              { no: 8, name: "downplay_failing_tabs", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  2748              { no: 6, name: "highlight_failing_tabs", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  2749              { no: 7, name: "highlight_today", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  2750              { no: 9, name: "description", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
  2751          ]);
  2752      }
  2753      create(value?: PartialMessage<Dashboard>): Dashboard {
  2754          const message = { dashboardTab: [], name: "", notifications: [], defaultTab: "", downplayFailingTabs: false, highlightFailingTabs: false, highlightToday: false, description: "" };
  2755          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  2756          if (value !== undefined)
  2757              reflectionMergePartial<Dashboard>(this, message, value);
  2758          return message;
  2759      }
  2760      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Dashboard): Dashboard {
  2761          let message = target ?? this.create(), end = reader.pos + length;
  2762          while (reader.pos < end) {
  2763              let [fieldNo, wireType] = reader.tag();
  2764              switch (fieldNo) {
  2765                  case /* repeated testgrid.config.DashboardTab dashboard_tab */ 1:
  2766                      message.dashboardTab.push(DashboardTab.internalBinaryRead(reader, reader.uint32(), options));
  2767                      break;
  2768                  case /* string name */ 2:
  2769                      message.name = reader.string();
  2770                      break;
  2771                  case /* repeated testgrid.config.Notification notifications */ 3:
  2772                      message.notifications.push(Notification.internalBinaryRead(reader, reader.uint32(), options));
  2773                      break;
  2774                  case /* string default_tab */ 5:
  2775                      message.defaultTab = reader.string();
  2776                      break;
  2777                  case /* bool downplay_failing_tabs */ 8:
  2778                      message.downplayFailingTabs = reader.bool();
  2779                      break;
  2780                  case /* bool highlight_failing_tabs = 6 [deprecated = true];*/ 6:
  2781                      message.highlightFailingTabs = reader.bool();
  2782                      break;
  2783                  case /* bool highlight_today */ 7:
  2784                      message.highlightToday = reader.bool();
  2785                      break;
  2786                  case /* string description */ 9:
  2787                      message.description = reader.string();
  2788                      break;
  2789                  default:
  2790                      let u = options.readUnknownField;
  2791                      if (u === "throw")
  2792                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  2793                      let d = reader.skip(wireType);
  2794                      if (u !== false)
  2795                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  2796              }
  2797          }
  2798          return message;
  2799      }
  2800      internalBinaryWrite(message: Dashboard, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  2801          /* repeated testgrid.config.DashboardTab dashboard_tab = 1; */
  2802          for (let i = 0; i < message.dashboardTab.length; i++)
  2803              DashboardTab.internalBinaryWrite(message.dashboardTab[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
  2804          /* string name = 2; */
  2805          if (message.name !== "")
  2806              writer.tag(2, WireType.LengthDelimited).string(message.name);
  2807          /* repeated testgrid.config.Notification notifications = 3; */
  2808          for (let i = 0; i < message.notifications.length; i++)
  2809              Notification.internalBinaryWrite(message.notifications[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();
  2810          /* string default_tab = 5; */
  2811          if (message.defaultTab !== "")
  2812              writer.tag(5, WireType.LengthDelimited).string(message.defaultTab);
  2813          /* bool downplay_failing_tabs = 8; */
  2814          if (message.downplayFailingTabs !== false)
  2815              writer.tag(8, WireType.Varint).bool(message.downplayFailingTabs);
  2816          /* bool highlight_failing_tabs = 6 [deprecated = true]; */
  2817          if (message.highlightFailingTabs !== false)
  2818              writer.tag(6, WireType.Varint).bool(message.highlightFailingTabs);
  2819          /* bool highlight_today = 7; */
  2820          if (message.highlightToday !== false)
  2821              writer.tag(7, WireType.Varint).bool(message.highlightToday);
  2822          /* string description = 9; */
  2823          if (message.description !== "")
  2824              writer.tag(9, WireType.LengthDelimited).string(message.description);
  2825          let u = options.writeUnknownFields;
  2826          if (u !== false)
  2827              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  2828          return writer;
  2829      }
  2830  }
  2831  /**
  2832   * @generated MessageType for protobuf message testgrid.config.Dashboard
  2833   */
  2834  export const Dashboard = new Dashboard$Type();
  2835  // @generated message type with reflection information, may provide speed optimized methods
  2836  class LinkTemplate$Type extends MessageType<LinkTemplate> {
  2837      constructor() {
  2838          super("testgrid.config.LinkTemplate", [
  2839              { no: 1, name: "url", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2840              { no: 2, name: "options", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => LinkOptionsTemplate },
  2841              { no: 3, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
  2842          ]);
  2843      }
  2844      create(value?: PartialMessage<LinkTemplate>): LinkTemplate {
  2845          const message = { url: "", options: [], name: "" };
  2846          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  2847          if (value !== undefined)
  2848              reflectionMergePartial<LinkTemplate>(this, message, value);
  2849          return message;
  2850      }
  2851      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LinkTemplate): LinkTemplate {
  2852          let message = target ?? this.create(), end = reader.pos + length;
  2853          while (reader.pos < end) {
  2854              let [fieldNo, wireType] = reader.tag();
  2855              switch (fieldNo) {
  2856                  case /* string url */ 1:
  2857                      message.url = reader.string();
  2858                      break;
  2859                  case /* repeated testgrid.config.LinkOptionsTemplate options */ 2:
  2860                      message.options.push(LinkOptionsTemplate.internalBinaryRead(reader, reader.uint32(), options));
  2861                      break;
  2862                  case /* string name */ 3:
  2863                      message.name = reader.string();
  2864                      break;
  2865                  default:
  2866                      let u = options.readUnknownField;
  2867                      if (u === "throw")
  2868                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  2869                      let d = reader.skip(wireType);
  2870                      if (u !== false)
  2871                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  2872              }
  2873          }
  2874          return message;
  2875      }
  2876      internalBinaryWrite(message: LinkTemplate, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  2877          /* string url = 1; */
  2878          if (message.url !== "")
  2879              writer.tag(1, WireType.LengthDelimited).string(message.url);
  2880          /* repeated testgrid.config.LinkOptionsTemplate options = 2; */
  2881          for (let i = 0; i < message.options.length; i++)
  2882              LinkOptionsTemplate.internalBinaryWrite(message.options[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();
  2883          /* string name = 3; */
  2884          if (message.name !== "")
  2885              writer.tag(3, WireType.LengthDelimited).string(message.name);
  2886          let u = options.writeUnknownFields;
  2887          if (u !== false)
  2888              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  2889          return writer;
  2890      }
  2891  }
  2892  /**
  2893   * @generated MessageType for protobuf message testgrid.config.LinkTemplate
  2894   */
  2895  export const LinkTemplate = new LinkTemplate$Type();
  2896  // @generated message type with reflection information, may provide speed optimized methods
  2897  class LinkOptionsTemplate$Type extends MessageType<LinkOptionsTemplate> {
  2898      constructor() {
  2899          super("testgrid.config.LinkOptionsTemplate", [
  2900              { no: 1, name: "key", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2901              { no: 2, name: "value", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
  2902          ]);
  2903      }
  2904      create(value?: PartialMessage<LinkOptionsTemplate>): LinkOptionsTemplate {
  2905          const message = { key: "", value: "" };
  2906          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  2907          if (value !== undefined)
  2908              reflectionMergePartial<LinkOptionsTemplate>(this, message, value);
  2909          return message;
  2910      }
  2911      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LinkOptionsTemplate): LinkOptionsTemplate {
  2912          let message = target ?? this.create(), end = reader.pos + length;
  2913          while (reader.pos < end) {
  2914              let [fieldNo, wireType] = reader.tag();
  2915              switch (fieldNo) {
  2916                  case /* string key */ 1:
  2917                      message.key = reader.string();
  2918                      break;
  2919                  case /* string value */ 2:
  2920                      message.value = reader.string();
  2921                      break;
  2922                  default:
  2923                      let u = options.readUnknownField;
  2924                      if (u === "throw")
  2925                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  2926                      let d = reader.skip(wireType);
  2927                      if (u !== false)
  2928                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  2929              }
  2930          }
  2931          return message;
  2932      }
  2933      internalBinaryWrite(message: LinkOptionsTemplate, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  2934          /* string key = 1; */
  2935          if (message.key !== "")
  2936              writer.tag(1, WireType.LengthDelimited).string(message.key);
  2937          /* string value = 2; */
  2938          if (message.value !== "")
  2939              writer.tag(2, WireType.LengthDelimited).string(message.value);
  2940          let u = options.writeUnknownFields;
  2941          if (u !== false)
  2942              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  2943          return writer;
  2944      }
  2945  }
  2946  /**
  2947   * @generated MessageType for protobuf message testgrid.config.LinkOptionsTemplate
  2948   */
  2949  export const LinkOptionsTemplate = new LinkOptionsTemplate$Type();
  2950  // @generated message type with reflection information, may provide speed optimized methods
  2951  class DashboardTab$Type extends MessageType<DashboardTab> {
  2952      constructor() {
  2953          super("testgrid.config.DashboardTab", [
  2954              { no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2955              { no: 2, name: "test_group_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2956              { no: 3, name: "bug_component", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  2957              { no: 4, name: "code_search_path", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2958              { no: 5, name: "num_columns_recent", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  2959              { no: 6, name: "base_options", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2960              { no: 7, name: "open_test_template", kind: "message", T: () => LinkTemplate },
  2961              { no: 8, name: "file_bug_template", kind: "message", T: () => LinkTemplate },
  2962              { no: 9, name: "attach_bug_template", kind: "message", T: () => LinkTemplate },
  2963              { no: 10, name: "results_text", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2964              { no: 11, name: "results_url_template", kind: "message", T: () => LinkTemplate },
  2965              { no: 12, name: "code_search_url_template", kind: "message", T: () => LinkTemplate },
  2966              { no: 13, name: "description", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2967              { no: 14, name: "tabular_names_regex", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2968              { no: 15, name: "alert_options", kind: "message", T: () => DashboardTabAlertOptions },
  2969              { no: 24, name: "flakiness_alert_options", kind: "message", T: () => DashboardTabFlakinessAlertOptions },
  2970              { no: 26, name: "status_customization_options", kind: "message", T: () => DashboardTabStatusCustomizationOptions },
  2971              { no: 16, name: "about_dashboard_url", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  2972              { no: 17, name: "open_bug_template", kind: "message", T: () => LinkTemplate },
  2973              { no: 18, name: "auto_file_bugs", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  2974              { no: 19, name: "display_local_time", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  2975              { no: 20, name: "context_menu_template", kind: "message", T: () => LinkTemplate },
  2976              { no: 21, name: "broken_column_threshold", kind: "scalar", T: 2 /*ScalarType.FLOAT*/ },
  2977              { no: 22, name: "beta_autobug_options", kind: "message", T: () => AutoBugOptions },
  2978              { no: 23, name: "health_analysis_options", kind: "message", T: () => HealthAnalysisOptions },
  2979              { no: 25, name: "column_diff_link_templates", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => LinkTemplate }
  2980          ]);
  2981      }
  2982      create(value?: PartialMessage<DashboardTab>): DashboardTab {
  2983          const message = { name: "", testGroupName: "", bugComponent: 0, codeSearchPath: "", numColumnsRecent: 0, baseOptions: "", resultsText: "", description: "", tabularNamesRegex: "", aboutDashboardUrl: "", autoFileBugs: false, displayLocalTime: false, brokenColumnThreshold: 0, columnDiffLinkTemplates: [] };
  2984          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  2985          if (value !== undefined)
  2986              reflectionMergePartial<DashboardTab>(this, message, value);
  2987          return message;
  2988      }
  2989      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DashboardTab): DashboardTab {
  2990          let message = target ?? this.create(), end = reader.pos + length;
  2991          while (reader.pos < end) {
  2992              let [fieldNo, wireType] = reader.tag();
  2993              switch (fieldNo) {
  2994                  case /* string name */ 1:
  2995                      message.name = reader.string();
  2996                      break;
  2997                  case /* string test_group_name */ 2:
  2998                      message.testGroupName = reader.string();
  2999                      break;
  3000                  case /* int32 bug_component */ 3:
  3001                      message.bugComponent = reader.int32();
  3002                      break;
  3003                  case /* string code_search_path */ 4:
  3004                      message.codeSearchPath = reader.string();
  3005                      break;
  3006                  case /* int32 num_columns_recent */ 5:
  3007                      message.numColumnsRecent = reader.int32();
  3008                      break;
  3009                  case /* string base_options */ 6:
  3010                      message.baseOptions = reader.string();
  3011                      break;
  3012                  case /* testgrid.config.LinkTemplate open_test_template */ 7:
  3013                      message.openTestTemplate = LinkTemplate.internalBinaryRead(reader, reader.uint32(), options, message.openTestTemplate);
  3014                      break;
  3015                  case /* testgrid.config.LinkTemplate file_bug_template */ 8:
  3016                      message.fileBugTemplate = LinkTemplate.internalBinaryRead(reader, reader.uint32(), options, message.fileBugTemplate);
  3017                      break;
  3018                  case /* testgrid.config.LinkTemplate attach_bug_template */ 9:
  3019                      message.attachBugTemplate = LinkTemplate.internalBinaryRead(reader, reader.uint32(), options, message.attachBugTemplate);
  3020                      break;
  3021                  case /* string results_text */ 10:
  3022                      message.resultsText = reader.string();
  3023                      break;
  3024                  case /* testgrid.config.LinkTemplate results_url_template */ 11:
  3025                      message.resultsUrlTemplate = LinkTemplate.internalBinaryRead(reader, reader.uint32(), options, message.resultsUrlTemplate);
  3026                      break;
  3027                  case /* testgrid.config.LinkTemplate code_search_url_template */ 12:
  3028                      message.codeSearchUrlTemplate = LinkTemplate.internalBinaryRead(reader, reader.uint32(), options, message.codeSearchUrlTemplate);
  3029                      break;
  3030                  case /* string description */ 13:
  3031                      message.description = reader.string();
  3032                      break;
  3033                  case /* string tabular_names_regex */ 14:
  3034                      message.tabularNamesRegex = reader.string();
  3035                      break;
  3036                  case /* testgrid.config.DashboardTabAlertOptions alert_options */ 15:
  3037                      message.alertOptions = DashboardTabAlertOptions.internalBinaryRead(reader, reader.uint32(), options, message.alertOptions);
  3038                      break;
  3039                  case /* testgrid.config.DashboardTabFlakinessAlertOptions flakiness_alert_options */ 24:
  3040                      message.flakinessAlertOptions = DashboardTabFlakinessAlertOptions.internalBinaryRead(reader, reader.uint32(), options, message.flakinessAlertOptions);
  3041                      break;
  3042                  case /* testgrid.config.DashboardTabStatusCustomizationOptions status_customization_options */ 26:
  3043                      message.statusCustomizationOptions = DashboardTabStatusCustomizationOptions.internalBinaryRead(reader, reader.uint32(), options, message.statusCustomizationOptions);
  3044                      break;
  3045                  case /* string about_dashboard_url */ 16:
  3046                      message.aboutDashboardUrl = reader.string();
  3047                      break;
  3048                  case /* testgrid.config.LinkTemplate open_bug_template */ 17:
  3049                      message.openBugTemplate = LinkTemplate.internalBinaryRead(reader, reader.uint32(), options, message.openBugTemplate);
  3050                      break;
  3051                  case /* bool auto_file_bugs */ 18:
  3052                      message.autoFileBugs = reader.bool();
  3053                      break;
  3054                  case /* bool display_local_time */ 19:
  3055                      message.displayLocalTime = reader.bool();
  3056                      break;
  3057                  case /* testgrid.config.LinkTemplate context_menu_template */ 20:
  3058                      message.contextMenuTemplate = LinkTemplate.internalBinaryRead(reader, reader.uint32(), options, message.contextMenuTemplate);
  3059                      break;
  3060                  case /* float broken_column_threshold */ 21:
  3061                      message.brokenColumnThreshold = reader.float();
  3062                      break;
  3063                  case /* testgrid.config.AutoBugOptions beta_autobug_options */ 22:
  3064                      message.betaAutobugOptions = AutoBugOptions.internalBinaryRead(reader, reader.uint32(), options, message.betaAutobugOptions);
  3065                      break;
  3066                  case /* testgrid.config.HealthAnalysisOptions health_analysis_options */ 23:
  3067                      message.healthAnalysisOptions = HealthAnalysisOptions.internalBinaryRead(reader, reader.uint32(), options, message.healthAnalysisOptions);
  3068                      break;
  3069                  case /* repeated testgrid.config.LinkTemplate column_diff_link_templates */ 25:
  3070                      message.columnDiffLinkTemplates.push(LinkTemplate.internalBinaryRead(reader, reader.uint32(), options));
  3071                      break;
  3072                  default:
  3073                      let u = options.readUnknownField;
  3074                      if (u === "throw")
  3075                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  3076                      let d = reader.skip(wireType);
  3077                      if (u !== false)
  3078                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  3079              }
  3080          }
  3081          return message;
  3082      }
  3083      internalBinaryWrite(message: DashboardTab, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  3084          /* string name = 1; */
  3085          if (message.name !== "")
  3086              writer.tag(1, WireType.LengthDelimited).string(message.name);
  3087          /* string test_group_name = 2; */
  3088          if (message.testGroupName !== "")
  3089              writer.tag(2, WireType.LengthDelimited).string(message.testGroupName);
  3090          /* int32 bug_component = 3; */
  3091          if (message.bugComponent !== 0)
  3092              writer.tag(3, WireType.Varint).int32(message.bugComponent);
  3093          /* string code_search_path = 4; */
  3094          if (message.codeSearchPath !== "")
  3095              writer.tag(4, WireType.LengthDelimited).string(message.codeSearchPath);
  3096          /* int32 num_columns_recent = 5; */
  3097          if (message.numColumnsRecent !== 0)
  3098              writer.tag(5, WireType.Varint).int32(message.numColumnsRecent);
  3099          /* string base_options = 6; */
  3100          if (message.baseOptions !== "")
  3101              writer.tag(6, WireType.LengthDelimited).string(message.baseOptions);
  3102          /* testgrid.config.LinkTemplate open_test_template = 7; */
  3103          if (message.openTestTemplate)
  3104              LinkTemplate.internalBinaryWrite(message.openTestTemplate, writer.tag(7, WireType.LengthDelimited).fork(), options).join();
  3105          /* testgrid.config.LinkTemplate file_bug_template = 8; */
  3106          if (message.fileBugTemplate)
  3107              LinkTemplate.internalBinaryWrite(message.fileBugTemplate, writer.tag(8, WireType.LengthDelimited).fork(), options).join();
  3108          /* testgrid.config.LinkTemplate attach_bug_template = 9; */
  3109          if (message.attachBugTemplate)
  3110              LinkTemplate.internalBinaryWrite(message.attachBugTemplate, writer.tag(9, WireType.LengthDelimited).fork(), options).join();
  3111          /* string results_text = 10; */
  3112          if (message.resultsText !== "")
  3113              writer.tag(10, WireType.LengthDelimited).string(message.resultsText);
  3114          /* testgrid.config.LinkTemplate results_url_template = 11; */
  3115          if (message.resultsUrlTemplate)
  3116              LinkTemplate.internalBinaryWrite(message.resultsUrlTemplate, writer.tag(11, WireType.LengthDelimited).fork(), options).join();
  3117          /* testgrid.config.LinkTemplate code_search_url_template = 12; */
  3118          if (message.codeSearchUrlTemplate)
  3119              LinkTemplate.internalBinaryWrite(message.codeSearchUrlTemplate, writer.tag(12, WireType.LengthDelimited).fork(), options).join();
  3120          /* string description = 13; */
  3121          if (message.description !== "")
  3122              writer.tag(13, WireType.LengthDelimited).string(message.description);
  3123          /* string tabular_names_regex = 14; */
  3124          if (message.tabularNamesRegex !== "")
  3125              writer.tag(14, WireType.LengthDelimited).string(message.tabularNamesRegex);
  3126          /* testgrid.config.DashboardTabAlertOptions alert_options = 15; */
  3127          if (message.alertOptions)
  3128              DashboardTabAlertOptions.internalBinaryWrite(message.alertOptions, writer.tag(15, WireType.LengthDelimited).fork(), options).join();
  3129          /* testgrid.config.DashboardTabFlakinessAlertOptions flakiness_alert_options = 24; */
  3130          if (message.flakinessAlertOptions)
  3131              DashboardTabFlakinessAlertOptions.internalBinaryWrite(message.flakinessAlertOptions, writer.tag(24, WireType.LengthDelimited).fork(), options).join();
  3132          /* testgrid.config.DashboardTabStatusCustomizationOptions status_customization_options = 26; */
  3133          if (message.statusCustomizationOptions)
  3134              DashboardTabStatusCustomizationOptions.internalBinaryWrite(message.statusCustomizationOptions, writer.tag(26, WireType.LengthDelimited).fork(), options).join();
  3135          /* string about_dashboard_url = 16; */
  3136          if (message.aboutDashboardUrl !== "")
  3137              writer.tag(16, WireType.LengthDelimited).string(message.aboutDashboardUrl);
  3138          /* testgrid.config.LinkTemplate open_bug_template = 17; */
  3139          if (message.openBugTemplate)
  3140              LinkTemplate.internalBinaryWrite(message.openBugTemplate, writer.tag(17, WireType.LengthDelimited).fork(), options).join();
  3141          /* bool auto_file_bugs = 18; */
  3142          if (message.autoFileBugs !== false)
  3143              writer.tag(18, WireType.Varint).bool(message.autoFileBugs);
  3144          /* bool display_local_time = 19; */
  3145          if (message.displayLocalTime !== false)
  3146              writer.tag(19, WireType.Varint).bool(message.displayLocalTime);
  3147          /* testgrid.config.LinkTemplate context_menu_template = 20; */
  3148          if (message.contextMenuTemplate)
  3149              LinkTemplate.internalBinaryWrite(message.contextMenuTemplate, writer.tag(20, WireType.LengthDelimited).fork(), options).join();
  3150          /* float broken_column_threshold = 21; */
  3151          if (message.brokenColumnThreshold !== 0)
  3152              writer.tag(21, WireType.Bit32).float(message.brokenColumnThreshold);
  3153          /* testgrid.config.AutoBugOptions beta_autobug_options = 22; */
  3154          if (message.betaAutobugOptions)
  3155              AutoBugOptions.internalBinaryWrite(message.betaAutobugOptions, writer.tag(22, WireType.LengthDelimited).fork(), options).join();
  3156          /* testgrid.config.HealthAnalysisOptions health_analysis_options = 23; */
  3157          if (message.healthAnalysisOptions)
  3158              HealthAnalysisOptions.internalBinaryWrite(message.healthAnalysisOptions, writer.tag(23, WireType.LengthDelimited).fork(), options).join();
  3159          /* repeated testgrid.config.LinkTemplate column_diff_link_templates = 25; */
  3160          for (let i = 0; i < message.columnDiffLinkTemplates.length; i++)
  3161              LinkTemplate.internalBinaryWrite(message.columnDiffLinkTemplates[i], writer.tag(25, WireType.LengthDelimited).fork(), options).join();
  3162          let u = options.writeUnknownFields;
  3163          if (u !== false)
  3164              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  3165          return writer;
  3166      }
  3167  }
  3168  /**
  3169   * @generated MessageType for protobuf message testgrid.config.DashboardTab
  3170   */
  3171  export const DashboardTab = new DashboardTab$Type();
  3172  // @generated message type with reflection information, may provide speed optimized methods
  3173  class DashboardTabAlertOptions$Type extends MessageType<DashboardTabAlertOptions> {
  3174      constructor() {
  3175          super("testgrid.config.DashboardTabAlertOptions", [
  3176              { no: 1, name: "alert_stale_results_hours", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  3177              { no: 2, name: "num_failures_to_alert", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  3178              { no: 3, name: "alert_mail_to_addresses", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  3179              { no: 4, name: "num_passes_to_disable_alert", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  3180              { no: 5, name: "subject", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  3181              { no: 6, name: "debug_url", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  3182              { no: 7, name: "debug_message", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  3183              { no: 8, name: "wait_minutes_between_emails", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  3184              { no: 9, name: "alert_mail_failure_message", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
  3185          ]);
  3186      }
  3187      create(value?: PartialMessage<DashboardTabAlertOptions>): DashboardTabAlertOptions {
  3188          const message = { alertStaleResultsHours: 0, numFailuresToAlert: 0, alertMailToAddresses: "", numPassesToDisableAlert: 0, subject: "", debugUrl: "", debugMessage: "", waitMinutesBetweenEmails: 0, alertMailFailureMessage: "" };
  3189          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  3190          if (value !== undefined)
  3191              reflectionMergePartial<DashboardTabAlertOptions>(this, message, value);
  3192          return message;
  3193      }
  3194      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DashboardTabAlertOptions): DashboardTabAlertOptions {
  3195          let message = target ?? this.create(), end = reader.pos + length;
  3196          while (reader.pos < end) {
  3197              let [fieldNo, wireType] = reader.tag();
  3198              switch (fieldNo) {
  3199                  case /* int32 alert_stale_results_hours */ 1:
  3200                      message.alertStaleResultsHours = reader.int32();
  3201                      break;
  3202                  case /* int32 num_failures_to_alert */ 2:
  3203                      message.numFailuresToAlert = reader.int32();
  3204                      break;
  3205                  case /* string alert_mail_to_addresses */ 3:
  3206                      message.alertMailToAddresses = reader.string();
  3207                      break;
  3208                  case /* int32 num_passes_to_disable_alert */ 4:
  3209                      message.numPassesToDisableAlert = reader.int32();
  3210                      break;
  3211                  case /* string subject */ 5:
  3212                      message.subject = reader.string();
  3213                      break;
  3214                  case /* string debug_url */ 6:
  3215                      message.debugUrl = reader.string();
  3216                      break;
  3217                  case /* string debug_message */ 7:
  3218                      message.debugMessage = reader.string();
  3219                      break;
  3220                  case /* int32 wait_minutes_between_emails */ 8:
  3221                      message.waitMinutesBetweenEmails = reader.int32();
  3222                      break;
  3223                  case /* string alert_mail_failure_message */ 9:
  3224                      message.alertMailFailureMessage = reader.string();
  3225                      break;
  3226                  default:
  3227                      let u = options.readUnknownField;
  3228                      if (u === "throw")
  3229                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  3230                      let d = reader.skip(wireType);
  3231                      if (u !== false)
  3232                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  3233              }
  3234          }
  3235          return message;
  3236      }
  3237      internalBinaryWrite(message: DashboardTabAlertOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  3238          /* int32 alert_stale_results_hours = 1; */
  3239          if (message.alertStaleResultsHours !== 0)
  3240              writer.tag(1, WireType.Varint).int32(message.alertStaleResultsHours);
  3241          /* int32 num_failures_to_alert = 2; */
  3242          if (message.numFailuresToAlert !== 0)
  3243              writer.tag(2, WireType.Varint).int32(message.numFailuresToAlert);
  3244          /* string alert_mail_to_addresses = 3; */
  3245          if (message.alertMailToAddresses !== "")
  3246              writer.tag(3, WireType.LengthDelimited).string(message.alertMailToAddresses);
  3247          /* int32 num_passes_to_disable_alert = 4; */
  3248          if (message.numPassesToDisableAlert !== 0)
  3249              writer.tag(4, WireType.Varint).int32(message.numPassesToDisableAlert);
  3250          /* string subject = 5; */
  3251          if (message.subject !== "")
  3252              writer.tag(5, WireType.LengthDelimited).string(message.subject);
  3253          /* string debug_url = 6; */
  3254          if (message.debugUrl !== "")
  3255              writer.tag(6, WireType.LengthDelimited).string(message.debugUrl);
  3256          /* string debug_message = 7; */
  3257          if (message.debugMessage !== "")
  3258              writer.tag(7, WireType.LengthDelimited).string(message.debugMessage);
  3259          /* int32 wait_minutes_between_emails = 8; */
  3260          if (message.waitMinutesBetweenEmails !== 0)
  3261              writer.tag(8, WireType.Varint).int32(message.waitMinutesBetweenEmails);
  3262          /* string alert_mail_failure_message = 9; */
  3263          if (message.alertMailFailureMessage !== "")
  3264              writer.tag(9, WireType.LengthDelimited).string(message.alertMailFailureMessage);
  3265          let u = options.writeUnknownFields;
  3266          if (u !== false)
  3267              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  3268          return writer;
  3269      }
  3270  }
  3271  /**
  3272   * @generated MessageType for protobuf message testgrid.config.DashboardTabAlertOptions
  3273   */
  3274  export const DashboardTabAlertOptions = new DashboardTabAlertOptions$Type();
  3275  // @generated message type with reflection information, may provide speed optimized methods
  3276  class DashboardTabFlakinessAlertOptions$Type extends MessageType<DashboardTabFlakinessAlertOptions> {
  3277      constructor() {
  3278          super("testgrid.config.DashboardTabFlakinessAlertOptions", [
  3279              { no: 1, name: "minimum_flakiness_to_alert", kind: "scalar", T: 2 /*ScalarType.FLOAT*/ },
  3280              { no: 2, name: "alert_mail_to_addresses", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  3281              { no: 3, name: "subject", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  3282              { no: 4, name: "wait_minutes_between_emails", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  3283              { no: 5, name: "alert_mail_failure_message", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
  3284          ]);
  3285      }
  3286      create(value?: PartialMessage<DashboardTabFlakinessAlertOptions>): DashboardTabFlakinessAlertOptions {
  3287          const message = { minimumFlakinessToAlert: 0, alertMailToAddresses: "", subject: "", waitMinutesBetweenEmails: 0, alertMailFailureMessage: "" };
  3288          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  3289          if (value !== undefined)
  3290              reflectionMergePartial<DashboardTabFlakinessAlertOptions>(this, message, value);
  3291          return message;
  3292      }
  3293      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DashboardTabFlakinessAlertOptions): DashboardTabFlakinessAlertOptions {
  3294          let message = target ?? this.create(), end = reader.pos + length;
  3295          while (reader.pos < end) {
  3296              let [fieldNo, wireType] = reader.tag();
  3297              switch (fieldNo) {
  3298                  case /* float minimum_flakiness_to_alert */ 1:
  3299                      message.minimumFlakinessToAlert = reader.float();
  3300                      break;
  3301                  case /* string alert_mail_to_addresses */ 2:
  3302                      message.alertMailToAddresses = reader.string();
  3303                      break;
  3304                  case /* string subject */ 3:
  3305                      message.subject = reader.string();
  3306                      break;
  3307                  case /* int32 wait_minutes_between_emails */ 4:
  3308                      message.waitMinutesBetweenEmails = reader.int32();
  3309                      break;
  3310                  case /* string alert_mail_failure_message */ 5:
  3311                      message.alertMailFailureMessage = reader.string();
  3312                      break;
  3313                  default:
  3314                      let u = options.readUnknownField;
  3315                      if (u === "throw")
  3316                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  3317                      let d = reader.skip(wireType);
  3318                      if (u !== false)
  3319                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  3320              }
  3321          }
  3322          return message;
  3323      }
  3324      internalBinaryWrite(message: DashboardTabFlakinessAlertOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  3325          /* float minimum_flakiness_to_alert = 1; */
  3326          if (message.minimumFlakinessToAlert !== 0)
  3327              writer.tag(1, WireType.Bit32).float(message.minimumFlakinessToAlert);
  3328          /* string alert_mail_to_addresses = 2; */
  3329          if (message.alertMailToAddresses !== "")
  3330              writer.tag(2, WireType.LengthDelimited).string(message.alertMailToAddresses);
  3331          /* string subject = 3; */
  3332          if (message.subject !== "")
  3333              writer.tag(3, WireType.LengthDelimited).string(message.subject);
  3334          /* int32 wait_minutes_between_emails = 4; */
  3335          if (message.waitMinutesBetweenEmails !== 0)
  3336              writer.tag(4, WireType.Varint).int32(message.waitMinutesBetweenEmails);
  3337          /* string alert_mail_failure_message = 5; */
  3338          if (message.alertMailFailureMessage !== "")
  3339              writer.tag(5, WireType.LengthDelimited).string(message.alertMailFailureMessage);
  3340          let u = options.writeUnknownFields;
  3341          if (u !== false)
  3342              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  3343          return writer;
  3344      }
  3345  }
  3346  /**
  3347   * @generated MessageType for protobuf message testgrid.config.DashboardTabFlakinessAlertOptions
  3348   */
  3349  export const DashboardTabFlakinessAlertOptions = new DashboardTabFlakinessAlertOptions$Type();
  3350  // @generated message type with reflection information, may provide speed optimized methods
  3351  class DashboardTabStatusCustomizationOptions$Type extends MessageType<DashboardTabStatusCustomizationOptions> {
  3352      constructor() {
  3353          super("testgrid.config.DashboardTabStatusCustomizationOptions", [
  3354              { no: 1, name: "max_acceptable_flakiness", kind: "scalar", T: 2 /*ScalarType.FLOAT*/ },
  3355              { no: 2, name: "ignored_test_statuses", kind: "enum", repeat: 1 /*RepeatType.PACKED*/, T: () => ["testgrid.config.DashboardTabStatusCustomizationOptions.IgnoredTestStatus", DashboardTabStatusCustomizationOptions_IgnoredTestStatus] },
  3356              { no: 3, name: "min_acceptable_runs", kind: "scalar", T: 5 /*ScalarType.INT32*/ }
  3357          ]);
  3358      }
  3359      create(value?: PartialMessage<DashboardTabStatusCustomizationOptions>): DashboardTabStatusCustomizationOptions {
  3360          const message = { maxAcceptableFlakiness: 0, ignoredTestStatuses: [], minAcceptableRuns: 0 };
  3361          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  3362          if (value !== undefined)
  3363              reflectionMergePartial<DashboardTabStatusCustomizationOptions>(this, message, value);
  3364          return message;
  3365      }
  3366      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DashboardTabStatusCustomizationOptions): DashboardTabStatusCustomizationOptions {
  3367          let message = target ?? this.create(), end = reader.pos + length;
  3368          while (reader.pos < end) {
  3369              let [fieldNo, wireType] = reader.tag();
  3370              switch (fieldNo) {
  3371                  case /* float max_acceptable_flakiness */ 1:
  3372                      message.maxAcceptableFlakiness = reader.float();
  3373                      break;
  3374                  case /* repeated testgrid.config.DashboardTabStatusCustomizationOptions.IgnoredTestStatus ignored_test_statuses */ 2:
  3375                      if (wireType === WireType.LengthDelimited)
  3376                          for (let e = reader.int32() + reader.pos; reader.pos < e;)
  3377                              message.ignoredTestStatuses.push(reader.int32());
  3378                      else
  3379                          message.ignoredTestStatuses.push(reader.int32());
  3380                      break;
  3381                  case /* int32 min_acceptable_runs */ 3:
  3382                      message.minAcceptableRuns = reader.int32();
  3383                      break;
  3384                  default:
  3385                      let u = options.readUnknownField;
  3386                      if (u === "throw")
  3387                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  3388                      let d = reader.skip(wireType);
  3389                      if (u !== false)
  3390                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  3391              }
  3392          }
  3393          return message;
  3394      }
  3395      internalBinaryWrite(message: DashboardTabStatusCustomizationOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  3396          /* float max_acceptable_flakiness = 1; */
  3397          if (message.maxAcceptableFlakiness !== 0)
  3398              writer.tag(1, WireType.Bit32).float(message.maxAcceptableFlakiness);
  3399          /* repeated testgrid.config.DashboardTabStatusCustomizationOptions.IgnoredTestStatus ignored_test_statuses = 2; */
  3400          if (message.ignoredTestStatuses.length) {
  3401              writer.tag(2, WireType.LengthDelimited).fork();
  3402              for (let i = 0; i < message.ignoredTestStatuses.length; i++)
  3403                  writer.int32(message.ignoredTestStatuses[i]);
  3404              writer.join();
  3405          }
  3406          /* int32 min_acceptable_runs = 3; */
  3407          if (message.minAcceptableRuns !== 0)
  3408              writer.tag(3, WireType.Varint).int32(message.minAcceptableRuns);
  3409          let u = options.writeUnknownFields;
  3410          if (u !== false)
  3411              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  3412          return writer;
  3413      }
  3414  }
  3415  /**
  3416   * @generated MessageType for protobuf message testgrid.config.DashboardTabStatusCustomizationOptions
  3417   */
  3418  export const DashboardTabStatusCustomizationOptions = new DashboardTabStatusCustomizationOptions$Type();
  3419  // @generated message type with reflection information, may provide speed optimized methods
  3420  class DashboardGroup$Type extends MessageType<DashboardGroup> {
  3421      constructor() {
  3422          super("testgrid.config.DashboardGroup", [
  3423              { no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  3424              { no: 2, name: "dashboard_names", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
  3425              { no: 3, name: "description", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
  3426          ]);
  3427      }
  3428      create(value?: PartialMessage<DashboardGroup>): DashboardGroup {
  3429          const message = { name: "", dashboardNames: [], description: "" };
  3430          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  3431          if (value !== undefined)
  3432              reflectionMergePartial<DashboardGroup>(this, message, value);
  3433          return message;
  3434      }
  3435      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DashboardGroup): DashboardGroup {
  3436          let message = target ?? this.create(), end = reader.pos + length;
  3437          while (reader.pos < end) {
  3438              let [fieldNo, wireType] = reader.tag();
  3439              switch (fieldNo) {
  3440                  case /* string name */ 1:
  3441                      message.name = reader.string();
  3442                      break;
  3443                  case /* repeated string dashboard_names */ 2:
  3444                      message.dashboardNames.push(reader.string());
  3445                      break;
  3446                  case /* string description */ 3:
  3447                      message.description = reader.string();
  3448                      break;
  3449                  default:
  3450                      let u = options.readUnknownField;
  3451                      if (u === "throw")
  3452                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  3453                      let d = reader.skip(wireType);
  3454                      if (u !== false)
  3455                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  3456              }
  3457          }
  3458          return message;
  3459      }
  3460      internalBinaryWrite(message: DashboardGroup, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  3461          /* string name = 1; */
  3462          if (message.name !== "")
  3463              writer.tag(1, WireType.LengthDelimited).string(message.name);
  3464          /* repeated string dashboard_names = 2; */
  3465          for (let i = 0; i < message.dashboardNames.length; i++)
  3466              writer.tag(2, WireType.LengthDelimited).string(message.dashboardNames[i]);
  3467          /* string description = 3; */
  3468          if (message.description !== "")
  3469              writer.tag(3, WireType.LengthDelimited).string(message.description);
  3470          let u = options.writeUnknownFields;
  3471          if (u !== false)
  3472              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  3473          return writer;
  3474      }
  3475  }
  3476  /**
  3477   * @generated MessageType for protobuf message testgrid.config.DashboardGroup
  3478   */
  3479  export const DashboardGroup = new DashboardGroup$Type();
  3480  // @generated message type with reflection information, may provide speed optimized methods
  3481  class Configuration$Type extends MessageType<Configuration> {
  3482      constructor() {
  3483          super("testgrid.config.Configuration", [
  3484              { no: 1, name: "test_groups", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => TestGroup },
  3485              { no: 2, name: "dashboards", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Dashboard },
  3486              { no: 3, name: "dashboard_groups", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => DashboardGroup }
  3487          ]);
  3488      }
  3489      create(value?: PartialMessage<Configuration>): Configuration {
  3490          const message = { testGroups: [], dashboards: [], dashboardGroups: [] };
  3491          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  3492          if (value !== undefined)
  3493              reflectionMergePartial<Configuration>(this, message, value);
  3494          return message;
  3495      }
  3496      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Configuration): Configuration {
  3497          let message = target ?? this.create(), end = reader.pos + length;
  3498          while (reader.pos < end) {
  3499              let [fieldNo, wireType] = reader.tag();
  3500              switch (fieldNo) {
  3501                  case /* repeated testgrid.config.TestGroup test_groups */ 1:
  3502                      message.testGroups.push(TestGroup.internalBinaryRead(reader, reader.uint32(), options));
  3503                      break;
  3504                  case /* repeated testgrid.config.Dashboard dashboards */ 2:
  3505                      message.dashboards.push(Dashboard.internalBinaryRead(reader, reader.uint32(), options));
  3506                      break;
  3507                  case /* repeated testgrid.config.DashboardGroup dashboard_groups */ 3:
  3508                      message.dashboardGroups.push(DashboardGroup.internalBinaryRead(reader, reader.uint32(), options));
  3509                      break;
  3510                  default:
  3511                      let u = options.readUnknownField;
  3512                      if (u === "throw")
  3513                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  3514                      let d = reader.skip(wireType);
  3515                      if (u !== false)
  3516                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  3517              }
  3518          }
  3519          return message;
  3520      }
  3521      internalBinaryWrite(message: Configuration, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  3522          /* repeated testgrid.config.TestGroup test_groups = 1; */
  3523          for (let i = 0; i < message.testGroups.length; i++)
  3524              TestGroup.internalBinaryWrite(message.testGroups[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
  3525          /* repeated testgrid.config.Dashboard dashboards = 2; */
  3526          for (let i = 0; i < message.dashboards.length; i++)
  3527              Dashboard.internalBinaryWrite(message.dashboards[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();
  3528          /* repeated testgrid.config.DashboardGroup dashboard_groups = 3; */
  3529          for (let i = 0; i < message.dashboardGroups.length; i++)
  3530              DashboardGroup.internalBinaryWrite(message.dashboardGroups[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();
  3531          let u = options.writeUnknownFields;
  3532          if (u !== false)
  3533              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  3534          return writer;
  3535      }
  3536  }
  3537  /**
  3538   * @generated MessageType for protobuf message testgrid.config.Configuration
  3539   */
  3540  export const Configuration = new Configuration$Type();
  3541  // @generated message type with reflection information, may provide speed optimized methods
  3542  class HealthAnalysisOptions$Type extends MessageType<HealthAnalysisOptions> {
  3543      constructor() {
  3544          super("testgrid.config.HealthAnalysisOptions", [
  3545              { no: 1, name: "enable", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
  3546              { no: 2, name: "days_of_analysis", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  3547              { no: 3, name: "email_schedule", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  3548              { no: 4, name: "email_recipients", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
  3549              { no: 5, name: "grouping_regex", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
  3550          ]);
  3551      }
  3552      create(value?: PartialMessage<HealthAnalysisOptions>): HealthAnalysisOptions {
  3553          const message = { enable: false, daysOfAnalysis: 0, emailSchedule: "", emailRecipients: "", groupingRegex: "" };
  3554          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  3555          if (value !== undefined)
  3556              reflectionMergePartial<HealthAnalysisOptions>(this, message, value);
  3557          return message;
  3558      }
  3559      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: HealthAnalysisOptions): HealthAnalysisOptions {
  3560          let message = target ?? this.create(), end = reader.pos + length;
  3561          while (reader.pos < end) {
  3562              let [fieldNo, wireType] = reader.tag();
  3563              switch (fieldNo) {
  3564                  case /* bool enable */ 1:
  3565                      message.enable = reader.bool();
  3566                      break;
  3567                  case /* int32 days_of_analysis */ 2:
  3568                      message.daysOfAnalysis = reader.int32();
  3569                      break;
  3570                  case /* string email_schedule */ 3:
  3571                      message.emailSchedule = reader.string();
  3572                      break;
  3573                  case /* string email_recipients */ 4:
  3574                      message.emailRecipients = reader.string();
  3575                      break;
  3576                  case /* string grouping_regex */ 5:
  3577                      message.groupingRegex = reader.string();
  3578                      break;
  3579                  default:
  3580                      let u = options.readUnknownField;
  3581                      if (u === "throw")
  3582                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  3583                      let d = reader.skip(wireType);
  3584                      if (u !== false)
  3585                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  3586              }
  3587          }
  3588          return message;
  3589      }
  3590      internalBinaryWrite(message: HealthAnalysisOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  3591          /* bool enable = 1; */
  3592          if (message.enable !== false)
  3593              writer.tag(1, WireType.Varint).bool(message.enable);
  3594          /* int32 days_of_analysis = 2; */
  3595          if (message.daysOfAnalysis !== 0)
  3596              writer.tag(2, WireType.Varint).int32(message.daysOfAnalysis);
  3597          /* string email_schedule = 3; */
  3598          if (message.emailSchedule !== "")
  3599              writer.tag(3, WireType.LengthDelimited).string(message.emailSchedule);
  3600          /* string email_recipients = 4; */
  3601          if (message.emailRecipients !== "")
  3602              writer.tag(4, WireType.LengthDelimited).string(message.emailRecipients);
  3603          /* string grouping_regex = 5; */
  3604          if (message.groupingRegex !== "")
  3605              writer.tag(5, WireType.LengthDelimited).string(message.groupingRegex);
  3606          let u = options.writeUnknownFields;
  3607          if (u !== false)
  3608              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  3609          return writer;
  3610      }
  3611  }
  3612  /**
  3613   * @generated MessageType for protobuf message testgrid.config.HealthAnalysisOptions
  3614   */
  3615  export const HealthAnalysisOptions = new HealthAnalysisOptions$Type();
  3616  // @generated message type with reflection information, may provide speed optimized methods
  3617  class DefaultConfiguration$Type extends MessageType<DefaultConfiguration> {
  3618      constructor() {
  3619          super("testgrid.config.DefaultConfiguration", [
  3620              { no: 1, name: "default_test_group", kind: "message", T: () => TestGroup },
  3621              { no: 2, name: "default_dashboard_tab", kind: "message", T: () => DashboardTab }
  3622          ]);
  3623      }
  3624      create(value?: PartialMessage<DefaultConfiguration>): DefaultConfiguration {
  3625          const message = {};
  3626          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  3627          if (value !== undefined)
  3628              reflectionMergePartial<DefaultConfiguration>(this, message, value);
  3629          return message;
  3630      }
  3631      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DefaultConfiguration): DefaultConfiguration {
  3632          let message = target ?? this.create(), end = reader.pos + length;
  3633          while (reader.pos < end) {
  3634              let [fieldNo, wireType] = reader.tag();
  3635              switch (fieldNo) {
  3636                  case /* testgrid.config.TestGroup default_test_group = 1 [deprecated = true];*/ 1:
  3637                      message.defaultTestGroup = TestGroup.internalBinaryRead(reader, reader.uint32(), options, message.defaultTestGroup);
  3638                      break;
  3639                  case /* testgrid.config.DashboardTab default_dashboard_tab = 2 [deprecated = true];*/ 2:
  3640                      message.defaultDashboardTab = DashboardTab.internalBinaryRead(reader, reader.uint32(), options, message.defaultDashboardTab);
  3641                      break;
  3642                  default:
  3643                      let u = options.readUnknownField;
  3644                      if (u === "throw")
  3645                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  3646                      let d = reader.skip(wireType);
  3647                      if (u !== false)
  3648                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  3649              }
  3650          }
  3651          return message;
  3652      }
  3653      internalBinaryWrite(message: DefaultConfiguration, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  3654          /* testgrid.config.TestGroup default_test_group = 1 [deprecated = true]; */
  3655          if (message.defaultTestGroup)
  3656              TestGroup.internalBinaryWrite(message.defaultTestGroup, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
  3657          /* testgrid.config.DashboardTab default_dashboard_tab = 2 [deprecated = true]; */
  3658          if (message.defaultDashboardTab)
  3659              DashboardTab.internalBinaryWrite(message.defaultDashboardTab, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
  3660          let u = options.writeUnknownFields;
  3661          if (u !== false)
  3662              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  3663          return writer;
  3664      }
  3665  }
  3666  /**
  3667   * @generated MessageType for protobuf message testgrid.config.DefaultConfiguration
  3668   */
  3669  export const DefaultConfiguration = new DefaultConfiguration$Type();