From 04b9d3b07f8a8ad9b92e2f335a3aeb72ed46f970 Mon Sep 17 00:00:00 2001 From: Brad Heller Date: Fri, 16 Jan 2026 17:00:51 +0000 Subject: [PATCH 1/2] An invalid manifest file should not result in a panic! --- crates/tower-package/src/lib.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/tower-package/src/lib.rs b/crates/tower-package/src/lib.rs index c32ae959..2700bce1 100644 --- a/crates/tower-package/src/lib.rs +++ b/crates/tower-package/src/lib.rs @@ -190,16 +190,16 @@ impl Package { } } - pub async fn from_unpacked_path(path: PathBuf) -> Self { + pub async fn from_unpacked_path(path: PathBuf) -> Result { let manifest_path = path.join("MANIFEST"); - let manifest = Manifest::from_path(&manifest_path).await.unwrap(); + let manifest = Manifest::from_path(&manifest_path).await?; - Self { + Ok(Self { tmp_dir: None, package_file_path: None, unpacked_path: Some(path), manifest, - } + }) } // build creates a new package from a PackageSpec. PackageSpec is typically composed of fields From 9da3f383a5b0dd0592b73d9376241dabd32f24e5 Mon Sep 17 00:00:00 2001 From: Brad Heller Date: Fri, 16 Jan 2026 17:06:51 +0000 Subject: [PATCH 2/2] Make parameter serialization a little more resilient --- crates/tower-package/src/lib.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/crates/tower-package/src/lib.rs b/crates/tower-package/src/lib.rs index 2700bce1..caaabcab 100644 --- a/crates/tower-package/src/lib.rs +++ b/crates/tower-package/src/lib.rs @@ -35,8 +35,13 @@ pub const MAX_BUNDLE_SIZE: u64 = 50 * 1024 * 1024; #[derive(Clone, Serialize, Deserialize, Debug)] pub struct Parameter { + #[serde(default)] pub name: String, - pub description: String, + + #[serde(default)] + pub description: Option, + + #[serde(default)] pub default: String, } @@ -115,7 +120,7 @@ fn get_parameters(towerfile: &Towerfile) -> Vec { for p in &towerfile.parameters { parameters.push(Parameter { name: p.name.clone(), - description: p.description.clone(), + description: Some(p.description.clone()), default: p.default.clone(), }); }