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

import "recipe_modules/fuchsia/auto_roller/options.proto";

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;

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

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

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

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