diff options
author | notgne2 | 2021-05-10 21:40:30 -0700 |
---|---|---|
committer | GitHub | 2021-05-10 21:40:30 -0700 |
commit | f0456d67149edbf27a6cb0a4963386bc2e678267 (patch) | |
tree | 993a8d8aa793a0065c64c7326ed1ff15a5d00097 /src/bin | |
parent | 9e405fbc5ab5bacbd271fd78c6b6b6877c4d9f8d (diff) | |
parent | 5d5da4898d41cefd1f79c4cf6dd451405ffb8996 (diff) |
Merge pull request #81 from kitnil/dry-activate
Add dry-activate
Diffstat (limited to 'src/bin')
-rw-r--r-- | src/bin/activate.rs | 99 | ||||
-rw-r--r-- | src/bin/deploy.rs | 8 |
2 files changed, 63 insertions, 44 deletions
diff --git a/src/bin/activate.rs b/src/bin/activate.rs index 947e883..d17f3a8 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,78 @@ 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) + let activation_location = if dry_activate { &closure } else { &profile_path }; + + let activate_status = match Command::new(format!("{}/deploy-rs-activate", activation_location)) + .env("PROFILE", activation_location) + .env("DRY_ACTIVATE", if dry_activate { "1" } else { "0" }) + .current_dir(activation_location) .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 +458,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>), diff --git a/src/bin/deploy.rs b/src/bin/deploy.rs index 9c41d25..10e0552 100644 --- a/src/bin/deploy.rs +++ b/src/bin/deploy.rs @@ -74,6 +74,9 @@ struct Opts { /// Where to store temporary files (only used by magic-rollback) #[clap(long)] temp_path: Option<String>, + /// Show what will be activated on the machines + #[clap(long)] + dry_activate: bool, } /// Returns if the available Nix installation supports flakes @@ -379,6 +382,7 @@ async fn run_deploy( extra_build_args: &[String], debug_logs: bool, log_dir: Option<String>, + dry_activate: bool, ) -> Result<(), RunDeployError> { let to_deploy: ToDeploy = match (&deploy_flake.node, &deploy_flake.profile) { (Some(node_name), Some(profile_name)) => { @@ -499,7 +503,7 @@ async fn run_deploy( } for (deploy_data, deploy_defs) in &parts { - deploy::deploy::deploy_profile(&deploy_data, &deploy_defs).await?; + deploy::deploy::deploy_profile(&deploy_data, &deploy_defs, dry_activate).await?; } Ok(()) @@ -546,6 +550,7 @@ async fn run() -> Result<(), RunError> { magic_rollback: opts.magic_rollback, temp_path: opts.temp_path, confirm_timeout: opts.confirm_timeout, + dry_activate: opts.dry_activate, }; let supports_flakes = test_flake_support().await.map_err(RunError::FlakeTest)?; @@ -574,6 +579,7 @@ async fn run() -> Result<(), RunError> { &opts.extra_build_args, opts.debug_logs, opts.log_dir, + opts.dry_activate, ) .await?; |