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

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