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

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

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

  // Remote manifest repository.
  string remote = 3;

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

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

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

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