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

  // Arguments to pass to `bazel build`.
  repeated string build_args = 4;

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

  // Command that lists tests to run.
  Command test_manifest_command = 6;

  message CIPDManifestCommand {
    // Command that emits JSON stdout corresponding to the `CIPDUploadManifest`
    // proto message.
    Command command = 1;

    // Name of the CIPD package to upload.
    //
    // CIPD packages are configured by input properties, rather than specified
    // by the repository itself, to make it possible to statically analyze
    // dependency chains of CIPD packages between repos.
    string package = 2;
  }

  // List of commands that declare CIPD packages to upload.
  repeated CIPDManifestCommand cipd_manifest_commands = 7;

  // Command that declares files and/or directories to upload to cloud storage.
  // Command must emit JSON stdout corresponding to the GCS upload manifest
  // format.
  // TODO(fxbug.dev/92697): Make proto message.
  Command gcs_manifest_command = 8;

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

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

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

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

  // Whether to query for builder manifest.
  // TODO(fxbug.dev/112403): Make this unconditionally true once every repo has
  // migrated to fuchsia_builder_group().
  bool query_builder_manifest = 13;
}

// Represents a command that the recipe should run from the repo under test.
// Each command can assume that it is run from the root of the checkout.
message Command {
  // Relative path to the command's executable within the root of the checkout
  // directory, using platform-agnostic forward slashes as separators.
  string path = 1;

  // Additional arguments to pass to the command.
  repeated string args = 2;
}

// 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;
}
