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

  // Command that downloads any dependencies not included in regular version
  // control. Optional.
  Command download_command = 4;

  // Command that builds the code.
  Command build_command = 5;

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

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

  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 = 8;

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

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

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

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

  // The Options for MOS-TUF upload.
  recipe_modules.fuchsia.dpi.DPIUploadOptions mos_upload_options = 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;
}
