// 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.release.publish;

message InputProperties {
  message ChannelInfo {
    // Shortname of the product to publish.
    string product_shortname = 1;

    // Channel to publish to.
    string channel = 2;

    // Optional. Channel to switch devices to.
    string switch_channel = 3;
  }

  // Channel(s) to publish to.
  repeated ChannelInfo channels = 1;

  // Builders to compute last-known-good-revision, which will be used to derive
  // the release version.
  // Mutually exclusive with `release_version` and `target_branch`.
  repeated string lkg_builders = 2;

  // Release version to publish.
  // Mutually exclusive with `lkg_builders` or `target_branch`.
  string release_version = 3;

  // Name of the branch to publish from. Must start with "releases/".
  // If specified, the release version corresponding to the branch HEAD is
  // published.
  // Must be combined with `remote`.
  // Mutually exclusive with `lkg_builders` or `release_version`.
  string target_branch = 4;

  // API host override to pass to publish tool.
  string publish_host = 5;

  // Rollout percentage from (0, 100].
  int32 rollout_pct = 6;

  // Whether to request urgent update(s).
  bool urgent_update = 7;

  // Remote integration manifest repository.
  // Must be combined with `target_branch`.
  string remote = 8;

  // Whether to request to stop all updates to devices.
  bool stop_rollout = 9;
}
