// Copyright 2020 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";

import "recipe_modules/pigweed/checkout/options.proto";
import "recipe_modules/pigweed/environment/options.proto";
import "recipe_modules/pigweed/pw_presubmit/options.proto";

// This message is used for both the pw_presubmit and pw_presubmit_container
// recipes.
package recipes.pigweed.pw_presubmit;

enum StepName {
  STEP_NAME_DEFAULT = 0;
  WITH_WITHOUT_STEP_NAME = 1;
  ONLY_WITH_STEP_NAME = 2;
  ONLY_WITHOUT_STEP_NAME = 3;
}

message InputProperties {
  // Bucket to upload build to. Default is to not upload.
  string gcs_bucket = 1;

  // File extensions to sign. (E.g., ".out", ".sign-me", ...)
  repeated string extensions_to_sign = 2;

  // Environment module options.
  recipe_modules.pigweed.environment.Options environment_options = 3;

  // Checkout module options.
  recipe_modules.pigweed.checkout.Options checkout_options = 4;

  // Pw Presubmit module options.
  recipe_modules.pigweed.pw_presubmit.Options pw_presubmit_options = 5;

  // If there's only one step, the default behavior is to include metadata from
  // that step as '$step_name.$metadata_name' and as '$metadata_name'. This
  // option allows that behavior to be customized. If there's only one step
  // then STEP_NAME_DEFAULT is interpreted as WITH_WITHOUT_STEP_NAME. When there
  // are multiple steps it's interpreted as ONLY_WITH_STEP_NAME.
  StepName metadata_step_name_usage = 6;

  // If the corresponding builder is persistently failing in CI, then have this
  // builder exit immediately with a passing status. This way failing builders
  // don't block continuing development. Only applies to TRY builders launched
  // by CV. If zero, don't exit early.
  int32 num_ci_failures_to_trigger_exiting_early = 7;
}
