peridot/peridot/proto/v1/task.proto

246 lines
6.4 KiB
Protocol Buffer

syntax = "proto3";
package resf.peridot.v1;
import "google/protobuf/descriptor.proto";
import "google/protobuf/any.proto";
import "google/protobuf/wrappers.proto";
import "google/protobuf/timestamp.proto";
import "google/api/httpbody.proto";
import "google/rpc/error_details.proto";
import "validate/validate.proto";
import "google/api/annotations.proto";
option go_package = "peridot.resf.org/peridot/pb;peridotpb";
extend google.protobuf.MethodOptions {
TaskInfo task_info = 9991;
}
service TaskService {
// ListTasks returns a list of tasks from all projects
// List mode won't return task responses. The reason being
// responses being able to reach huge sizes.
// To get the response for a specific task, you can use GetTask,
// either on the specific subtask or the parent task.
rpc ListTasks(ListTasksRequest) returns (ListTasksResponse) {
option (google.api.http) = {
get: "/v1/projects/{project_id=*}/tasks"
};
}
// GetTask returns a specific task with the given ID
rpc GetTask(GetTaskRequest) returns (GetTaskResponse) {
option (google.api.http) = {
get: "/v1/projects/{project_id=*}/tasks/{id=*}"
};
}
// StreamTaskLogs streams the logs of a specific task with the given ID
rpc StreamTaskLogs(StreamTaskLogsRequest) returns (stream google.api.HttpBody) {
option (google.api.http) = {
get: "/v1/projects/{project_id=*}/tasks/{id=*}/logs"
};
}
// CancelTask cancels a task with the given ID.
// Only parent tasks can be cancelled and if they're in the PENDING or RUNNING state.
rpc CancelTask(CancelTaskRequest) returns (CancelTaskResponse) {
option (google.api.http) = {
post: "/v1/projects/{project_id=*}/tasks/{id=*}/cancel"
};
}
}
enum TaskType {
TASK_TYPE_UNKNOWN = 0;
TASK_TYPE_IMPORT = 1;
TASK_TYPE_IMPORT_SRC_GIT = 2;
TASK_TYPE_IMPORT_SRC_GIT_TO_DIST_GIT = 3;
TASK_TYPE_IMPORT_DOWNSTREAM = 4;
TASK_TYPE_IMPORT_UPSTREAM = 5;
TASK_TYPE_BUILD = 6;
TASK_TYPE_BUILD_SRPM = 7;
TASK_TYPE_BUILD_ARCH = 8;
TASK_TYPE_BUILD_SRPM_UPLOAD = 9;
TASK_TYPE_BUILD_ARCH_UPLOAD = 10;
TASK_TYPE_WORKER_PROVISION = 11;
TASK_TYPE_WORKER_DESTROY = 12;
TASK_TYPE_YUMREPOFS_UPDATE = 13;
TASK_TYPE_KEYKEEPER_SIGN_ARTIFACT = 14;
TASK_TYPE_SYNC_CATALOG = 15;
TASK_TYPE_RPM_IMPORT = 16;
TASK_TYPE_CREATE_HASHED_REPOSITORIES = 17;
TASK_TYPE_LOOKASIDE_FILE_UPLOAD = 18;
TASK_TYPE_RPM_LOOKASIDE_BATCH_IMPORT = 19;
TASK_TYPE_CLONE_SWAP = 20;
TASK_TYPE_UPDATEINFO = 21;
}
enum TaskStatus {
TASK_STATUS_UNSPECIFIED = 0;
TASK_STATUS_PENDING = 1;
TASK_STATUS_RUNNING = 2;
TASK_STATUS_SUCCEEDED = 3;
TASK_STATUS_FAILED = 4;
TASK_STATUS_CANCELED = 5;
}
// Subtask is a singular subunit of an AsyncTask.
// This represents a single sub-action of a wider
// system of AsyncTasks
message Subtask {
// Architecture this task was executed in
string arch = 1;
// The type of task that is being executed
TaskType type = 2;
// Response of the task
google.protobuf.Any response = 3;
// Any metadata for the task
// If failed, should contain TaskErrorDetails
google.protobuf.Any metadata = 4;
// Status of the task
TaskStatus status = 5;
// The parent task (which usually is the primary)
google.protobuf.StringValue parent_task_id = 6;
// Unique identifier of the task
string id = 7;
// ID of submitter
google.protobuf.StringValue submitter_id = 8;
// Display name of submitter
google.protobuf.StringValue submitter_display_name = 9;
// Email of submitter
google.protobuf.StringValue submitter_email = 10;
// Finished time of the task
google.protobuf.Timestamp finished_at = 11;
// Created time of the task
google.protobuf.Timestamp created_at = 12;
}
message TaskArtifact {
// The task ID this artifact belongs to
string task_id = 1;
// Name of artifact (this refers to object name).
// To retrieve the file name, filepath.Base should
// always be applied to this property.
string name = 2;
// SHA-256 hash of the artifact
string hash_sha256 = 3;
// Architecture of artifact
string arch = 4;
// Any extra metadata this artifact has
google.protobuf.Any metadata = 5;
}
// AsyncTask represents a collection of subunits of tasks that wholly
// works towards a specific goal.
message AsyncTask {
string task_id = 1;
// Subtasks contains all subtasks for a given task
// Usually the requested task itself is represented as a subtask.
// The primary subtask is always the first in order
repeated Subtask subtasks = 2;
bool done = 3;
}
message GetTaskRequest {
string id = 1 [(validate.rules).string.uuid = true];
google.protobuf.StringValue project_id = 2 [(validate.rules).message.required = true];
}
message GetTaskResponse {
AsyncTask task = 1;
}
message ListTasksRequest {
google.protobuf.StringValue project_id = 1 [(validate.rules).message.required = true];
// The page to request
int32 page = 2;
// Maximum amount of results to return
// Minimum: 1
// Maximum: 100
int32 limit = 3 [(validate.rules).int32.lte = 100];
}
message ListTasksResponse {
repeated AsyncTask tasks = 1;
// Total packages from server
int64 total = 2;
// Limit from request
int32 size = 3;
// Current page
int32 page = 4;
}
message StreamTaskLogsRequest {
string project_id = 1;
string id = 2;
bool parent = 3;
}
message CancelTaskRequest {
string project_id = 1;
string id = 2;
}
message CancelTaskResponse {}
message TaskCancelledDetails {
string code = 1;
string cause = 2;
google.protobuf.Any extra = 3;
}
message ProvisionWorkerMetadata {
string name = 1;
string purpose = 2;
string task_id = 3;
}
message TaskErrorDetails {
google.rpc.ErrorInfo error_info = 1;
oneof error_type {
google.rpc.RetryInfo retry_info = 2;
google.rpc.DebugInfo debug_info = 3;
google.rpc.QuotaFailure quota_failure = 4;
google.rpc.PreconditionFailure precondition_failure = 5;
google.rpc.BadRequest bad_request = 6;
google.rpc.Help help = 7;
google.rpc.LocalizedMessage localized_message = 8;
}
}
// TaskInfo is a option tag to supply information about an async task.
// This is currently ignored silently, but all clients are encouraged
// to implement this.
message TaskInfo {
// Response type is the data format that the parent task stores
// about the response for the specific async/long running task.
string response_type = 1;
// Metadata type is the data format that the parent task stores
// about the metadatra for the specific async/long running task.
string metadata_type = 2;
}