feat: add plan step

Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
2026-03-15 22:38:18 +01:00
parent 7eb6ae7cbb
commit 04e452ecc3
71 changed files with 1059 additions and 319 deletions

View File

@@ -654,13 +654,28 @@ pub struct GetPlanOutputRequest {
#[prost(string, tag="2")]
pub stage_id: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetPlanOutputResponse {
/// deprecated: use outputs
#[prost(string, tag="1")]
pub plan_output: ::prost::alloc::string::String,
/// RUNNING, AWAITING_APPROVAL, APPROVED, REJECTED
#[prost(string, tag="2")]
pub status: ::prost::alloc::string::String,
#[prost(message, repeated, tag="3")]
pub outputs: ::prost::alloc::vec::Vec<PlanDestinationOutput>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PlanDestinationOutput {
#[prost(string, tag="1")]
pub destination_id: ::prost::alloc::string::String,
#[prost(string, tag="2")]
pub destination_name: ::prost::alloc::string::String,
#[prost(string, tag="3")]
pub plan_output: ::prost::alloc::string::String,
/// SUCCEEDED, FAILED, RUNNING, etc.
#[prost(string, tag="4")]
pub status: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Source {
@@ -2813,7 +2828,7 @@ pub struct PolicyEvaluation {
#[prost(string, tag="4")]
pub reason: ::prost::alloc::string::String,
#[prost(message, optional, tag="10")]
pub approval_state: ::core::option::Option<ExternalApprovalState>,
pub external_approval_state: ::core::option::Option<ExternalApprovalState>,
}
// ── CRUD messages ───────────────────────────────────────────────────
@@ -3404,6 +3419,9 @@ pub struct WorkAssignment {
/// Full destination configuration including metadata.
#[prost(message, optional, tag="6")]
pub destination: ::core::option::Option<DestinationInfo>,
/// Execution mode. Defaults to DEPLOY if unset.
#[prost(enumeration="ReleaseMode", tag="7")]
pub mode: i32,
}
/// Destination configuration sent with the work assignment.
#[derive(Clone, PartialEq, ::prost::Message)]
@@ -3526,10 +3544,47 @@ pub struct CompleteReleaseRequest {
/// Error description when outcome is FAILURE.
#[prost(string, tag="3")]
pub error_message: ::prost::alloc::string::String,
/// Plan output text when mode was "plan" and outcome is SUCCESS.
/// Stored in release_states.plan_output for UI review.
#[prost(string, optional, tag="4")]
pub plan_output: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CompleteReleaseResponse {
}
/// Execution mode for a work assignment.
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum ReleaseMode {
Unspecified = 0,
/// Normal deployment execution.
Deploy = 1,
/// Dry-run / plan only (e.g. terraform plan). Runner should capture
/// plan output and include it in CompleteRelease.plan_output.
Plan = 2,
}
impl ReleaseMode {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::Unspecified => "RELEASE_MODE_UNSPECIFIED",
Self::Deploy => "RELEASE_MODE_DEPLOY",
Self::Plan => "RELEASE_MODE_PLAN",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"RELEASE_MODE_UNSPECIFIED" => Some(Self::Unspecified),
"RELEASE_MODE_DEPLOY" => Some(Self::Deploy),
"RELEASE_MODE_PLAN" => Some(Self::Plan),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum ReleaseOutcome {