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

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

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

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