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

  // JSON schema for multiplying a test in fuchsia CQ. See
  // https://fuchsia.dev/fuchsia-src/development/testing/testing_for_flakiness_in_cq?hl=en#multiply-examples
  // Ideally this recipe would just pass through all fields without knowing the
  // schema, but then JSON serialization would emit a float value for
  // `total_runs`.
  message TestMultiplier {
    string name = 1;
    string os = 2;  // Optional.
    int32 total_runs = 3;  // Optional.
  }

  // A list of test multipliers to pass into the roll CL's MULTIPLY footer.
  repeated 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;
}
