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

package recipes.pigweed.target_to_cipd;

import "recipe_modules/pigweed/build/options.proto";
import "recipe_modules/pigweed/environment/options.proto";

message PathReplacement {
  // Text to replace with new. Required.
  string old = 1;

  // Text to replace old with. Required.
  string new = 2;
}

message InputProperties {
  // Globs of build artifacts to upload, relative to build directory. Should
  // resolve to files not directories. Supports "**". Required unless using
  // pw_presubmit steps, in which case the pw_presubmit export_dir_name is used.
  repeated string artifacts = 3;

  // Adjustments to paths as they're moved to the CIPD package. Optional.
  // Ignored if using pw_presubmit steps.
  repeated PathReplacement replacements = 4;

  // CIPD destination path.
  string cipd_path = 5;

  // Add platform (i.e., "linux-amd64") to package path.
  bool add_cipd_platform = 6;

  // Name of roller to trigger after uploading to CIPD. Optional.
  string roller_name = 7;

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

  // Build module options.
  recipe_modules.pigweed.build.Options build_options = 9;

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