aboutsummaryrefslogtreecommitdiff
path: root/src/bin/activate.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/activate.rs')
-rw-r--r--src/bin/activate.rs95
1 files changed, 53 insertions, 42 deletions
diff --git a/src/bin/activate.rs b/src/bin/activate.rs
index 947e883..73d064f 100644
--- a/src/bin/activate.rs
+++ b/src/bin/activate.rs
@@ -66,6 +66,10 @@ struct ActivateOpts {
/// Auto rollback if failure
#[clap(long)]
auto_rollback: bool,
+
+ /// Show what will be activated on the machines
+ #[clap(long)]
+ dry_activate: bool,
}
/// Activate a profile
@@ -348,70 +352,76 @@ pub async fn activate(
temp_path: String,
confirm_timeout: u16,
magic_rollback: bool,
+ dry_activate: bool,
) -> Result<(), ActivateError> {
- info!("Activating profile");
-
- let nix_env_set_exit_status = Command::new("nix-env")
- .arg("-p")
- .arg(&profile_path)
- .arg("--set")
- .arg(&closure)
- .status()
- .await
- .map_err(ActivateError::SetProfileError)?;
-
- match nix_env_set_exit_status.code() {
- Some(0) => (),
- a => {
- if auto_rollback {
- deactivate(&profile_path).await?;
+ if !dry_activate {
+ info!("Activating profile");
+ let nix_env_set_exit_status = Command::new("nix-env")
+ .arg("-p")
+ .arg(&profile_path)
+ .arg("--set")
+ .arg(&closure)
+ .status()
+ .await
+ .map_err(ActivateError::SetProfileError)?;
+ match nix_env_set_exit_status.code() {
+ Some(0) => (),
+ a => {
+ if auto_rollback && !dry_activate {
+ deactivate(&profile_path).await?;
+ }
+ return Err(ActivateError::SetProfileExitError(a));
}
- return Err(ActivateError::SetProfileExitError(a));
- }
- };
+ };
+ }
debug!("Running activation script");
let activate_status = match Command::new(format!("{}/deploy-rs-activate", profile_path))
- .env("PROFILE", &profile_path)
- .current_dir(&profile_path)
+ .env("PROFILE", &closure)
+ .env("DRY_ACTIVATE", if dry_activate { "1" } else { "0" })
+ .current_dir(&closure)
.status()
.await
.map_err(ActivateError::RunActivateError)
{
Ok(x) => x,
Err(e) => {
- if auto_rollback {
+ if auto_rollback && !dry_activate {
deactivate(&profile_path).await?;
}
return Err(e);
}
};
- match activate_status.code() {
- Some(0) => (),
- a => {
- if auto_rollback {
- deactivate(&profile_path).await?;
+ if !dry_activate {
+ match activate_status.code() {
+ Some(0) => (),
+ a => {
+ if auto_rollback {
+ deactivate(&profile_path).await?;
+ }
+ return Err(ActivateError::RunActivateExitError(a));
}
- return Err(ActivateError::RunActivateExitError(a));
- }
- };
+ };
- info!("Activation succeeded!");
+ if !dry_activate {
+ info!("Activation succeeded!");
+ }
- if magic_rollback {
- info!("Magic rollback is enabled, setting up confirmation hook...");
+ if magic_rollback {
+ 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::ActivationConfirmationError(err));
- }
- };
+ match activation_confirmation(profile_path.clone(), temp_path, confirm_timeout, closure)
+ .await
+ {
+ Ok(()) => {}
+ Err(err) => {
+ deactivate(&profile_path).await?;
+ return Err(ActivateError::ActivationConfirmationError(err));
+ }
+ };
+ }
}
Ok(())
@@ -446,6 +456,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
opts.temp_path,
activate_opts.confirm_timeout,
activate_opts.magic_rollback,
+ activate_opts.dry_activate,
)
.await
.map_err(|x| Box::new(x) as Box<dyn std::error::Error>),