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

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;

  // Properties for roll attempt.
  RollProperties roll_props = 8;

  message RollProperties {
    // Whether to commit untracked files.
    bool commit_untracked_files = 1;

    // Whether to dryrun the roll.
    bool dry_run = 2;
  }

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