Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: vercel/turborepo
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v2.9.0
Choose a base ref
...
head repository: vercel/turborepo
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v2.9.1
Choose a head ref
  • 7 commits
  • 60 files changed
  • 3 contributors

Commits on Mar 30, 2026

  1. release(turborepo): 2.9.0 (#12494)

    ## Release v2.9.0
    
    Versioned docs: https://v2-9-0.turborepo.dev
    
    ### Changes
    
    - release(turborepo): 2.8.21 (#12472) (`be8dc50`)
    - fix: Avoid panic for unanchorable/non-UTF8 git paths (#11106)
    (`5f45fdb`)
    - release(turborepo): 2.8.22-canary.1 (#12473) (`f929b6d`)
    - fix: Handle Yarn 2+ in @turbo/codemod install commands (#12477)
    (`64e5ffd`)
    - release(turborepo): 2.8.22-canary.2 (#12479) (`be8cf64`)
    - feat: Accept `experimentalCI` key in turbo.json task config (#12480)
    (`bff5591`)
    - release(turborepo): 2.8.22-canary.3 (#12481) (`cd2d25b`)
    - fix: Prevent pnpm overrides from corrupting resolved peer-dep variants
    (#12482) (`91d31cf`)
    - release(turborepo): 2.8.22-canary.4 (#12483) (`a6eabc6`)
    - fix: Skip writing unchanged files during slow-path cache restore
    (#12484) (`b7c0001`)
    - release(turborepo): 2.8.22-canary.5 (#12486) (`3155a35`)
    - fix: Replace pre-existing symlinks with directories during cache
    restore (#12488) (`d07bee8`)
    - release(turborepo): 2.8.22-canary.6 (#12490) (`5e9ba83`)
    - fix: Follow symlinks during workspace package discovery (#12489)
    (`f39b370`)
    - release(turborepo): 2.8.22-canary.7 (#12491) (`c03cc5f`)
    - fix: Reduce inotify watch count via gitignore-aware directory walking
    on Linux (#12398) (`664fd88`)
    - release(turborepo): 2.8.22-canary.8 (#12492) (`841fe79`)
    
    ---------
    
    Co-authored-by: Turbobot <turbobot@vercel.com>
    github-actions[bot] and turbobot-temp authored Mar 30, 2026
    Configuration menu
    Copy the full SHA
    9702dc8 View commit details
    Browse the repository at this point in the history
  2. docs: Release post for 2.9 (#12441)

    🥳
    anthonyshew authored Mar 30, 2026
    Configuration menu
    Copy the full SHA
    6bf87ec View commit details
    Browse the repository at this point in the history
  3. fix: Use previous minor/major tag for release notes on minor/major re…

    …leases (#12495)
    
    ## Summary
    
    - The "Get previous tag" step in the release workflow treated all stable
    releases the same, picking the latest non-canary tag as
    `--notes-start-tag`. For minor/major releases like v2.9.0, this meant
    comparing against v2.8.21 (a patch) instead of v2.8.0 (the last minor),
    so the generated notes missed everything shipped in patches between the
    two minors.
    - Now, minor/major releases filter to `vX.Y.0` tags so the full delta is
    captured. Patch releases keep the existing behavior.
    - Already fixed the live v2.9.0 release notes via `gh release edit`.
    anthonyshew authored Mar 30, 2026
    Configuration menu
    Copy the full SHA
    a7c6dd9 View commit details
    Browse the repository at this point in the history
  4. feat: Handle package manager catalogs in migration codemod (#12496)

    ## Summary
    
    When a project uses package manager catalogs (e.g. `"turbo": "catalog:"`
    in `package.json`), the migration codemod previously ran `pnpm add
    turbo@latest` which overwrote the `catalog:` reference with a literal
    version string — breaking the catalog setup.
    
    Now the codemod detects `catalog:` protocol references, updates the
    version directly in the catalog file (`pnpm-workspace.yaml` or
    `.yarnrc.yml`), and runs a plain `install` to sync the lockfile instead.
    
    Fixes the issue reported here:
    https://x.com/stanzillaz/status/1906367700218610076
    
    ## What changed
    
    - **New step in migration flow**: Before building the upgrade command,
    the codemod checks if turbo uses a `catalog:` reference. If so, it
    updates the version in the catalog file (preserving the existing range
    prefix like `^` or `~`) and uses a plain install command instead of
    `add`.
    - **Tag resolution fix in `getLatestVersion`**: `--to latest` now
    resolves to the concrete version (e.g. `"2.9.0"`) instead of returning
    the string `"latest"`. This also fixes the `fromVersion === toVersion`
    short-circuit that previously couldn't detect same-version with tag
    names.
    - Supports pnpm default catalogs (`catalog:`), pnpm named catalogs
    (`catalog:<name>`), and Yarn Berry catalogs (`.yarnrc.yml`).
    
    ## Testing
    
    18 new tests covering detection (pnpm default/named, yarn, npm,
    non-catalog, missing files) and YAML updates (version update, prefix
    preservation, no-op when already current). All 245 tests in the suite
    pass.
    anthonyshew authored Mar 30, 2026
    Configuration menu
    Copy the full SHA
    079366b View commit details
    Browse the repository at this point in the history
  5. release(turborepo): 2.9.1-canary.1 (#12497)

    ## Release v2.9.1-canary.1
    
    Versioned docs: https://v2-9-1-canary-1.turborepo.dev
    
    ### Changes
    
    - release(turborepo): 2.8.22-canary.8 (#12492) (`841fe79`)
    - release(turborepo): 2.9.0 (#12494) (`9702dc8`)
    - docs: Release post for 2.9 (#12441) (`6bf87ec`)
    - fix: Use previous minor/major tag for release notes on minor/major
    releases (#12495) (`a7c6dd9`)
    - feat: Handle package manager catalogs in migration codemod (#12496)
    (`079366b`)
    
    Co-authored-by: Turbobot <turbobot@vercel.com>
    github-actions[bot] and turbobot-temp authored Mar 30, 2026
    Configuration menu
    Copy the full SHA
    fbf34a2 View commit details
    Browse the repository at this point in the history
  6. feat: Add cacheMaxAge and cacheMaxSize for local cache eviction (#…

    …12487)
    
    ## Summary
    
    - Adds `cacheMaxAge` (TTL) and `cacheMaxSize` (LRU) config options to
    `turbo.json` for automatic local filesystem cache eviction
    - Also configurable via `TURBO_CACHE_MAX_AGE` and `TURBO_CACHE_MAX_SIZE`
    environment variables
    - Both options are opt-in; no behavioral change for existing users
    
    ## How it works
    
    Eviction runs in a **background thread** at `turbo run` startup
    (fire-and-forget, doesn't block task scheduling). The two-phase
    algorithm:
    
    1. **Phase 1 (TTL)**: Removes entries whose `.tar.zst` mtime exceeds
    `cacheMaxAge`
    2. **Phase 2 (LRU)**: If remaining cache exceeds `cacheMaxSize`, evicts
    oldest entries first
    
    ## Config examples
    
    ```json
    {
      "cacheMaxAge": "7d",
      "cacheMaxSize": "10GB"
    }
    ```
    
    Duration supports: `30s`, `5m`, `24h`, `7d`, `2w`. Size supports:
    `500MB`, `10GB`, `1TB` (case-insensitive, fractional values like `1.5GB`
    work).
    
    ## Safety
    
    - Parsers use checked arithmetic — overflow, NaN, negative, and Infinity
    inputs are rejected with clear error messages
    - `.tmp` file cleanup skips files younger than 1 hour to avoid racing
    concurrent `turbo run` processes
    - `SystemTime` subtraction uses `checked_sub` to prevent panics with
    extreme `max_age` values
    - Eviction is best-effort: individual file removal failures are silently
    skipped
    
    ## Testing
    
    To verify: set `TURBO_CACHE_MAX_AGE=1s` or `cacheMaxAge: "1s"` in
    turbo.json, run two builds with a gap, and confirm stale entries are
    removed. Eviction results are logged at `info` level.
    anthonyshew authored Mar 30, 2026
    Configuration menu
    Copy the full SHA
    a702a15 View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    7a2191f View commit details
    Browse the repository at this point in the history
Loading