101 lines
3.0 KiB
Protocol Buffer
101 lines
3.0 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package forest.v1;
|
|
|
|
import "forest/v1/releases.proto";
|
|
|
|
// ── Stage type enum (useful for UI dropdowns / filtering) ────────────
|
|
|
|
enum StageType {
|
|
STAGE_TYPE_UNSPECIFIED = 0;
|
|
STAGE_TYPE_DEPLOY = 1;
|
|
STAGE_TYPE_WAIT = 2;
|
|
}
|
|
|
|
// ── Per-type config messages ─────────────────────────────────────────
|
|
|
|
message DeployStageConfig {
|
|
string environment = 1;
|
|
}
|
|
|
|
message WaitStageConfig {
|
|
int64 duration_seconds = 1;
|
|
}
|
|
|
|
// ── A single pipeline stage ──────────────────────────────────────────
|
|
|
|
message PipelineStage {
|
|
string id = 1;
|
|
repeated string depends_on = 2;
|
|
|
|
oneof config {
|
|
DeployStageConfig deploy = 10;
|
|
WaitStageConfig wait = 11;
|
|
}
|
|
}
|
|
|
|
// ── Runtime stage status (for observing pipeline progress) ───────────
|
|
|
|
enum PipelineStageStatus {
|
|
PIPELINE_STAGE_STATUS_UNSPECIFIED = 0;
|
|
PIPELINE_STAGE_STATUS_PENDING = 1;
|
|
PIPELINE_STAGE_STATUS_ACTIVE = 2;
|
|
PIPELINE_STAGE_STATUS_SUCCEEDED = 3;
|
|
PIPELINE_STAGE_STATUS_FAILED = 4;
|
|
PIPELINE_STAGE_STATUS_CANCELLED = 5;
|
|
}
|
|
|
|
// ── Pipeline resource ────────────────────────────────────────────────
|
|
|
|
message ReleasePipeline {
|
|
string id = 1;
|
|
string name = 2;
|
|
bool enabled = 3;
|
|
repeated PipelineStage stages = 4;
|
|
string created_at = 5;
|
|
string updated_at = 6;
|
|
}
|
|
|
|
// ── CRUD messages ────────────────────────────────────────────────────
|
|
|
|
message CreateReleasePipelineRequest {
|
|
Project project = 1;
|
|
string name = 2;
|
|
repeated PipelineStage stages = 3;
|
|
}
|
|
message CreateReleasePipelineResponse {
|
|
ReleasePipeline pipeline = 1;
|
|
}
|
|
|
|
message UpdateReleasePipelineRequest {
|
|
Project project = 1;
|
|
string name = 2;
|
|
optional bool enabled = 3;
|
|
// When set, replaces all stages. When absent, stages are unchanged.
|
|
repeated PipelineStage stages = 4;
|
|
bool update_stages = 5;
|
|
}
|
|
message UpdateReleasePipelineResponse {
|
|
ReleasePipeline pipeline = 1;
|
|
}
|
|
|
|
message DeleteReleasePipelineRequest {
|
|
Project project = 1;
|
|
string name = 2;
|
|
}
|
|
message DeleteReleasePipelineResponse {}
|
|
|
|
message ListReleasePipelinesRequest {
|
|
Project project = 1;
|
|
}
|
|
message ListReleasePipelinesResponse {
|
|
repeated ReleasePipeline pipelines = 1;
|
|
}
|
|
|
|
service ReleasePipelineService {
|
|
rpc CreateReleasePipeline(CreateReleasePipelineRequest) returns (CreateReleasePipelineResponse);
|
|
rpc UpdateReleasePipeline(UpdateReleasePipelineRequest) returns (UpdateReleasePipelineResponse);
|
|
rpc DeleteReleasePipeline(DeleteReleasePipelineRequest) returns (DeleteReleasePipelineResponse);
|
|
rpc ListReleasePipelines(ListReleasePipelinesRequest) returns (ListReleasePipelinesResponse);
|
|
}
|