aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cli.rs33
-rw-r--r--src/push.rs33
2 files changed, 40 insertions, 26 deletions
diff --git a/src/cli.rs b/src/cli.rs
index ab9499a..f259563 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -545,18 +545,27 @@ async fn run_deploy(
print_deployment(&parts[..])?;
}
- for (deploy_flake, deploy_data, deploy_defs) in &parts {
- deploy::push::push_profile(deploy::push::PushProfileData {
- supports_flakes,
- check_sigs,
- repo: deploy_flake.repo,
- deploy_data,
- deploy_defs,
- keep_result,
- result_path,
- extra_build_args,
- })
- .await?;
+ let data_iter = || {
+ parts.iter().map(
+ |(deploy_flake, deploy_data, deploy_defs)| deploy::push::PushProfileData {
+ supports_flakes,
+ check_sigs,
+ repo: deploy_flake.repo,
+ deploy_data,
+ deploy_defs,
+ keep_result,
+ result_path,
+ extra_build_args,
+ },
+ )
+ };
+
+ for data in data_iter() {
+ deploy::push::build_profile(data).await?;
+ }
+
+ for data in data_iter() {
+ deploy::push::push_profile(data).await?;
}
let mut succeeded: Vec<(&deploy::DeployData, &deploy::DeployDefs)> = vec![];
diff --git a/src/push.rs b/src/push.rs
index 0801bd9..6d9f10d 100644
--- a/src/push.rs
+++ b/src/push.rs
@@ -209,7 +209,7 @@ pub async fn build_profile_remotely(data: &PushProfileData<'_>, derivation_name:
Ok(())
}
-pub async fn push_profile(data: PushProfileData<'_>) -> Result<(), PushProfileError> {
+pub async fn build_profile(data: PushProfileData<'_>) -> Result<(), PushProfileError> {
debug!(
"Finding the deriver of store path for {}",
&data.deploy_data.profile.profile_settings.path
@@ -218,17 +218,6 @@ pub async fn push_profile(data: PushProfileData<'_>) -> Result<(), PushProfileEr
// `nix-store --query --deriver` doesn't work on invalid paths, so we parse output of show-derivation :(
let mut show_derivation_command = Command::new("nix");
- let ssh_opts_str = data
- .deploy_data
- .merged_settings
- .ssh_opts
- // This should provide some extra safety, but it also breaks for some reason, oh well
- // .iter()
- // .map(|x| format!("'{}'", x))
- // .collect::<Vec<String>>()
- .join(" ");
-
-
show_derivation_command
.arg("show-derivation")
.arg(&data.deploy_data.profile.profile_settings.path);
@@ -259,12 +248,28 @@ pub async fn push_profile(data: PushProfileData<'_>) -> Result<(), PushProfileEr
return Err(PushProfileError::RemoteBuildWithLegacyNix)
}
- // remote building guarantees that the resulting derivation is stored on the target system
- // no need to copy after building
build_profile_remotely(&data, derivation_name).await?;
} else {
build_profile_locally(&data, derivation_name).await?;
+ }
+
+ Ok(())
+}
+
+pub async fn push_profile(data: PushProfileData<'_>) -> Result<(), PushProfileError> {
+ let ssh_opts_str = data
+ .deploy_data
+ .merged_settings
+ .ssh_opts
+ // This should provide some extra safety, but it also breaks for some reason, oh well
+ // .iter()
+ // .map(|x| format!("'{}'", x))
+ // .collect::<Vec<String>>()
+ .join(" ");
+ // remote building guarantees that the resulting derivation is stored on the target system
+ // no need to copy after building
+ if !data.deploy_data.merged_settings.remote_build.unwrap_or(false) {
info!(
"Copying profile `{}` to node `{}`",
data.deploy_data.profile_name, data.deploy_data.node_name