// Copyright 2021 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.recipes;

message Project {
  // Name of the project, e.g., "fuchsia".
  string name = 1;

  // Include tryjobs with result_visibility COMMENT_LEVEL_RESTRICTED.
  bool include_restricted = 2;

  // Include tryjobs with result_visibility COMMENT_LEVEL_FULL.
  bool include_unrestricted = 3;

  // Name of the CQ file. Defaults to "commit-queue.cfg".
  string cq_config_name = 4;
}

message RecipeTestingOptions {
  // List of projects to use when searching for tryjobs.
  repeated Project projects = 1;

  // Launch tryjobs through Buildbucket API instead of led.
  bool use_buildbucket = 2;
}

message InputProperties {
  // Remote manifest repository.
  string remote = 1;

  // Finish after unit tests.
  bool unittest_only = 2;

  // Recipe testing parameters.
  RecipeTestingOptions recipe_testing_options = 3;

  // Whether to check for out-of-order and unused recipe deps.
  bool check_deps = 4;
}
