summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/build.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/build.rs b/src/build.rs
index 305c059..e6ddf14 100644
--- a/src/build.rs
+++ b/src/build.rs
@@ -77,7 +77,14 @@ impl<I: PackageInstaller, B: InitramfsBuilder> BuildExecutor<I, B> {
)
.apply(&rootfs)?;
- let initrd = self.initramfs_builder.build(&InitramfsRequest::discover(&rootfs)?)?;
+ let initramfs_request = match InitramfsRequest::discover(&rootfs) {
+ Ok(request) => request,
+ Err(error) => return Self::fail_and_remove_workspace(workspace, error),
+ };
+ let initrd = match self.initramfs_builder.build(&initramfs_request) {
+ Ok(initrd) => initrd,
+ Err(error) => return Self::fail_and_remove_workspace(workspace, error),
+ };
std::fs::create_dir_all(parent)
.with_context(|| format!("create artifact directory {}", parent.display()))?;
self.tar_writer.write(&rootfs, artifact)?;
@@ -98,6 +105,12 @@ impl<I: PackageInstaller, B: InitramfsBuilder> BuildExecutor<I, B> {
initrd: Some(initrd),
})
}
+
+ fn fail_and_remove_workspace<T>(workspace: &Path, error: anyhow::Error) -> Result<T> {
+ std::fs::remove_dir_all(workspace)
+ .with_context(|| format!("remove failed workspace {}", workspace.display()))?;
+ Err(error)
+ }
}
#[derive(Debug, Clone, PartialEq, Eq)]