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

message Readability {
  // Label that indicates readability approval.
  string label = 1;

  // File extensions that, if modified in the current CL, require the above
  // label to have an "approved" vote.
  repeated string file_extensions = 2;

  // Level of approval required. Default is "approved" (max positive vote on
  // label) but with this "recommended" (positive non-max vote on label) is ok.
  bool allow_recommended = 3;
}

message InputProperties {
  // Don't do anything that has external effects.
  bool dry_run = 1;

  // Email addresses of accounts allowed to bypass these restrictions.
  repeated string ignored_accounts = 2;

  // Forbid "Requires:"-like lines.
  bool forbid_requires = 3;

  // Require "Tested:" line.
  bool require_tested = 4;

  // List of extensions for documentation files. If present, CLs must modify at
  // least one file with one of these extensions.
  repeated string doc_extensions = 5;

  repeated Readability readability = 6;

  // Python regular expression that the commit message must match.
  string commit_message_regexp = 7;

  // Message to include in case regular expression fails to match (maybe with
  // a link to example commit messages).
  string commit_message_regexp_failure_message = 8;
}
