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

// Sdk fully describes how to execute an SDK CI/CQ task.
message Sdk {
  // 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;

    // GCS bucket to upload image to.
    string bucket = 3;
  }

  // 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 docs.
  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 collect.
    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;
  }

  // How to test the SDK in TAP. See TapTesting docs.
  TapTesting tap_testing = 11;

  message TapTesting {
    // TAP projects to trigger.
    repeated string tap_projects = 1;

    // Whether to use staging host for RPCs.
    bool use_staging_host = 2;
  }

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