Skip to content

fix: Disable unresolved Cargo artifact caching - #13362

Merged
anthonyshew merged 7 commits into
mainfrom
shew/cargo-output-hardening
Jul 13, 2026
Merged

anthonyshew merged 7 commits into
mainfrom
shew/cargo-output-hardening

Conversation

@anthonyshew

Copy link
Copy Markdown
Contributor

Why

Cargo artifact caching must fail closed when task outputs depend on layout inputs Turborepo cannot safely resolve. Otherwise, cache restores can reuse or omit the wrong artifacts.

This is stack 2/4 and depends on #13360.

What

Unsupported Cargo arguments, manifests, configuration, compiler overrides, and paths that escape the workspace now disable inferred artifact caching. Supported default and profile-only builds retain wildcard output discovery.

How

Validated the repository, engine, and library test suites; all 24 Cargo workspace end-to-end tests; cargo lint; cargo fmt --check; and git diff --check. Reviewers can focus on fail-closed classification in cargo.rs and the hermetic cases in cargo_workspace_test.rs.

@anthonyshew
anthonyshew requested a review from a team as a code owner July 13, 2026 15:53
@anthonyshew
anthonyshew requested review from tknickman and removed request for a team July 13, 2026 15:53
@vercel

vercel Bot commented Jul 13, 2026 •

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
examples-basic-web Ready Ready Preview, Comment, Open in v0 Jul 13, 2026 4:48pm
examples-designsystem-docs Ready Ready Preview, Comment, Open in v0 Jul 13, 2026 4:48pm
examples-gatsby-web Ready Ready Preview, Comment, Open in v0 Jul 13, 2026 4:48pm
examples-kitchensink-blog Ready Ready Preview, Comment, Open in v0 Jul 13, 2026 4:48pm
examples-nonmonorepo Ready Ready Preview, Comment, Open in v0 Jul 13, 2026 4:48pm
examples-svelte-web Ready Ready Preview, Comment, Open in v0 Jul 13, 2026 4:48pm
examples-tailwind-web Ready Ready Preview, Comment, Open in v0 Jul 13, 2026 4:48pm
examples-vite-web Ready Ready Preview, Comment, Open in v0 Jul 13, 2026 4:48pm
turbo-site Ready Ready Preview, Comment, Open in v0 Jul 13, 2026 4:48pm
turborepo-eve-agent Ready Ready Preview, Comment, Open in v0 Jul 13, 2026 4:48pm

@anthonyshew anthonyshew changed the title fix: Disable Unresolved Cargo Artifact Caching fix: Disable unresolved Cargo artifact caching Jul 13, 2026
Base automatically changed from shew/cargo-output-contract to main July 13, 2026 16:25
…dening

# Conflicts:
#	crates/turborepo-engine/src/builder/definitions.rs
#	crates/turborepo-engine/src/builder/test.rs
#	crates/turborepo-engine/src/builder/test/core.rs
#	crates/turborepo-repository/src/cargo.rs
#	crates/turborepo-repository/src/toolchain.rs
@anthonyshew
anthonyshew merged commit d76aa27 into main Jul 13, 2026
51 checks passed
@anthonyshew
anthonyshew deleted the shew/cargo-output-hardening branch July 13, 2026 17:02
anthonyshew added a commit that referenced this pull request Jul 13, 2026
## Why
Wildcard Cargo outputs can restore artifacts from the wrong profile or
platform even when task hashes differ. Exact host-layout outputs prevent
cross-profile and cross-platform cache contamination.

This is stack 3/4, following #13360 and #13362.

## What
Resolve the effective host profile and platform basename for
default-target builds. Explicit targets and target-directory variants
remain fail-closed for stack 4.

## How
The resolver retains the `rustc -vV` host triple, accepts only known
layout-neutral Cargo flags, maps built-in profiles to their output
directories, and emits one exact path per deliverable. Validated
repository, engine, and library suites; all 30 Cargo E2Es including
bidirectional profile isolation/restoration; `cargo lint`; formatting;
diff checks; and push hooks.
anthonyshew added a commit that referenced this pull request Jul 13, 2026
## Why
Cargo target triples and target-directory overrides move deliverables
outside the host default layout. Caching those builds requires exact,
validated paths to avoid cross-target restores and repository escapes.

This is stack 4/4, following #13360, #13362, and #13366.

## What
Resolve validated CLI/environment targets and contained
CLI/environment/metadata target directories, including repository
`target-dir`. Repository `build.target`, unsupported/custom targets,
nonstandard `CARGO_BUILD_TARGET_DIR`, external configuration, and path
escapes remain fail-closed.

## How
Probe `rustc --print target-list` under the same rustup selection as
execution, apply Cargo precedence, canonicalize the nearest existing
target-directory path inside the repository, and emit one exact
target/profile/platform artifact path. Validated repository, engine, and
library suites; all 37 Cargo E2Es; `cargo lint`; formatting; diff
checks; and push hooks.
anthonyshew pushed a commit that referenced this pull request Jul 13, 2026
## Release v2.10.6-canary.1

