// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto3";

package recipes.fuchsia.sdk;

import "google/protobuf/struct.proto";

import "recipe_modules/fuchsia/fxt/options.proto";
import "recipe_modules/fuchsia/presubmit_util/options.proto";

// Sdk fully describes how to execute an SDK CI/CQ task.
message InputProperties {
  // Manifest to checkout.
  string manifest = 1;

  // The remote integration manifest repository.
  string remote = 2;

  // GCS bucket to upload the SDK to.
  string gcs_bucket = 3;

  // Name to assign to the base SDK, e.g. "core".
  string sdk_name = 4;

  // CIPD package root to upload the SDK to.
  string cipd_root = 5;

  // Whether to skip creating the GN SDK.
  bool skip_gn_sdk = 6;

  // Images to accompany the SDK.
  repeated CompanionImage companion_images = 7;

  message CompanionImage {
    // Name of the image when referred to in the SDK.
    string name = 1;

    // Name of the builder generating the image.
    string builder = 2;
  }

  // If true, overwrite the SDK version to match the input release version.
  bool is_release_version = 8;

  // Branch and ref settings for the SDK.
  repeated RefSetting ref_settings = 9;

  message RefSetting {
    // Update refs and stamps if input release version is reachable on this
    // branch.
    string branch = 1;

    // Update this CIPD ref and GCS stamp.
    string update_ref = 2;
  }

  // Timeout for collecting subbuilds.
  int32 subbuild_collect_timeout_secs = 10;

  // Presubmit options for testing in external infrastructures.
  recipe_modules.fuchsia.presubmit_util.Options external_testing = 11;

  message SDKOverrideConfigs {
    // Whether to use package_overrides.json to override the SDK.
    bool use_package_overrides = 1;

    // Whether to use gclient variables to override the SDK.
    bool use_gclient_variables = 2;

    // Filepath to override the SDK bucket.
    string bucket_filepath = 3;

    // Filepath to override the SDK version.
    string version_filepath = 4;

    // Filepath to override the SDK version list.
    string version_list_filepath = 5;

    // Contents of the SDK version list.
    string version_list_contents = 6;
  }

  // Configurations for overriding the SDK in external infrastructures.
  SDKOverrideConfigs sdk_override_configs = 12;

  // Path to a fint parameters file within the fuchsia checkout. If set will use
  // `fint set` instead of `gn gen`.
  string fint_params_path = 13;

  // External testing options.
  recipe_modules.fuchsia.fxt.Options fxt_options = 14;
}
