syntax = "proto2";
package cros.factory.proto;

message CreateBundleRpcRequest {
  optional string board = 1;
  optional string project = 2;
  optional string phase = 3;
  optional string toolkit_version = 4;
  optional string test_image_version = 5;
  optional string release_image_version = 6;
  optional string email = 7;
  optional string firmware_source = 8;
}

message CreateBundleRpcResponse {
  enum Status {
    NO_ERROR = 0;
  }
  optional Status status = 1 [default = NO_ERROR];
}

message WorkerResult {
  enum Status {
    NO_ERROR = 0;
    FAILED = 1;
  }
  optional Status status = 1 [default = NO_ERROR];
  optional CreateBundleRpcRequest original_request = 2;
  optional string error_message = 3;
  optional string gs_path = 4;
}

message BundleHistoryProject {
  optional string name = 1;
}

message BundleHistoryBoard {
  optional string board_name = 1;
  repeated BundleHistoryProject projects = 2;
}

message GetBundleHistoryRpcRequest {
  repeated BundleHistoryBoard board_projects = 1;
}

message Bundle {
  optional string board = 1;
  optional string project = 2;
  optional string filename = 3;
  optional string path = 4;
  optional int64 uploaded_timestamp_ms = 5;
  optional string creator = 6;
  optional string toolkit_version = 7;
  optional string test_image_version = 8;
  optional string release_image_version = 9;
  optional string firmware_source = 10;
}

message GetBundleHistoryRpcResponse {
  repeated Bundle bundles = 1;
}

message DownloadBundleRpcRequest {
  optional string path = 1;
  optional string email = 2;
}

message DownloadBundleRpcResponse {
  optional string download_link = 1;
}

service FactoryBundleService {
  rpc CreateBundleAsync(CreateBundleRpcRequest)
      returns (CreateBundleRpcResponse) {
  }
  rpc GetBundleHistory(GetBundleHistoryRpcRequest)
      returns (GetBundleHistoryRpcResponse) {
  }
  rpc DownloadBundle(DownloadBundleRpcRequest)
      returns (DownloadBundleRpcResponse) {
  }
}
