diff options
author | Roman Melnikov | 2023-12-08 14:26:33 +0100 |
---|---|---|
committer | Roman Melnikov | 2023-12-11 14:42:55 +0100 |
commit | b076e35c4ac157110b894032fe3155172668cdd8 (patch) | |
tree | ad52061fd1ba11a2165df409c039cb9c3175d835 | |
parent | 660180bbbeae7d60dad5a92b30858306945fd427 (diff) |
[#245] Return non-zero exit code in case of confirmation timeout
Problem: When profile activation confirmation fails due to
confirmation timeout and performs a rollback, zero exit code is
returned. Such a behavior is confusing since rollback usually means
something went wrong during deployment and it shouldn't return
successful exit code.
Solution: Explicitly return confirmation waiting error instead of
printing it and silently signalizing success.
-rw-r--r-- | src/bin/activate.rs | 32 |
1 files changed, 9 insertions, 23 deletions
diff --git a/src/bin/activate.rs b/src/bin/activate.rs index 4017510..9cff9fa 100644 --- a/src/bin/activate.rs +++ b/src/bin/activate.rs @@ -229,6 +229,8 @@ pub enum ActivationConfirmationError { CreateConfirmFile(std::io::Error), #[error("Could not watch for activation sentinel: {0}")] Watcher(#[from] notify::Error), + #[error("Error waiting for confirmation event: {0}")] + WaitingError(#[from] DangerZoneError), } #[derive(Error, Debug)] @@ -256,7 +258,6 @@ async fn danger_zone( } pub async fn activation_confirmation( - profile_path: String, temp_path: PathBuf, confirm_timeout: u16, closure: String, @@ -302,18 +303,9 @@ pub async fn activation_confirmation( watcher.watch(&lock_path, RecursiveMode::NonRecursive)?; - if let Err(err) = danger_zone(done, confirm_timeout).await { - error!("Error waiting for confirmation event: {}", err); - - if let Err(err) = deactivate(&profile_path).await { - error!( - "Error de-activating due to another error waiting for confirmation, oh no...: {}", - err - ); - } - } - - Ok(()) + danger_zone(done, confirm_timeout) + .await + .map_err(|err| ActivationConfirmationError::WaitingError(err)) } #[derive(Error, Debug)] @@ -463,16 +455,10 @@ pub async fn activate( if magic_rollback && !boot { info!("Magic rollback is enabled, setting up confirmation hook..."); - - match activation_confirmation(profile_path.clone(), temp_path, confirm_timeout, closure) - .await - { - Ok(()) => {} - Err(err) => { - deactivate(&profile_path).await?; - return Err(ActivateError::ActivationConfirmation(err)); - } - }; + if let Err(err) = activation_confirmation(temp_path, confirm_timeout, closure).await { + deactivate(&profile_path).await?; + return Err(ActivateError::ActivationConfirmation(err)); + } } } |