feat(wfe-server-protos): add gRPC service definitions for workflow server
13 RPCs in wfe.v1.Wfe service: RegisterWorkflow, StartWorkflow, GetWorkflow, CancelWorkflow, SuspendWorkflow, ResumeWorkflow, SearchWorkflows, PublishEvent, WatchLifecycle (stream), StreamLogs (stream), SearchLogs, ListDefinitions.
This commit is contained in:
19
wfe-server-protos/Cargo.toml
Normal file
19
wfe-server-protos/Cargo.toml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
[package]
|
||||||
|
name = "wfe-server-protos"
|
||||||
|
version.workspace = true
|
||||||
|
edition.workspace = true
|
||||||
|
license.workspace = true
|
||||||
|
repository.workspace = true
|
||||||
|
homepage.workspace = true
|
||||||
|
description = "gRPC service definitions for the WFE workflow server"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
tonic = "0.14"
|
||||||
|
tonic-prost = "0.14"
|
||||||
|
prost = "0.14"
|
||||||
|
prost-types = "0.14"
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
tonic-build = "0.14"
|
||||||
|
tonic-prost-build = "0.14"
|
||||||
|
prost-build = "0.14"
|
||||||
17
wfe-server-protos/build.rs
Normal file
17
wfe-server-protos/build.rs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let proto_files = vec!["proto/wfe/v1/wfe.proto"];
|
||||||
|
|
||||||
|
let mut prost_config = prost_build::Config::new();
|
||||||
|
prost_config.include_file("mod.rs");
|
||||||
|
|
||||||
|
tonic_prost_build::configure()
|
||||||
|
.build_server(true)
|
||||||
|
.build_client(true)
|
||||||
|
.compile_with_config(
|
||||||
|
prost_config,
|
||||||
|
&proto_files,
|
||||||
|
&["proto"],
|
||||||
|
)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
263
wfe-server-protos/proto/wfe/v1/wfe.proto
Normal file
263
wfe-server-protos/proto/wfe/v1/wfe.proto
Normal file
@@ -0,0 +1,263 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
package wfe.v1;
|
||||||
|
|
||||||
|
import "google/protobuf/timestamp.proto";
|
||||||
|
import "google/protobuf/struct.proto";
|
||||||
|
|
||||||
|
service Wfe {
|
||||||
|
// === Definitions ===
|
||||||
|
rpc RegisterWorkflow(RegisterWorkflowRequest) returns (RegisterWorkflowResponse);
|
||||||
|
rpc ListDefinitions(ListDefinitionsRequest) returns (ListDefinitionsResponse);
|
||||||
|
|
||||||
|
// === Instances ===
|
||||||
|
rpc StartWorkflow(StartWorkflowRequest) returns (StartWorkflowResponse);
|
||||||
|
rpc GetWorkflow(GetWorkflowRequest) returns (GetWorkflowResponse);
|
||||||
|
rpc CancelWorkflow(CancelWorkflowRequest) returns (CancelWorkflowResponse);
|
||||||
|
rpc SuspendWorkflow(SuspendWorkflowRequest) returns (SuspendWorkflowResponse);
|
||||||
|
rpc ResumeWorkflow(ResumeWorkflowRequest) returns (ResumeWorkflowResponse);
|
||||||
|
rpc SearchWorkflows(SearchWorkflowsRequest) returns (SearchWorkflowsResponse);
|
||||||
|
|
||||||
|
// === Events ===
|
||||||
|
rpc PublishEvent(PublishEventRequest) returns (PublishEventResponse);
|
||||||
|
|
||||||
|
// === Streaming ===
|
||||||
|
rpc WatchLifecycle(WatchLifecycleRequest) returns (stream LifecycleEvent);
|
||||||
|
rpc StreamLogs(StreamLogsRequest) returns (stream LogEntry);
|
||||||
|
|
||||||
|
// === Search ===
|
||||||
|
rpc SearchLogs(SearchLogsRequest) returns (SearchLogsResponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Definitions ─────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
message RegisterWorkflowRequest {
|
||||||
|
// Raw YAML content. The server compiles it via wfe-yaml.
|
||||||
|
string yaml = 1;
|
||||||
|
// Optional config map for ((variable)) interpolation.
|
||||||
|
map<string, string> config = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message RegisterWorkflowResponse {
|
||||||
|
repeated RegisteredDefinition definitions = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message RegisteredDefinition {
|
||||||
|
string definition_id = 1;
|
||||||
|
uint32 version = 2;
|
||||||
|
uint32 step_count = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListDefinitionsRequest {}
|
||||||
|
|
||||||
|
message ListDefinitionsResponse {
|
||||||
|
repeated DefinitionSummary definitions = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message DefinitionSummary {
|
||||||
|
string id = 1;
|
||||||
|
uint32 version = 2;
|
||||||
|
string description = 3;
|
||||||
|
uint32 step_count = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Instances ───────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
message StartWorkflowRequest {
|
||||||
|
string definition_id = 1;
|
||||||
|
uint32 version = 2;
|
||||||
|
google.protobuf.Struct data = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message StartWorkflowResponse {
|
||||||
|
string workflow_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetWorkflowRequest {
|
||||||
|
string workflow_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetWorkflowResponse {
|
||||||
|
WorkflowInstance instance = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message CancelWorkflowRequest {
|
||||||
|
string workflow_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message CancelWorkflowResponse {}
|
||||||
|
|
||||||
|
message SuspendWorkflowRequest {
|
||||||
|
string workflow_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SuspendWorkflowResponse {}
|
||||||
|
|
||||||
|
message ResumeWorkflowRequest {
|
||||||
|
string workflow_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ResumeWorkflowResponse {}
|
||||||
|
|
||||||
|
message SearchWorkflowsRequest {
|
||||||
|
string query = 1;
|
||||||
|
WorkflowStatus status_filter = 2;
|
||||||
|
uint64 skip = 3;
|
||||||
|
uint64 take = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SearchWorkflowsResponse {
|
||||||
|
repeated WorkflowSearchResult results = 1;
|
||||||
|
uint64 total = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Events ──────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
message PublishEventRequest {
|
||||||
|
string event_name = 1;
|
||||||
|
string event_key = 2;
|
||||||
|
google.protobuf.Struct data = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message PublishEventResponse {
|
||||||
|
string event_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Lifecycle streaming ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
message WatchLifecycleRequest {
|
||||||
|
// Empty = all workflows. Set to filter to one.
|
||||||
|
string workflow_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message LifecycleEvent {
|
||||||
|
google.protobuf.Timestamp event_time = 1;
|
||||||
|
string workflow_id = 2;
|
||||||
|
string definition_id = 3;
|
||||||
|
uint32 version = 4;
|
||||||
|
LifecycleEventType event_type = 5;
|
||||||
|
// Populated for step events.
|
||||||
|
uint32 step_id = 6;
|
||||||
|
string step_name = 7;
|
||||||
|
// Populated for error events.
|
||||||
|
string error_message = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Log streaming ──────────────────────────────────────────────────
|
||||||
|
|
||||||
|
message StreamLogsRequest {
|
||||||
|
string workflow_id = 1;
|
||||||
|
// Filter to a specific step. Empty = all steps.
|
||||||
|
string step_name = 2;
|
||||||
|
// If true, keep streaming as new logs arrive (tail -f).
|
||||||
|
bool follow = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message LogEntry {
|
||||||
|
string workflow_id = 1;
|
||||||
|
string step_name = 2;
|
||||||
|
uint32 step_id = 3;
|
||||||
|
LogStream stream = 4;
|
||||||
|
bytes data = 5;
|
||||||
|
google.protobuf.Timestamp timestamp = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Log search ─────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
message SearchLogsRequest {
|
||||||
|
// Full-text search query.
|
||||||
|
string query = 1;
|
||||||
|
// Optional filters.
|
||||||
|
string workflow_id = 2;
|
||||||
|
string step_name = 3;
|
||||||
|
LogStream stream_filter = 4;
|
||||||
|
uint64 skip = 5;
|
||||||
|
uint64 take = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SearchLogsResponse {
|
||||||
|
repeated LogSearchResult results = 1;
|
||||||
|
uint64 total = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message LogSearchResult {
|
||||||
|
string workflow_id = 1;
|
||||||
|
string definition_id = 2;
|
||||||
|
string step_name = 3;
|
||||||
|
string line = 4;
|
||||||
|
LogStream stream = 5;
|
||||||
|
google.protobuf.Timestamp timestamp = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Shared types ───────────────────────────────────────────────────
|
||||||
|
|
||||||
|
message WorkflowInstance {
|
||||||
|
string id = 1;
|
||||||
|
string definition_id = 2;
|
||||||
|
uint32 version = 3;
|
||||||
|
string description = 4;
|
||||||
|
string reference = 5;
|
||||||
|
WorkflowStatus status = 6;
|
||||||
|
google.protobuf.Struct data = 7;
|
||||||
|
google.protobuf.Timestamp create_time = 8;
|
||||||
|
google.protobuf.Timestamp complete_time = 9;
|
||||||
|
repeated ExecutionPointer execution_pointers = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ExecutionPointer {
|
||||||
|
string id = 1;
|
||||||
|
uint32 step_id = 2;
|
||||||
|
string step_name = 3;
|
||||||
|
PointerStatus status = 4;
|
||||||
|
google.protobuf.Timestamp start_time = 5;
|
||||||
|
google.protobuf.Timestamp end_time = 6;
|
||||||
|
uint32 retry_count = 7;
|
||||||
|
bool active = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
message WorkflowSearchResult {
|
||||||
|
string id = 1;
|
||||||
|
string definition_id = 2;
|
||||||
|
uint32 version = 3;
|
||||||
|
WorkflowStatus status = 4;
|
||||||
|
string reference = 5;
|
||||||
|
string description = 6;
|
||||||
|
google.protobuf.Timestamp create_time = 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum WorkflowStatus {
|
||||||
|
WORKFLOW_STATUS_UNSPECIFIED = 0;
|
||||||
|
WORKFLOW_STATUS_RUNNABLE = 1;
|
||||||
|
WORKFLOW_STATUS_SUSPENDED = 2;
|
||||||
|
WORKFLOW_STATUS_COMPLETE = 3;
|
||||||
|
WORKFLOW_STATUS_TERMINATED = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum PointerStatus {
|
||||||
|
POINTER_STATUS_UNSPECIFIED = 0;
|
||||||
|
POINTER_STATUS_PENDING = 1;
|
||||||
|
POINTER_STATUS_RUNNING = 2;
|
||||||
|
POINTER_STATUS_COMPLETE = 3;
|
||||||
|
POINTER_STATUS_SLEEPING = 4;
|
||||||
|
POINTER_STATUS_WAITING_FOR_EVENT = 5;
|
||||||
|
POINTER_STATUS_FAILED = 6;
|
||||||
|
POINTER_STATUS_SKIPPED = 7;
|
||||||
|
POINTER_STATUS_CANCELLED = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum LifecycleEventType {
|
||||||
|
LIFECYCLE_EVENT_TYPE_UNSPECIFIED = 0;
|
||||||
|
LIFECYCLE_EVENT_TYPE_STARTED = 1;
|
||||||
|
LIFECYCLE_EVENT_TYPE_COMPLETED = 2;
|
||||||
|
LIFECYCLE_EVENT_TYPE_TERMINATED = 3;
|
||||||
|
LIFECYCLE_EVENT_TYPE_SUSPENDED = 4;
|
||||||
|
LIFECYCLE_EVENT_TYPE_RESUMED = 5;
|
||||||
|
LIFECYCLE_EVENT_TYPE_ERROR = 6;
|
||||||
|
LIFECYCLE_EVENT_TYPE_STEP_STARTED = 7;
|
||||||
|
LIFECYCLE_EVENT_TYPE_STEP_COMPLETED = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum LogStream {
|
||||||
|
LOG_STREAM_UNSPECIFIED = 0;
|
||||||
|
LOG_STREAM_STDOUT = 1;
|
||||||
|
LOG_STREAM_STDERR = 2;
|
||||||
|
}
|
||||||
17
wfe-server-protos/src/lib.rs
Normal file
17
wfe-server-protos/src/lib.rs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//! Generated gRPC stubs for the WFE workflow server API.
|
||||||
|
//!
|
||||||
|
//! Built from `proto/wfe/v1/wfe.proto`. Includes both server and client code.
|
||||||
|
//!
|
||||||
|
//! ```rust,ignore
|
||||||
|
//! use wfe_server_protos::wfe::v1::wfe_server::WfeServer;
|
||||||
|
//! use wfe_server_protos::wfe::v1::wfe_client::WfeClient;
|
||||||
|
//! ```
|
||||||
|
|
||||||
|
#![allow(clippy::all)]
|
||||||
|
#![allow(warnings)]
|
||||||
|
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/mod.rs"));
|
||||||
|
|
||||||
|
pub use prost;
|
||||||
|
pub use prost_types;
|
||||||
|
pub use tonic;
|
||||||
Reference in New Issue
Block a user