// 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;

  // Names of the Milo consoles to check.
  repeated string console_names = 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;

  // Modify the tree hosted here (e.g. 'fuchsia-status-adm.googleplex.com').
  string tree_status_admin_host = 5;

  // Conditions under which to close the tree during working hours.
  repeated Rule rules = 6;

  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 set, consider only builders in this list of builder names.
    repeated string builders_to_check = 4;
  }

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

  // Dates on which the tree closer should not run, used to disable the tree
  // closer on holidays. Each date should be of the form "YYYY-MM-DD".
  // TODO(fxbug.dev/89629): Automatically skip closing the tree on holidays.
  repeated string disable_on_dates = 8;

  // Component id to set for the IssueTracker tree closure bug.
  int32 bug_component_id = 9;

  // The name of the tree to get/set the status for.
  string tree_name = 10;
}
