diff --git a/src/commands/up.rs b/src/commands/up.rs index 1e337cae3..d5c349521 100644 --- a/src/commands/up.rs +++ b/src/commands/up.rs @@ -125,11 +125,13 @@ impl UpCommand { } } - let working_dir_holder = match &self.tmp { - None => WorkingDirectory::Temporary(TempDir::with_prefix("spinup-")?), - Some(d) => WorkingDirectory::Given(d.to_owned()), - }; - let working_dir = working_dir_holder.path().canonicalize()?; + // Get working dir holder and hold on to it for the rest of the function. + // If the working dir is a temporary dir it will be deleted on drop. + let working_dir_holder = self.get_canonical_working_dir()?; + let working_dir = working_dir_holder + .path() + .canonicalize() + .context("Could not canonicalize working directory")?; let mut locked_app = match &app_source { AppSource::None => bail!("Internal error - should have shown help"), @@ -157,6 +159,22 @@ impl UpCommand { self.run_trigger(trigger_cmd, Some(run_opts)).await } + fn get_canonical_working_dir(&self) -> Result { + let working_dir_holder = match &self.tmp { + None => WorkingDirectory::Temporary(TempDir::with_prefix("spinup-")?), + Some(d) => WorkingDirectory::Given(d.to_owned()), + }; + if !working_dir_holder.path().exists() { + std::fs::create_dir_all(working_dir_holder.path()).with_context(|| { + format!( + "Could not create working directory '{}'", + working_dir_holder.path().display() + ) + })?; + } + Ok(working_dir_holder) + } + async fn run_trigger( self, trigger_cmd: Vec,