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

message Submodule {
  // The path of the submodule to update. Required.
  string path = 1;

  // The name of the submodule to update. Defaults to the value of path. Only
  // necessary if the name and path in the .gitmodules file are different.
  string name = 2;

  // Branch to track. By default retrieved from .gitmodules or "main".
  string branch = 3;
}

message InputProperties {
  // Submodules to update.
  repeated Submodule submodules = 1;

  // Don't do anything that has external effects.
  bool dry_run = 2;

  // 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 = 3;
  bool cc_reviewers_on_rolls = 4;

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

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

  // Vote Bot-Commit+1 instead of Code-Review+2.
  bool bot_commit = 7;
}
