From e5338d823d5e9b2042bbba482c0f629762bbe163 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Wed, 12 Aug 2026 07:14:29 +0000 Subject: Clean workspace after initramfs failure --- src/build.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src') 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 BuildExecutor { ) .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 BuildExecutor { initrd: Some(initrd), }) } + + fn fail_and_remove_workspace(workspace: &Path, error: anyhow::Error) -> Result { + std::fs::remove_dir_all(workspace) + .with_context(|| format!("remove failed workspace {}", workspace.display()))?; + Err(error) + } } #[derive(Debug, Clone, PartialEq, Eq)] -- cgit v1.2.3