// Copyright 2024 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.roller;

import "recipe_modules/fuchsia/auto_roller/options.proto";
import "recipe_modules/pigweed/bazel_roll/git_repository.proto";
import "recipe_modules/pigweed/checkout/options.proto";
import "recipe_modules/pigweed/cipd_roll/package.proto";
import "recipe_modules/pigweed/copy_roll/copy_entry.proto";
import "recipe_modules/pigweed/repo_roll/project.proto";
import "recipe_modules/pigweed/submodule_roll/submodule.proto";
import "recipe_modules/pigweed/txt_roll/txt_entry.proto";

message InputProperties {
  // Top-level checkout module options.
  recipe_modules.pigweed.checkout.Options checkout_options = 1;

  // Bazel git_repository/git_override rules to update.
  repeated recipe_modules.pigweed.bazel_roll.GitRepository bazel_git_repositories = 2;

  // CIPD packages to update.
  repeated recipe_modules.pigweed.cipd_roll.Package cipd_packages = 3;

  // Files to directly copy.
  repeated recipe_modules.pigweed.copy_roll.CopyEntry copy_entries = 4;

  // Android Repo Tool projects to update.
  repeated recipe_modules.pigweed.repo_roll.Project repo_tool_projects = 6;

  // Submodules to update.
  repeated recipe_modules.pigweed.submodule_roll.SubmoduleEntry submodules = 5;

  // Txt entries to update.
  repeated recipe_modules.pigweed.txt_roll.TxtEntry txt_entries = 7;

  // Whether to CC authors and/or reviewers on roll CLs. In case the owner of a
  // CL is different from the author, both are included when
  // cc_authors_on_rolls is set.
  bool cc_authors_on_rolls = 8;
  bool cc_reviewers_on_rolls = 9;

  // Restrict CCing of authors/reviewers to the following domains. Including
  // "example.com" will not automatically include "subdomain.example.com". If
  // empty, all domains will be included (except those ending with
  // "gserviceaccount.com" which are always excluded).
  repeated string cc_domains = 10;

  // By default, only CC when a roll fails. If always_cc is set, CC when the
  // roll is created.
  bool always_cc = 11;

  // Max number of commits for which authors and reviewers should be CCd.
  // Default is 10. To disable CCing, don't set the "cc_*_on_rolls" values
  // above, or set this to a negative value.
  int32 max_commits_for_ccing = 12;

  // Line of text to divide the commit header and body from the footers.
  string commit_divider = 13;

  // Forge the author so rolls of single commits are attributed to the original
  // commit author.
  bool forge_author = 14;

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

  // Overrides for auto roller module options. Needed when rollers are launched
  // via the subbuild module, which does not have a mechanism to modify an
  // existing roller's auto_roller_options (only can overwrite it).
  recipe_modules.fuchsia.auto_roller.Options override_auto_roller_options = 16;

  // String to use after "roll: " in first line of commit message. Default is
  // to auto-generate from all the rolls that modified the checkout.
  string header_override = 17;
}
