From 0f880b12b9dddbc976bc357502a1c9d7e17e2a70 Mon Sep 17 00:00:00 2001 From: John Tennant Date: Tue, 25 Aug 2026 00:40:48 -0400 Subject: [PATCH 1/4] perf(dev): share Cargo package cache across worktrees --- bin/hermit.hcl | 4 ++++ scripts/release/tests/release-scripts.test.mjs | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/bin/hermit.hcl b/bin/hermit.hcl index b429ec961..3271e1d38 100644 --- a/bin/hermit.hcl +++ b/bin/hermit.hcl @@ -1 +1,5 @@ manage-git = true + +env = { + "CARGO_HOME": "${HOME}/.cache/berd/cargo-home", +} diff --git a/scripts/release/tests/release-scripts.test.mjs b/scripts/release/tests/release-scripts.test.mjs index d9ca70af7..d24d595c0 100644 --- a/scripts/release/tests/release-scripts.test.mjs +++ b/scripts/release/tests/release-scripts.test.mjs @@ -38,6 +38,15 @@ afterEach(async () => { ); }); +describe("shared Cargo package cache", () => { + it("keeps Cargo dependency source paths stable across worktrees", async () => { + const hermitConfig = await readFile(join(repo, "bin/hermit.hcl"), "utf8"); + + expect(hermitConfig).toMatch( + /"CARGO_HOME": "\$\{HOME\}\/\.cache\/berd\/cargo-home"/, + ); + }); +}); describe("managed Goose build profile", () => { it("defaults development to debug and makes release selection profile-aware", async () => { const script = await readFile( From 96dc18bd80e21edf69803d8aa1b90c4adc73c895 Mon Sep 17 00:00:00 2001 From: John Tennant Date: Tue, 25 Aug 2026 00:55:49 -0400 Subject: [PATCH 2/4] fix(dev): preserve Cargo binary path --- bin/hermit.hcl | 1 + scripts/release/tests/release-scripts.test.mjs | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/bin/hermit.hcl b/bin/hermit.hcl index 3271e1d38..adce94e61 100644 --- a/bin/hermit.hcl +++ b/bin/hermit.hcl @@ -2,4 +2,5 @@ manage-git = true env = { "CARGO_HOME": "${HOME}/.cache/berd/cargo-home", + "PATH": "${HOME}/.cache/berd/cargo-home/bin:${PATH}", } diff --git a/scripts/release/tests/release-scripts.test.mjs b/scripts/release/tests/release-scripts.test.mjs index d24d595c0..7b77f3e7e 100644 --- a/scripts/release/tests/release-scripts.test.mjs +++ b/scripts/release/tests/release-scripts.test.mjs @@ -39,12 +39,15 @@ afterEach(async () => { }); describe("shared Cargo package cache", () => { - it("keeps Cargo dependency source paths stable across worktrees", async () => { + it("keeps Cargo dependency and binary paths stable across worktrees", async () => { const hermitConfig = await readFile(join(repo, "bin/hermit.hcl"), "utf8"); expect(hermitConfig).toMatch( /"CARGO_HOME": "\$\{HOME\}\/\.cache\/berd\/cargo-home"/, ); + expect(hermitConfig).toMatch( + /"PATH": "\$\{HOME\}\/\.cache\/berd\/cargo-home\/bin:\$\{PATH\}"/, + ); }); }); describe("managed Goose build profile", () => { From 01c157df4b568fca565d390104993d31016514f4 Mon Sep 17 00:00:00 2001 From: John Tennant Date: Thu, 3 Sep 2026 15:24:32 -0400 Subject: [PATCH 3/4] style(dev): separate Cargo cache contract Signed-off-by: John Tennant --- scripts/release/tests/release-scripts.test.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/release/tests/release-scripts.test.mjs b/scripts/release/tests/release-scripts.test.mjs index 7b77f3e7e..ee67741be 100644 --- a/scripts/release/tests/release-scripts.test.mjs +++ b/scripts/release/tests/release-scripts.test.mjs @@ -50,6 +50,7 @@ describe("shared Cargo package cache", () => { ); }); }); + describe("managed Goose build profile", () => { it("defaults development to debug and makes release selection profile-aware", async () => { const script = await readFile( From d3782f550ba9dd01b546a43632d41cf498dc9b2c Mon Sep 17 00:00:00 2001 From: John Tennant Date: Thu, 3 Sep 2026 15:30:04 -0400 Subject: [PATCH 4/4] test(dev): keep Cargo cache contracts independent Signed-off-by: John Tennant --- .../release/tests/release-scripts.test.mjs | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/scripts/release/tests/release-scripts.test.mjs b/scripts/release/tests/release-scripts.test.mjs index ee67741be..b9f2c2e73 100644 --- a/scripts/release/tests/release-scripts.test.mjs +++ b/scripts/release/tests/release-scripts.test.mjs @@ -38,19 +38,6 @@ afterEach(async () => { ); }); -describe("shared Cargo package cache", () => { - it("keeps Cargo dependency and binary paths stable across worktrees", async () => { - const hermitConfig = await readFile(join(repo, "bin/hermit.hcl"), "utf8"); - - expect(hermitConfig).toMatch( - /"CARGO_HOME": "\$\{HOME\}\/\.cache\/berd\/cargo-home"/, - ); - expect(hermitConfig).toMatch( - /"PATH": "\$\{HOME\}\/\.cache\/berd\/cargo-home\/bin:\$\{PATH\}"/, - ); - }); -}); - describe("managed Goose build profile", () => { it("defaults development to debug and makes release selection profile-aware", async () => { const script = await readFile( @@ -141,6 +128,19 @@ describe("managed Goose build profile", () => { }); }); +describe("shared Cargo package cache", () => { + it("keeps Cargo dependency and binary paths stable across worktrees", async () => { + const hermitConfig = await readFile(join(repo, "bin/hermit.hcl"), "utf8"); + + expect(hermitConfig).toMatch( + /"CARGO_HOME": "\$\{HOME\}\/\.cache\/berd\/cargo-home"/, + ); + expect(hermitConfig).toMatch( + /"PATH": "\$\{HOME\}\/\.cache\/berd\/cargo-home\/bin:\$\{PATH\}"/, + ); + }); +}); + describe("Docker Linux build environment", () => { it("forwards host build configuration when Docker replaces the environment", async () => { const dir = await tempDir();