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

import "google/protobuf/struct.proto";

message InputProperties {
  // Remote URL of repository to checkout.
  string remote = 1;

  message Package {
    // Name of package to roll.
    string name = 1;

    // Subdirectory for package relative to the checkout root.
    // TODO(atyfto): Enforce that subdirectories cannot be shared between
    // packages.
    string subdir = 2;
  }

  // Packages to roll.
  repeated Package packages = 2;

  // Whether to make roll Change-Id unique to the build.
  bool create_unique_change_id = 3;

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

  // A CIPD tag prefix common to all $packages where a common version can be
  // extracted.
  string tag = 5;

  // A common CIPD ref to resolve when rolling a set of packages.
  string ref = 6;

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