> [!CAUTION]
> Versioned docs aliasing FAILED. [View
logs](https://github.com/vercel/turborepo/actions/runs/29283293226)

### Changes

- fix: Preserve watch rerun semantics for task inputs (#13351)
(`6ed5eab`)
- fix: Isolate Command Overrides From Toolchain Cache I/O (#13354)
(`e76f0b4`)
- release(turborepo): 2.10.5-canary.6 (#13355) (`f82e2c7`)
- fix: Include patched Ghostty crate in Cargo workspace (#13357)
(`b3cd7a1`)
- ci: Shard Rust tests across runners (#13356) (`ef122d9`)
- fix: Hash Cargo build environment inputs (#13348) (`d533266`)
- fix: Synchronize Cargo prune Docker lockfile (#13350) (`ed17249`)
- chore: Update agents app Eve dependency (#13364) (`38aa7d2`)
- fix: Preserve Yarn package extension ranges when pruning (#13363)
(`6ed2fb4`)
- refactor: Add `Toolchain` output availability (#13360) (`82bcfb6`)
- release(turborepo): 2.10.5 (#13368) (`a6a563a`)
- fix: Disable unresolved Cargo artifact caching (#13362) (`d76aa27`)
- fix: Surface create-turbo Git failures (#13371) (`8a8b133`)
- fix: Resolve exact cargo profile outputs (#13366) (`0e6a99b`)
- fix: Prune Bun production workspace dev dependencies (#13369)
(`fee6b66`)
- fix: Resolve Cargo target output layouts (#13370) (`8c097cd`)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
anthonyshew pushed a commit that referenced this pull request Jul 22, 2026
## Release v2.10.6

> [!CAUTION]
> Versioned docs aliasing FAILED. [View
logs](https://github.com/vercel/turborepo/actions/runs/29930611207)

### Changes

- release(turborepo): 2.10.5 (#13368) (`a6a563a`)
- fix: Disable unresolved Cargo artifact caching (#13362) (`d76aa27`)
- fix: Surface create-turbo Git failures (#13371) (`8a8b133`)
- fix: Resolve exact cargo profile outputs (#13366) (`0e6a99b`)
- fix: Prune Bun production workspace dev dependencies (#13369)
(`fee6b66`)
- fix: Resolve Cargo target output layouts (#13370) (`8c097cd`)
- release(turborepo): 2.10.6-canary.1 (#13374) (`d0dca26`)
- fix: Preserve Yarn Babel extension during pruning (#13373) (`02ef828`)
- feat: Support Cargo-only repos (#13378) (`24dc68e`)
- fix: Preserve colors in TUI output (#13381) (`99c9ffb`)
- feat: Infer Cargo workspace tasks (#13380) (`58fe9df`)
- fix: Retain shutdown signals for force exit (#13382) (`62ecdaa`)
- release(turborepo): 2.10.6-canary.2 (#13383) (`8035b5d`)
- fix: Resolve weekly security audit vulnerabilities (#13358)
(`64f4aac`)
- chore: Update to Rust 1.97.0 (#13322) (`feb0a1a`)
- fix: Pin VS Code extension macOS runners (#13391) (`26169cd`)
- release(turborepo): 2.10.6-canary.3 (#13392) (`f753f04`)
- docs: Add Experimental Rust Guide (#13375) (`a2bf8a2`)
- ci: Use affected filtering for JS tests (#13386) (`0536a70`)
- ci: Fold docs checks into quality (#13385) (`fcd1858`)
- ci: Verify schemas through Turborepo (#13387) (`66551bc`)
- chore: Avoid duplicate N-API Cargo build (#13388) (`4ddacf4`)
- chore: Hash embedded frameworks data in Rust builds (#13389)
(`373c0a2`)
- ci: Include VS Code extension type checks (#13390) (`716ad9c`)
- refactor: Run releaser bundle directly (#13393) (`b6a92de`)
- refactor: Move release publishing into releaser (#13394) (`e0cf33c`)
- refactor: Consolidate release orchestration (#13395) (`51f5529`)
- feat: Add crate-scoped Cargo verification tasks (#13398) (`aeb2ee5`)
- fix: Fetch release commit parent (#13400) (`ab05127`)
- docs: Update Geistdocs to 1.13.0 (#13412) (`b1d8c9f`)
- release(turborepo): 2.10.6-canary.4 (#13401) (`90eba05`)
- fix: Preserve pnpm `node@runtime:` lockfile entries (#13408)
(`4ac2f47`)
- chore: Fix typos in with-solid example and globwatch comment (#13416)
(`424cabd`)
- refactor: Remove unused public APIs found by Hawk (#13420) (`831990d`)
- fix: Check dynamic imports in boundaries (#13418) (`31be2b8`)
- refactor: Use regex! for static pattern compilation (#13419)
(`82cd34c`)
- fix: Refactor `turbo watch` (#13423) (`328b99f`)
- release(turborepo): 2.10.6-canary.5 (#13424) (`ceee06b`)
- chore: Upgrade brace-expansion (#13429) (`d45bf2a`)
- chore: Update tar to 7.5.18 (#13428) (`d0dbd5a`)
- chore: Upgrade js-yaml (#13427) (`c8e36ad`)
- fix: Match JIT inputs for affected tasks (#13426) (`1b95fcb`)
- fix: Preserve project Yarn package extensions (#13425) (`f08f35c`)

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

This branch was successfully deployed

1 active deployment
Preview – turborepo-eve-agent — 24a0c89d Deployed Jul 13, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants