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

    // Test against this ref.
    string ref = 12;
  }

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

  // TODO(fxbug.dev/90091): Deprecate TapTesting for FxtTests.
  message TapTesting {
    repeated string tap_projects = 1;

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

    // How long to wait for external tests to finish.
    int32 timeout_secs = 3;
  }

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

  // How to test the SDK in TAP. See TapTesting message.
  FxtTests fxt_tests = 13;

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

    // Guitar projects to trigger.
    map<string, string> guitar_projects = 2;

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

    // How long to wait for external tests to finish.
    int32 timeout_secs = 4;
  }
}
