// 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.fuchsia.build;

import "infra/coverage.proto";
import "recipes/fuchsia/fuchsia/spec.proto";

message InputProperties {
  // Parent build's buildbucket or led id. This needs to be a string because led
  // IDs are not integers.
  string parent_id = 1;

  // Enable perfcompare mode: Compare performance between the "without CL" and
  // "with CL" revisions. This involves building and testing both of those
  // revisions.
  bool perfcompare = 2;

  // Whether to add comments for multipliers on led tasks.
  bool comment_led = 3;

  // Whether to only run affected tests.
  bool affected_tests_only = 4;

  // The type of coverage collection this build should do.
  infra.coverage.CoverageCollectionType coverage_collection = 5;

  // Message containing most properties that are common to most recipes under
  // recipes/fuchsia/.
  // TODO(fxbug.dev/77879): Consider merging required spec fields into the top
  // level of the properties message. There's nothing special about which fields
  // are nested in `spec` versus in the top-level properties; the spec field is
  // a vestige from when specs were checked into git rather than passed as
  // properties.
  recipes.fuchsia.fuchsia.spec.Fuchsia spec = 6;

  // If running as an SDK subbuild, the SDK version identifier.
  string sdk_id = 7;

  // The tools to upload to CAS. This is used by the sdk recipe which gets the
  // CAS digests from an output property and uses them in the package_overrides
  // it uses for external testing. These tools must be separately configured to
  // be built in the fint_params.
  repeated string cas_tools = 8;
}
