// 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.contrib.cipd_with_dependencies_roller;

import "google/protobuf/struct.proto";

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

  // A list of dictionaries with project, manifest and remote key.
  repeated google.protobuf.Struct manifests = 2;

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

  // The list of CIPD packages to update in $import_in.
  string package = 4;

  // The list of lockfiles to update in "${manifest}=${lockfile}" format.
  repeated string lockfiles = 5;

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

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

  // The owners responsible for watching this roller (example: "username@google.com").
  repeated string owners = 8;

  // List of package dependencies in the form of package_name=package_key where
  // package_name is the cipd package name and package_key is the key in versions
  // file with the expected version for the dependency cipd package.
  repeated string package_dependencies = 9;

  // List of project dependencies in the form of project_name=package_key.
  repeated string project_dependencies = 10;

  // A string with the path to the versions file inside the CIPD package.
  string version_file = 11;
}
