diff --git a/scripts/release/tests/release-scripts.test.mjs b/scripts/release/tests/release-scripts.test.mjs index 2f1253c76..d50a300fa 100644 --- a/scripts/release/tests/release-scripts.test.mjs +++ b/scripts/release/tests/release-scripts.test.mjs @@ -38,6 +38,28 @@ afterEach(async () => { ); }); +describe("Tauri Cargo target isolation", () => { + it("defaults to the current checkout's ignored Cargo target", () => { + const result = run("bash", ["scripts/resolve-tauri-cargo-target-dir.sh"], { + BERD_TAURI_CARGO_TARGET_DIR: "", + XDG_CACHE_HOME: join(tmpdir(), "unrelated-xdg-cache"), + }); + + expect(result.status).toBe(0); + expect(result.stdout.trim()).toBe(join(repo, "src-tauri/target")); + }); + + it("preserves the explicit target directory override", async () => { + const override = join(await tempDir(), "cargo-target"); + const result = run("bash", ["scripts/resolve-tauri-cargo-target-dir.sh"], { + BERD_TAURI_CARGO_TARGET_DIR: override, + }); + + expect(result.status).toBe(0); + expect(result.stdout.trim()).toBe(override); + }); +}); + describe("managed Goose build profile", () => { it("defaults development to debug and makes release selection profile-aware", async () => { const script = await readFile( diff --git a/scripts/resolve-tauri-cargo-target-dir.sh b/scripts/resolve-tauri-cargo-target-dir.sh index ba9a14389..e799a1074 100644 --- a/scripts/resolve-tauri-cargo-target-dir.sh +++ b/scripts/resolve-tauri-cargo-target-dir.sh @@ -3,10 +3,9 @@ set -euo pipefail if [[ -n "${BERD_TAURI_CARGO_TARGET_DIR:-}" ]]; then printf '%s\n' "$BERD_TAURI_CARGO_TARGET_DIR" -elif [[ -n "${XDG_CACHE_HOME:-}" ]]; then - printf '%s/berd-tauri/cargo-target\n' "$XDG_CACHE_HOME" -elif [[ "$(uname -s)" = "Darwin" ]]; then - printf '%s/Library/Caches/berd-tauri/cargo-target\n' "$HOME" else - printf '%s/.cache/berd-tauri/cargo-target\n' "$HOME" + # Cargo coordinates writers inside one target directory. Keep the default + # checkout-local so concurrent worktrees can build without blocking. + script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + printf '%s/src-tauri/target\n' "$(dirname "$script_dir")" fi diff --git a/scripts/windows/Test-WindowsDev.ps1 b/scripts/windows/Test-WindowsDev.ps1 index 5f6c0982b..e7ff3f54f 100644 --- a/scripts/windows/Test-WindowsDev.ps1 +++ b/scripts/windows/Test-WindowsDev.ps1 @@ -41,6 +41,7 @@ $oldGooseRepo = $env:GOOSE_DEV_REPO $oldGooseTarget = $env:GOOSE_DEV_CARGO_TARGET_DIR $oldGooseStamp = $env:GOOSE_DEV_STAMP_FILE $oldGooseBuildProfile = $env:GOOSE_BUILD_PROFILE +$oldBerdTauriCargoTargetDir = $env:BERD_TAURI_CARGO_TARGET_DIR $oldLocalAppData = $env:LOCALAPPDATA $oldUserProfile = $env:USERPROFILE $oldAppData = $env:APPDATA @@ -680,6 +681,13 @@ try { $env:APPDATA = Join-Path $temp "Roaming" $env:FNM_DIR = "" + $env:BERD_TAURI_CARGO_TARGET_DIR = "" + Assert-Equal "Tauri cargo target defaults to this checkout" ` + (Get-TauriCargoTargetDir) (Join-Path (Get-BerdRepoRoot) "src-tauri\target") + $env:BERD_TAURI_CARGO_TARGET_DIR = Join-Path $temp "explicit-tauri-target" + Assert-Equal "Tauri cargo target honors explicit override" ` + (Get-TauriCargoTargetDir) $env:BERD_TAURI_CARGO_TARGET_DIR + # Cleanup honors the same env overrides setup/dev use. $env:BERD_TAURI_CARGO_TARGET_DIR = Join-Path $temp "override-target" $overriddenPaths = Resolve-WindowsCleanupPaths @@ -690,7 +698,7 @@ try { $cleanupPaths = Resolve-WindowsCleanupPaths Assert-Equal "cleanup Berd dev root" $cleanupPaths.BerdDevRoot (Join-Path $env:LOCALAPPDATA "berd-dev") - Assert-Equal "cleanup Tauri root" $cleanupPaths.BerdTauriRoot (Join-Path $env:LOCALAPPDATA "berd-tauri") + Assert-Equal "cleanup Tauri root" $cleanupPaths.BerdTauriRoot (Join-Path (Get-BerdRepoRoot) "src-tauri\target") Assert-Equal "Block npm cert file" $cleanupPaths.BlockCertFile (Join-Path $env:USERPROFILE ".block-certs\root-certs.pem") Assert-Equal "cleanup Corepack pnpm dir" $cleanupPaths.CorepackPnpmVersionDir (Join-Path $env:LOCALAPPDATA "node\corepack\v1\pnpm\$(Get-RequiredPnpmVersion)") Assert-Equal "cleanup fnm Node dir" $cleanupPaths.FnmNodeVersionDir (Join-Path $env:APPDATA "fnm\node-versions\v$(Get-RequiredNodeVersion)") @@ -719,6 +727,7 @@ try { $env:GOOSE_DEV_CARGO_TARGET_DIR = $oldGooseTarget $env:GOOSE_DEV_STAMP_FILE = $oldGooseStamp $env:GOOSE_BUILD_PROFILE = $oldGooseBuildProfile + $env:BERD_TAURI_CARGO_TARGET_DIR = $oldBerdTauriCargoTargetDir $env:LOCALAPPDATA = $oldLocalAppData $env:USERPROFILE = $oldUserProfile $env:APPDATA = $oldAppData diff --git a/scripts/windows/WindowsDev.psm1 b/scripts/windows/WindowsDev.psm1 index aebb9a0a9..49c0f108a 100644 --- a/scripts/windows/WindowsDev.psm1 +++ b/scripts/windows/WindowsDev.psm1 @@ -607,7 +607,7 @@ function Resolve-WindowsCleanupPaths { # the state that setup/dev actually created. A BERD_TAURI_CARGO_TARGET_DIR # override points directly at a cargo target dir; only that dir is # Berd-owned, not its parent. - $berdTauriRoot = Join-Path $localAppData "berd-tauri" + $berdTauriRoot = Join-Path $repoRoot "src-tauri\target" if (-not [string]::IsNullOrWhiteSpace($env:BERD_TAURI_CARGO_TARGET_DIR)) { $berdTauriRoot = $env:BERD_TAURI_CARGO_TARGET_DIR } @@ -674,7 +674,8 @@ function Get-TauriCargoTargetDir { if (-not [string]::IsNullOrWhiteSpace($env:BERD_TAURI_CARGO_TARGET_DIR)) { return $env:BERD_TAURI_CARGO_TARGET_DIR } - return (Join-Path (Get-LocalAppDataRoot) "berd-tauri\cargo-target") + # Isolate Cargo's writer lock and incremental state to this checkout. + return (Join-Path (Get-BerdRepoRoot) "src-tauri\target") } function Read-JsonFile {