syntax = "proto3";

package chromite.api;

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

import "chromite/api/build_api.proto";
import "chromiumos/common.proto";


// Defines a single build directory in storage.
message Build {
  // The board of the image "x86-mario", etc.
  chromiumos.BuildTarget build_target = 1;

  // The version of the image. "0.14.23.2", "3401.0.0", etc.
  string version = 2;

  // The bucket of the image. "chromeos-releases" as default.
  string bucket = 3;

  // The channel of the image "stable-channel", "nplusone", etc.
  string channel = 4;
}


// Define a signed ChromeOS image archived.
message SignedImage {
  // An instance of Build that defines the build artifacts directory.
  Build build = 1;

  // The type of the image. Currently, "recovery" or "base" types are supported.
  chromiumos.ImageType image_type = 2;

  // The key the image was signed with. "premp", "mp", "mp-v2". This is not the
  // board specific key name, but the general value used in image/payload names.
  string key = 3;
}


// Define a unsigned ChromeOS image archived.
message UnsignedImage {
  // An instance of Build that defines the build artifacts directory.
  Build build = 1;

  /// The type of the image. Currently one of "test", "recovery", or "base".
  chromiumos.ImageType image_type = 2;

  // The most recent branch corresponding to the version; "R19" etc.
  string milestone = 3;
}


// Request payload generation to be done with a source and target image.
message GenerationRequest {

  // Source image properties, must be either full_update or the same type as
  // the included tgt_image_oneof. full_update indicates the lack of a source.
  oneof src_image_oneof {
    bool full_update = 1;
    SignedImage src_signed_image = 2;
    UnsignedImage src_unsigned_image = 3;
  }

  // Target image properties.
  oneof tgt_image_oneof {
    SignedImage tgt_signed_image = 4;
    UnsignedImage tgt_unsigned_image = 5;
  }

  // TODO(engeg@): We could override the output build artifacts location via
  //               specifying an additional parameter build and supplying it to
  //               paygen_payload_lib.py but have chosen not to implement yet.

  // The destination bucket (defaults to "chromeos-releases").
  string bucket = 6;

  // Should we run verification?
  bool verify = 7;

  // The keyset to sign with (e.g. "coral-mp-v16"), if empty do not sign.
  string keyset = 8;

  // Do not sign images or upload artifacts.
  bool dryrun = 9;
}

// Result of a payload generation.
message GenerationResponse {
  // Whether we've completed successfully.
  bool success = 1;
}

// The image service definition.
service PayloadService {
  option (service_options) = {
    module: "payload",
    service_chroot_assert: INSIDE,
  };
  rpc GeneratePayload(GenerationRequest) returns (GenerationResponse);
}
