// Copyright 2022 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.coverage;

import "google/protobuf/struct.proto";

message InputProperties {
  // Jiri manifest to use.
  string manifest = 1;

  // Remote manifest repository.
  string remote = 2;

  // Path to a fint params file.
  string fint_params_path = 3;

  // GCS bucket to upload build artifacts to.
  string artifact_gcs_bucket = 4;

  // The map of builders to process coverage on and the filetypes they collect
  // coverage for.
  map<string, google.protobuf.ListValue> coverage_builders = 5;

  message AbsoluteCoverageArgs {
    string host = 1;
    string project = 2;
  }

  // Extra args to pass to the absolute coverage
  // uploader tool.
  AbsoluteCoverageArgs absolute_coverage_args = 6;

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

  // A list of child build ids to process coverage on instead of launching new
  // coverage builders.
  repeated string child_build_ids = 8;

  // Whether to launch all coverage_builders and collect the absolute coverage
  // report regardless of changed filetype.
  bool collect_absolute = 9;

  // Whether to use the authenticated URL for viewing the HTML report in GCS.
  bool use_authenticated_url = 10;
}
