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

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

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

  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 = 7;

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

  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 = 9;

  // How to test the SDK in external infrastructures. See ExternalTesting message.
  ExternalTesting external_testing = 10;

  message ExternalTesting {
    // Gerrit hostname to test the SDK against.
    string gerrit_host = 1;

    // Gerrit project to test the SDK against.
    string gerrit_project = 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;

    // Timeout for external tests completion.
    int32 timeout_secs = 7;

    // Builder names of tryjobs to orchestrate.
    repeated string tryjobs = 8;

    // Alternate Gerrit hostname for searching tryjobs, as they may be
    // registered under a different host.
    string tryjobs_gerrit_host = 9;

    // Time to wait for tryjobs to initialize after applying CQ label.
    int32 tryjobs_wait_secs = 10;

    // Whether to explicitly trigger tryjobs instead of applying CQ label.
    bool trigger_tryjobs = 11;

    // Whether to skip creating a CL and instead trigger tryjobs directly
    // through the Buildbucket API.
    bool skip_cl = 12;

    // Test against this ref.
    string ref = 13;

    // Mapping from manifest path relative to the external repo root to list of
    // packages that are pinned in that manifest and should be overridden.
    map<string, google.protobuf.ListValue> packages_by_manifest = 14;
  }

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

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