// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto3";

package recipes.fuchsia.tree_closer;

message InputProperties {
  // LUCI project containing the specified Milo console.
  string project = 1;

  // Name of the Milo console to check.
  string console_name = 2;

  // Don't close the tree if the last status change was more recent than this
  // many seconds ago.
  int32 grace_period_seconds = 3;

  // Close the tree hosted here (e.g. 'fuchsia-stem-status.appspot.com').
  string tree_status_host = 4;

  // The password to use for closing the tree.
  // TODO: It's not great that we pass around the password in plain text. If
  // this ever becomes an issue, we can start using the builder service account
  // to authenticate with the status page via proper Oauth.
  string tree_status_password = 5;

  // Name of the CIPD package for the monorail CLI.
  // The full name of the monorail CIPD package is private so we have to pass
  // it in as a property.
  string monorail_cipd_package = 6;

  // Version of the CIPD package for the monorail CLI.
  string monorail_cipd_version = 7;

  // Components to set for the monorail tree closure bug.
  repeated string bug_components = 8;

  reserved 9, 10;

  // Conditions under which to close the tree.
  repeated Rule rules = 11;

  message Rule {
    // Only count builds that have a failed step whose name matches this regex.
    string failed_step_regexp = 1;

    // Close the tree if this many builders in the console are failing at the
    // same time.
    int32 concurrent_failures = 2;

    // Close the tree if any builder in the console has failed this many times
    // in a row.
    int32 consecutive_failures = 3;
  }

  // If the build summary matches one of these regexps, then skip it when
  // checking tree closure rules.
  repeated string summary_regexp_ignore = 12;

  // Labels to set for the monorail tree closure bug.
  repeated string bug_labels = 13;
}
