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

  // Path relative to root of checkout of the script to run.
  string script = 2;

  // Whether to checkout `remote` with the repo tool instead of with git.
  bool checkout_with_repo = 3;

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

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

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

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

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

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

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

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