// 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/pigweed/build/options.proto";
import "recipe_modules/pigweed/checkout/options.proto";
import "recipe_modules/pigweed/environment/options.proto";

message InputProperties {
  // Vote Bot-Commit+1 instead of Code-Review+2.
  bool bot_commit = 1;

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

  // Don't do anything that has external effects.
  bool dry_run = 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;

}
