// Copyright 2022 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_ensure_file_roller;

import "google/protobuf/struct.proto";

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

  // Mapping from CIPD ensure file path relative to checkout root to list of
  // packages that are pinned in the file and should be rolled.
  map<string, google.protobuf.ListValue> packages_by_ensure_file = 2;

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

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

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

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

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