// Copyright 2020 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.fuchsia_roller;

message InputProperties {
  // Jiri remote manifest project.
  string project = 1;

  // Jiri manifest to use.
  string manifest = 2;

  // Remote manifest repository.
  string remote = 3;

  // The type of roll to perform.
  string roll_type = 4;

  // Path to the manifest to edit relative to $project.
  string import_in = 5;

  // Name of the <project> or <import> to edit in $import_in.
  string import_from = 6;

  // Whether to enforce locks from lockfiles.
  // TODO: Delete this property after we have full lockfile support in
  // integration repo.
  bool enforce_locks = 7;

  // If no revision or ref is specified in the build input, resolve and roll to
  // this ref. E.g. "refs/heads/main".
  string default_ref = 8;

  // Whether to force-submit the change, bypassing CQ.
  bool force_submit = 9;

  // Whether CQ should skip running tryjobs (but still respect tree status).
  bool no_tryjobs = 10;

  // Whether to dry-run the auto-roller (CQ+1 and abandon the change).
  bool dry_run = 11;

  // Line of text to divide the commit header and body from the footers.
  string commit_divider = 12;

  // Whether to comment on the rolled commits once roll is complete.
  bool send_comment = 13;

  // The owners responsible for watching this roller e.g. username@google.com.
  repeated string owners = 14;

  // Whether to make roll Change-Ids unique to the build.
  bool create_unique_change_id = 15;

  // Notify option when pushing roll CL.
  string cl_notify_option = 16;
}
