// Copyright 2019 The Chromium OS 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 chromiumos;

option go_package = "go.chromium.org/chromiumos/infra/proto/go/chromiumos";

import "chromiumos/common.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";

// Configuration used by a builder during execution.
message BuilderConfig {

  // Used to control running of special steps.
  enum RunSpec {
    RUN_SPEC_UNSPECIFIED = 0;
    // Do not run.
    NO_RUN = 1;
    // Run.
    RUN = 2;
    // Run and then exit.
    RUN_EXIT = 3;
  }

  // Unique identifier of the builder configuration.
  message Id {
    // The name of the configuration such as "arm-generic-postsubmit".
    string name = 1;
    // Branch the configuration applies to such as "release-R73-11647.B".
    string branch = 2;
    // Type of build.
    enum Type {
      TYPE_UNSPECIFIED = 0;
      // Commit queue build.
      CQ = 1;
      // Postsubmit build.
      POSTSUBMIT = 2;
      // Toolchain build.
      TOOLCHAIN = 3;
      // Informational build.
      INFORMATIONAL = 4;
    }
    Type type = 3;
  }
  Id id = 1;

  // General configuration for the builder.
  message General {
    // Whether or not the build is considered critical. A failure in a critical
    // build for a CQ builder may, for example, prevent submission of the CL.
    google.protobuf.BoolValue critical = 1;

    enum Environment {
      ENVIRONMENT_UNSPECIFIED = 0;
      PRODUCTION = 1;
      STAGING = 2;
    }
    Environment environment = 2;

    // Rule describing conditions under which a builder should be launched.
    message RunWhen {
      enum Mode {
        MODE_UNSPECIFIED = 0;

        // Always run this builder. The file_patterns field will be ignored
        // when this mode is selected.
        ALWAYS_RUN = 1;

        // Only run this builder if any file in the input gerrit_changes
        // matches any file_pattern specified below. If file_patterns is empty,
        // this option implies the builder will never run.
        ONLY_RUN_ON_FILE_MATCH = 2;

        // Do not run the builder if all files in the input gerrit_changes
        // match any file_attern speicifed below. If file_patterns is empty,
        // this option implies the builder will always run.
        NO_RUN_ON_FILE_MATCH = 3;
      }

      Mode mode = 1;

      // chromiumos code file patterns, relative to chromiumos root, which may
      // use * or ** for globbing.
      // e.g.
      // chromite/myfile.txt
      // chromite/config/*
      // **/*.md
      repeated string file_patterns = 2;
    }

    // A rule describing conditions under which this builder should be launched.
    RunWhen run_when = 3;

    // Time before which ToT had a bug that would not manifest at the
    // build stage. The CQ orchestrator should NOT reuse successful builds
    // of the build_config before this.
    google.protobuf.Timestamp broken_before = 4;

    // If present, this version number will be written to a version file
    // alongside a bot's SDK Cache (chroot). On subsequent bot-run where an SDK
    // Cache already exists, the version number in config will be compared to
    // the number present in the version file, and the SDK Cache will be
    // invalidated if there is a mismatch.
    int32 sdk_cache_version = 5;
  }
  General general = 2;

  // Configuration pertaining to builders operating as "orchestrators".
  // Orchestrators orchestrate the running of other child builders.
  message Orchestrator {
    reserved 1;

    // Defines a child the orchestrator spawns and how it is handled.
    message ChildSpec {
      // BuilderConfig.Id.name of the child build. Would be expected to match
      // this name and the BuilderConfig.Id.branch and BuilderConfig.Id.type of
      // this parent orchestrator builder.
      string name = 1;

      enum CollectHandling {
        COLLECT_HANDLING_UNSPECIFIED = 0;
        // Indicates the result should be collected. Currently also indicates
        // that should the orchestrator terminate before this child finishes
        // the child will be killed.
        COLLECT = 1;
        // Indicates the result should not be collected. Currently also
        // indicates that should the orchestrator terminate before this child
        // finishes this child is allowed to continue.
        NO_COLLECT = 2;
      }
      CollectHandling collect_handling = 2;
    }
    repeated ChildSpec child_specs = 5;

    // GitilesCommit to use if not provided.
    GitilesCommit gitiles_commit = 2;

    // GerritChanges to use if not provided.
    repeated GerritChange gerrit_changes = 3;

    // Follow on orchestrator to launch, and possibly wait for.
    message FollowOnOrchestrator {
      // BuilderConfig.Id.name of the follow on orchestrator.
      string name = 1;

      // Whether to wait for the follow on orchestrator to finish.
      bool await_completion = 2;
    }
    FollowOnOrchestrator follow_on_orchestrator = 4;
  }
  Orchestrator orchestrator = 3;

  // Configuration pertaining to artifacts produced during a build.
  message Artifacts {
    // How to handle the uploading of prebuilts.
    enum Prebuilts {
      PREBUILTS_UNSPECIFIED = 0;
      PUBLIC = 1;
      PRIVATE = 2;
      NONE = 3;
    }
    Prebuilts prebuilts = 1;

    // Used to indicate artifact types that should be uploaded by the builder.
    // Must be kept in sync with the dictionary in:
    // https://chromium.googlesource.com/chromiumos/infra/recipes/+/refs/heads/master/recipe_modules/cros_artifacts/api.py
    // TODO(crbug/1027720): Migrate this to common.proto
    enum ArtifactTypes {
      ARTIFACT_TYPES_UNSPECIFIED = 0;
      // Indicates wanting a zip file of everything in the image directory.
      IMAGE_ZIP = 1;
      // Indicates wanting update payloads.
      TEST_UPDATE_PAYLOAD = 2;
      // Indicates wanting the autotest tarballs.
      AUTOTEST_FILES = 3;
      // Indicates wanting a tarball containing private TAST test bundles.
      TAST_FILES = 4;
      // Indicates wanting a tarball containing guest images and test bundles.
      PINNED_GUEST_IMAGES = 5;
      // Indicates wanting an archive of firmware images built from source.
      FIRMWARE = 6;
      // Indicates wanting a tarball of the Ebuilds logs.
      EBUILD_LOGS = 7;
      // Indicates wanting an archive of the ChromeOS Config.
      CHROMEOS_CONFIG = 8;
      // Indicates wanting the CPE report.
      CPE_REPORT = 9;
      // Indicates wanting a tar.xz archive for each image that has been created.
      IMAGE_ARCHIVES = 10;

      // Artifacts used by the toolchain.
      //
      // Indicates an unvetted orderfile for Chrome.
      UNVERIFIED_CHROME_LLVM_ORDERFILE = 11;
      // Indicates a vetted orderfile for Chrome.
      VERIFIED_CHROME_LLVM_ORDERFILE = 12;
      // Indicates a clang-tidy artifact.
      CHROME_CLANG_WARNINGS_FILE = 13;
      // Indicates a PGO artifact for the compiler.
      UNVERIFIED_LLVM_PGO_FILE = 14;

      // Indicates an unvetted AFDO Chrome profile.  (Generated by HW Tests in
      // the benchmark-afdo-generate builder.)
      UNVERIFIED_CHROME_BENCHMARK_AFDO_FILE = 15;
      // Indicates a vetted AFDO Chrome profile.
      VERIFIED_CHROME_BENCHMARK_AFDO_FILE = 16;

      // Indicates a vetted AFDO Kernel profile.
      VERIFIED_KERNEL_CWP_AFDO_FILE = 17;
      // Indicates an unvetted AFDO Kernel CWP profile.
      UNVERIFIED_KERNEL_CWP_AFDO_FILE = 18;

      // Indicates an unvetted AFDO Chrome CWP profile.
      UNVERIFIED_CHROME_CWP_AFDO_FILE = 19;
      // Indicates a vetted AFDO Chrome CWP profile.
      VERIFIED_CHROME_CWP_AFDO_FILE = 20;
      // Indicates a vetted AFDO profile for release.
      VERIFIED_RELEASE_AFDO_FILE = 21;

      // Indicates an unvetted AFDO perf data file (from HW Test).
      UNVERIFIED_CHROME_BENCHMARK_PERF_FILE = 22;
    }
    repeated ArtifactTypes artifact_types = 2;

    // Google storage bucket to upload prebuilts to.
    string prebuilts_gs_bucket = 3;

    // Google storage bucket to upload artifacts to.
    string artifacts_gs_bucket = 4;

    message PublishInfo {
      reserved 1;

      // Artifact types to publish to this bucket.
      repeated ArtifactTypes publish_types = 2;

      // GS location in which to publish artifacts ("gs://" is prepended).
      // Several fields can be logically specified:
      //   %(kind)s: BuilderConfig.Id.Type with underscores turned into hyphens.
      //   %(version)s: Chromeos version (e.g., R81-12813.0.0)
      //   %(build_id)s: Buildbucket job ID.
      //   %(target)s: build target name.
      //   %(builder_name)s: The builder name (e.g. octopus-cq), lowercase with
      //       underscores turned into hyphens.
      //   %(gs_path)s: "%(builder_name)s/%(version)s-%(build_id)s".
      //   %(artifact_name)s: The name of the artifact being published.
      string publish_gs_location = 3;
    }
    // There may be more than one set of publishing instructions.
    repeated PublishInfo publish_artifacts = 5;

    message InputArtifactInfo {
      // Artifact type to seek in these buckets.  Use the first instance of the
      // artifact found in the list of locations.
      ArtifactTypes input_artifact_type = 1;

      // Google storage locations containing these artifacts.
      repeated string input_artifact_gs_locations = 2;
    }
    // There may be more than one set of consumable artifacts.
    repeated InputArtifactInfo input_artifacts = 6;
  }
  Artifacts artifacts = 4;

  // Configuration pertaining to Chrome.
  message Chrome {
    // Whether to build internal or external Chrome. Internal chrome adds
    // Chrome branding.
    bool internal = 1;
  }
  Chrome chrome = 5;

  // Build specific configuration.
  message Build {
    // USE flags to use with the build.
    repeated UseFlag use_flags = 1;

    // The profile of the variant to set up and build.
    message PortageProfile {
      string profile = 1;
    }
    PortageProfile portage_profile = 2;

    reserved 3 to 5;

    // Whether to apply gerrit changes, if any. Use case is to build without
    // changes after failure to identify the changes as the culprit.
    bool apply_gerrit_changes = 6;

    reserved 7 to 11;

    // Below here are configuration specifications for the steps that call the
    // Build API endpoints.  They are listed in the order in which steps are
    // generally called, rather than in numerical order.

    // Controls for the call to cros_artifacts.prepare_for_build.
    message PrepareForBuild {
      // Additional arguments from common.proto, passed into any
      // PrepareFor*Build endpoint.
      PrepareForBuildAdditionalArgs additional_args = 1;
    }
    PrepareForBuild prepare_for_build = 17;

    // Controls for the call to SdkService.Update.
    message SdkUpdate {
      // Whether to compile from source (vs using prebuilts when able.)
      bool compile_source = 1;
    }
    SdkUpdate sdk_update = 12;

    // Controls for the call to SysrootService.InstallToolchain.
    message InstallToolchain {
      // Whether to compile from source (vs using prebuilts when able.)
      bool compile_source = 1;
    }
    InstallToolchain install_toolchain = 13;

    // Controls for the call to InstallPackages.
    message InstallPackages {
      // Whether to compile from source (vs using prebuilts when able.)
      bool compile_source = 1;

      // Controls the running of the install packages step.
      RunSpec run_spec = 2;

      // Packages to build, or empty to build all packages.
      repeated PackageInfo packages = 3;

      // Certain builders (e.g., clang-tidy-toolchain) need to build Chrome with
      // goma disabled.
      bool disable_goma = 4;
    }
    reserved 14;
    InstallPackages install_packages = 16;

    message BuildImages {
      // Image types to build.
      repeated ImageType image_types = 1;
    }
    BuildImages build_images = 15;
  }
  Build build = 6;

  message UnitTests {
    // Skipped packages.
    repeated PackageInfo package_blacklist = 4;

    // Controls the running of ebuild tests with possible early exit.
    RunSpec ebuilds_run_spec = 5;

    // Whether to assume the sysroot is empty.
    bool empty_sysroot = 6;
  }
  UnitTests unit_tests = 7;
}

// List of builder configs. Intended to be serialized to / from disk.
message BuilderConfigs {
  repeated BuilderConfig builder_configs = 1;
}
