From 9e89f310a24fc759f83bacc80ceae4ba9284ee20 Mon Sep 17 00:00:00 2001 From: Alon Gubkin Date: Sun, 30 Aug 2026 12:12:13 -0700 Subject: [PATCH] fix(cli): prepare failed setup retries --- crates/alien-deploy-cli/src/commands/up.rs | 42 +++++++++++++++++----- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/crates/alien-deploy-cli/src/commands/up.rs b/crates/alien-deploy-cli/src/commands/up.rs index be0495440..072b501e8 100644 --- a/crates/alien-deploy-cli/src/commands/up.rs +++ b/crates/alien-deploy-cli/src/commands/up.rs @@ -442,6 +442,27 @@ mod tests { assert!(!hosted_setup_reconcile_required("running", None, None)); } + #[test] + fn failed_setup_states_are_prepared_before_retrying() { + for status in [ + DeploymentStatus::Running, + DeploymentStatus::UpdateFailed, + DeploymentStatus::RefreshFailed, + DeploymentStatus::InitialSetupFailed, + DeploymentStatus::ProvisioningFailed, + ] { + assert!(requires_direct_setup_preparation(&status), "{status:?}"); + } + + for status in [ + DeploymentStatus::Pending, + DeploymentStatus::InitialSetup, + DeploymentStatus::Provisioning, + ] { + assert!(!requires_direct_setup_preparation(&status), "{status:?}"); + } + } + #[test] fn setup_refresh_prefers_desired_release_and_falls_back_to_current() { assert_eq!( @@ -2926,8 +2947,7 @@ fn hosted_setup_reconcile_required( | "refresh-failed" | "initial-setup-failed" | "provisioning-failed" - ) - && packaged_revision.is_some() + ) && packaged_revision.is_some() && packaged_revision != applied_revision } @@ -4206,12 +4226,7 @@ pub async fn push_initial_setup( message: "Failed to deserialize runtime_metadata from manager".to_string(), })?; - if matches!( - state.status, - DeploymentStatus::Running - | DeploymentStatus::UpdateFailed - | DeploymentStatus::RefreshFailed - ) { + if requires_direct_setup_preparation(&state.status) { let stack_state = state.stack_state.as_ref().ok_or_else(|| { AlienError::new(ErrorData::ConfigurationError { message: "A running deployment has no stack state for setup update".to_string(), @@ -4317,6 +4332,17 @@ pub async fn push_initial_setup( } } +fn requires_direct_setup_preparation(status: &DeploymentStatus) -> bool { + matches!( + status, + DeploymentStatus::Running + | DeploymentStatus::UpdateFailed + | DeploymentStatus::RefreshFailed + | DeploymentStatus::InitialSetupFailed + | DeploymentStatus::ProvisioningFailed + ) +} + fn should_collect_push_setup_environment_info(platform: Platform) -> bool { !matches!(platform, Platform::Machines) }