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

import "google/protobuf/struct.proto";
import "infra/test_multiplier.proto";
import "recipe_modules/fuchsia/auto_roller/options.proto";

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

  // Jiri manifest to checkout.
  string checkout_manifest = 2;

  // Remote manifest repository.
  string remote = 3;

  // Mapping from manifest path (relative to `project`) to list of packages that
  // are pinned in that manifest and should be rolled.
  map<string, google.protobuf.ListValue> packages_by_manifest = 4;

  // The subset of packages that must have the specified ref.
  repeated string packages_requiring_ref = 5;

  // Jiri attribute to match debug symbol packages.
  string debug_symbol_attribute = 6;

  // GCS buckets to upload debug symbols to prior to starting roll.
  repeated string preroll_debug_symbol_gcs_buckets = 7;

  // GCS buckets to upload debug symbols to after a successful roll. If
  // specified, preroll_debug_symbol_gcs_buckets is required.
  repeated string postroll_debug_symbol_gcs_buckets = 8;

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

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

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

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

  // A list of test multipliers to pass into the roll CL's MULTIPLY footer.
  repeated infra.test_multiplier.TestMultiplier test_multipliers = 13;

  // The max number of days for the packages in a manifest to be older than.
  // If set and the roller doesn't find new versions to roll for more than
  // max_stale_days, the roller will fail. If max_stale_days == 0, the roller
  // will never fail if it has nothing to roll.
  int32 max_stale_days = 14;

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