// Copyright 2021 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.run_script;
import "recipe_modules/fuchsia/auto_roller/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;

  // Whether to checkout `remote` with the repo tool.
  bool checkout_with_repo = 4;

  // Ref to checkout as fallback if build input does not match remote.
  string fallback_ref = 5;

  // Set tags on CIPD package(s) based on repo snapshot.
  bool set_repo_tags = 6;

  // Whether to attempt a roll after the script updates the checkout.
  bool attempt_roll = 7;

  // General options for creating the roll CL.
  recipe_modules.fuchsia.auto_roller.Options roll_options = 8;

  // Whether to expect JSON-style CIPD .yaml manifest. TODO(atyfto): Remove this
  // option after transitioning all users to JSON-style.
  bool use_json_cipd_yaml_manifest = 9;

  // Parameter used to support multiple sequential script execution
  repeated ScriptConfig script_configs = 10;
}

message ScriptConfig {
  // Path relative to root of checkout of the script to run.
  string script = 1;

  // Additional arguments to pass to script.
  repeated string script_args = 2;

  // Whether to upload package(s) to CIPD based on the .yaml(s) emitted by the
  // script.
  bool upload_to_cipd = 3;
}
