Files
client/interface/proto/forest/v1/release_pipelines.proto
2026-03-08 23:00:03 +01:00

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);
}