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

import "recipe_modules/fuchsia/dpi/options.proto";
import "recipe_modules/fuchsia/fxt/options.proto";
import "recipe_modules/fuchsia/presubmit_util/options.proto";

message InputProperties {
  // Remote URL of repository to checkout.
  string remote = 1;

  // Options to pass to `bazel build`.
  repeated string build_options = 2;

  // A single build target to pass to `bazel build` which uses the
  // fuchsia_builder_group() rule from fuchsia-infra-bazel-rules.git.
  string build_target = 3;

  // Name of the Swarming pool in which to schedule testing tasks.
  // If omitted, testing will be skipped for this repository.
  string testing_pool = 4;

  // GCS bucket to which artifacts should be uploaded.
  string gcs_bucket = 5;

  // Whether to sign artifacts.
  bool sign_artifacts = 6;

  // FXT presubmit options.
  recipe_modules.fuchsia.fxt.Options fxt_options = 7;

  // External presubmit options.
  recipe_modules.fuchsia.presubmit_util.Options external_presubmit_options = 8;

  // Upload options for MOS-TUF.
  recipe_modules.fuchsia.dpi.DPIUploadOptions mos_upload_options = 9;

  // A default service account to attach to test tasks; used for shards that
  // do not specify one themselves.
  string default_service_account = 10;

  // Whether to upload artifacts to CIPD.
  bool upload_to_cipd = 11;
}

// Represents a collection of test and upload requests expected to be produced
// by the build.
message BuilderManifest {
  // Path to the aggregate testing manifest containing all test groups.
  string testing_manifest = 1;

  // Paths to GCS upload manifests.
  repeated string gcs_manifests = 2;

  // Paths to CIPD upload manifests.
  repeated string cipd_manifests = 3;
}
