// 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/fxt/options.proto";

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

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

  // If set, check out this manifest from the remote using Jiri.
  string jiri_manifest = 2;

  // The Jiri project name for repo containing the manifest.
  string jiri_project = 3;

  // Jiri <package> attribute values indicating additional packages to fetch
  // from the input manifest. By default, packages with attribute tags are
  // skipped unless one or more of the attribute values are specified here.
  //
  // NOTE: Jiri is deprecated and this should be migrated to `bazel fetch`.
  repeated string jiri_attributes = 4;

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

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

  // Name of the Swarming pool in which to schedule testing tasks.
  string testing_pool = 7;

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

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

  // External testing options.
  recipe_modules.fuchsia.fxt.Options fxt_options = 10;

  // The Options for MOS-TUF upload.
  recipe_modules.fuchsia.dpi.DPIUploadOptions mos_upload_options = 11;

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

// Represents a collection of test and upload requests expected to be produced
// by the build.
message BuilderManifest {
  // Paths to test manifests.
  repeated string test_manifests = 1;

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

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