syntax = "proto3";
package chromite.api;

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

import "chromite/api/artifacts.proto";
import "chromite/api/build_api.proto";
import "chromite/api/sysroot.proto";
// TODO(crbug/1027720): Migrate BuilderConfig.Artifacts.ArtifactType to
// common.proto, and stop including builder_config.proto.
import "chromiumos/builder_config.proto";
import "chromiumos/common.proto";

// Information about a collection of artifacts.
message ArtifactInfo {
  // The ArtifactType.
  chromiumos.BuilderConfig.Artifacts.ArtifactTypes artifact_type = 1;

  // Artifacts for this ArtifactType.
  repeated Artifact artifacts = 2;
}

// Prepare the build for artifact building.
message PrepareForToolchainBuildRequest {
  // The artifact types that this build should make.
  repeated chromiumos.BuilderConfig.Artifacts.ArtifactTypes artifact_types = 1;

  // Note: both chroot and sysroot may be unspecified, when the endpoint is
  // called prior to their creation.
  // The chroot where the sysroot lives.
  chromiumos.Chroot chroot = 2;
  // The sysroot where the files live.
  chromite.api.Sysroot sysroot = 3;

  // Information about artifacts available when preparing.
  repeated chromiumos.BuilderConfig.Artifacts.InputArtifactInfo input_artifacts = 4;

  // Additional arguments used in PrepareForBuild.
  // TODO(crbug/1019868): Transition to artifact_profile_info.
  chromiumos.PrepareForBuildAdditionalArgs additional_args = 5;

  // Profile information used for the artifact.
  chromiumos.ArtifactProfileInfo profile_info = 6;
}

// TODO(crbug/1019868): Migrate to using chromiumos.PrepareForBuildResponse.
message PrepareForToolchainBuildResponse {
  // Does this artifact require a build?
  enum BuildRelevance {
    UNSPECIFIED = 0;
    // Build is necessary to generate artifacts.
    NEEDED = 1;
    // Defer to other artifacts.  Used primarily for aggregation of artifact
    // results.
    UNKNOWN = 2;
    // Artifacts are already generated.  The build is pointless.
    POINTLESS = 3;
  }
  BuildRelevance build_relevance = 1;
}

message BundleToolchainRequest {
  // The chroot where the sysroot lives.
  chromiumos.Chroot chroot = 1;
  // The sysroot where the files live.
  chromite.api.Sysroot sysroot = 2;

  // Absolute path to the directory in which artifacts should be dropped.
  string output_dir = 3;

  // Which artifacts are wanted?
  repeated chromiumos.BuilderConfig.Artifacts.ArtifactTypes artifact_types = 4;

  // Additional arguments that were used in PrepareForBuild.
  // TODO(crbug/1019868): Transition to artifact_profile_info.
  chromiumos.PrepareForBuildAdditionalArgs additional_args = 5;

  // Profile information used for the artifact.
  chromiumos.ArtifactProfileInfo profile_info = 6;
}

// Response describing which bundles were dumped to the given output directory.
message BundleToolchainResponse {
  reserved 1;

  // The artifacts that added to the output directory.
  repeated ArtifactInfo artifacts_info = 2;
}

// TODO(crbug.com/1020615): Drop this once this is live in production and all of
// the users have migrated to using BuilderConfig.Artifacts.ArtifactType
// Meanwhile, keep this in sync with chromiumos/builder_config.proto.
enum AFDOArtifactType {
  // No AFDO artifact type specified.
  NONE_TYPE = 0;

  // The type is orderfile.
  ORDERFILE = 1;

  // The type is Chrome AFDO files generated by benchmarks.
  BENCHMARK_AFDO = 2;

  // The type is kernel AFDO files.
  KERNEL_AFDO = 3;

  // The type is Chrome AFDO used in release builders.
  CHROME_AFDO = 4;
}

message VerifyAFDOArtifactsRequest {
  chromiumos.BuildTarget build_target = 1;
  // The type of AFDO artifact to test.
  chromiumos.AFDOArtifactType artifact_type = 2;
}

message VerifyAFDOArtifactsResponse {
  // Status of the service
  bool status = 1;
}
// End of TODO(crbug.com/1020615).

// Service for Android/ARC related functionality.
service ToolchainService {
  option (service_options) = {
    module: "toolchain",
    service_chroot_assert: OUTSIDE,
  };

  // DEPRECATED for recipes: used only by legacy toolchain builders.
  // See also crbug/1019868.
  // Update Chrome ebuild with most recent unvetted orderfile
  rpc UpdateEbuildWithAFDOArtifacts(VerifyAFDOArtifactsRequest)
    returns (VerifyAFDOArtifactsResponse) {
    option (method_options) = {
      method_chroot_assert: INSIDE;
    };
  }

  // DEPRECATED for recipes: used only by legacy toolchain builders.
  // See also crbug/1019868.
  // Copy the orderfile from unvetted GS bucket to vetted bucket.
  rpc UploadVettedAFDOArtifacts(VerifyAFDOArtifactsRequest)
    returns (VerifyAFDOArtifactsResponse) {
    option (method_options) = {
      method_chroot_assert: INSIDE;
    };
  }

  // Prepare to build toolchain artifacts.  This will be called twice:
  // Once with chroot and sysroot = None, before the chroot is created, and
  // again at the start of the 'install packages' step, if the build gets that
  // far.
  rpc PrepareForBuild(PrepareForToolchainBuildRequest)
    returns (PrepareForToolchainBuildResponse);

  // Bundle toolchain artifacts.
  rpc BundleArtifacts(BundleToolchainRequest)
    returns (BundleToolchainResponse);
}
