// Copyright 2021 The Pigweed Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.

syntax = "proto3";

package recipes.pigweed.tokendb_updater;

import "recipe_modules/fuchsia/auto_roller/options.proto";
import "recipe_modules/pigweed/build/options.proto";
import "recipe_modules/pigweed/checkout/options.proto";
import "recipe_modules/pigweed/environment/options.proto";

message InputProperties {
  reserved 1;
  reserved 2;

  // Path to the build-system generated database. Required.
  string generated_tokendb_path = 3;

  // Host and project for tracked database. Both must be specified or both must
  // be empty. If empty, the checkout repository is used. The host should be
  // "pigweed" for "https://pigweed.googlesource.com" (and should not include
  // "-review").
  string tokendb_host = 4;
  string tokendb_project = 5;

  // Branch for tracked database. Ignored if tokendb_host and tokendb_project
  // are empty, otherwise defaults to "main".
  string tokendb_branch = 6;

  // Location of the tracked database within the repository. If tokendb_host
  // and tokendb_project are specified this is the path within that repository.
  // Otherwise it's within the primary checkout repository. Required.
  string tokendb_path = 7;

  reserved 8;

  // Build module options.
  recipe_modules.pigweed.build.Options build_options = 9;

  // Environment module options.
  recipe_modules.pigweed.environment.Options environment_options = 10;

  // Checkout module options.
  recipe_modules.pigweed.checkout.Options checkout_options = 11;

  // Auto roller module options.
  recipe_modules.fuchsia.auto_roller.Options auto_roller_options = 12;
}
