// Copyright 2020 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.release.update_petal;

message InputProperties {
  // Revision to update to.
  // Must be paired with `target_project`.
  // Cannot be used with `version`, `packages`, and `lockfiles`.
  string revision = 1;

  // Target project to update.
  // Must be paired with `revision`.
  // Cannot be used with `version`, `packages`, and `lockfiles`.
  string target_project = 2;

  // Target project manifest to update.
  // Can be optionally used to specify an exact manifest if `target_project` is
  // marked as an optional project and thus not visible to Jiri by default.
  string target_manifest = 3;

  // CIPD package version to update to.
  // Must be combined with `packages` and `lockfiles`.
  // Cannot be used with `revision` and `target_project`.
  string version = 4;

  // CIPD packages to update.
  // Must be combined with `version` and `lockfiles`.
  // Cannot be used with `revision` and `target_project`.
  repeated string packages = 5;

  // Lockfiles to update in ${manifest}=${lockfile} format.
  // Must be combined with `version` and `packages`.
  // Cannot be used with `revision` and `target_project`.
  repeated string lockfiles = 6;

  // Name of branch to update. Must start with "releases/".
  string target_branch = 7;

  // If true, only modify manifests suffixed "_latest".
  // If false, skip them.
  bool latest_packages = 8;

  // Enable dryrun mode: do not modify anything remotely.
  bool dryrun = 9;

  // Integration project name.
  string project = 10;

  // Remote integration manifest name.
  string manifest = 11;

  // Remote integration manifest repository.
  string remote = 12;

  // Bug to reference in commit message.
  string bug = 13;

  // Downstream builders to display links to.
  repeated string downstream_builders = 14;
}
