refactor command flow and add signed package/hook safety

- split CLI definitions and command execution out of main.rs into new cli.rs and commands.rs modules\n- add transaction hook support via /etc/depot.d/hooks/*.toml with pre/post phases, operation/package/path filters, wildcard negation, and optional affected-path stdin\n- execute transaction hooks around install/update/remove operations and add package-action prompts for install/build/remove flows\n- require and verify detached minisign signatures for binary package archives when allow_unsigned=false, including cache handling and tests\n- persist optional dependencies from package metadata into repo index data and include optional deps in produced metadata\n- update dependency/planner logic to ignore dependencies provided by local split outputs and stop pulling test deps into install planning\n- auto-disable tests when required test dependencies are missing instead of hard-failing build/install paths\n- improve autotools defaults by injecting standard install directory flags when supported and preserving user overrides\n- remove static .a archives during staging by default with new build.flags.no_delete_static escape hatch\n- preserve symlinks and file metadata (permissions/timestamps) in extractor fallback copy path and add regression tests\n- refresh README docs for detached package signatures, optional dependencies, and transaction hooks\n- adjust dependency set: add filetime, disable reqwest default features, and simplify git2/OpenSSL linkage
This commit is contained in:
2026-02-28 00:54:08 -06:00
parent e045ae78fd
commit ce5fefa833
19 changed files with 3863 additions and 2923 deletions
+10 -20
View File
@@ -159,20 +159,9 @@ impl Packager {
),
);
// Add dependencies if useful for repo indexing
let mut build_deps = toml::map::Map::new();
build_deps.insert(
"build".to_string(),
toml::Value::Array(
self.spec
.dependencies
.build
.iter()
.map(|s| toml::Value::String(s.clone()))
.collect(),
),
);
build_deps.insert(
// Add install-relevant dependency kinds for repo/runtime consumers.
let mut deps = toml::map::Map::new();
deps.insert(
"runtime".to_string(),
toml::Value::Array(
self.spec
@@ -183,18 +172,18 @@ impl Packager {
.collect(),
),
);
build_deps.insert(
"test".to_string(),
deps.insert(
"optional".to_string(),
toml::Value::Array(
self.spec
.dependencies
.test
.optional
.iter()
.map(|s| toml::Value::String(s.clone()))
.collect(),
),
);
map.insert("dependencies".to_string(), toml::Value::Table(build_deps));
map.insert("dependencies".to_string(), toml::Value::Table(deps));
let toml_str = toml::to_string(&toml::Value::Table(map))
.context("Failed to serialize metadata to TOML")?;
@@ -357,9 +346,10 @@ mod tests {
assert_eq!(val.get("license").and_then(|v| v.as_str()), Some("MIT"));
let deps = val.get("dependencies").unwrap();
assert!(deps.get("build").unwrap().as_array().unwrap().is_empty());
assert!(deps.get("runtime").unwrap().as_array().unwrap().is_empty());
assert!(deps.get("test").unwrap().as_array().unwrap().is_empty());
assert!(deps.get("optional").unwrap().as_array().unwrap().is_empty());
assert!(deps.get("build").is_none());
assert!(deps.get("test").is_none());
}
#[test]