Skip to content

Change prune-cache default to false - #967

Merged
eifinger merged 1 commit into
mainfrom
charlie/prune-cache-default-false
Jul 20, 2026
Merged

eifinger merged 1 commit into
mainfrom
charlie/prune-cache-default-false

Conversation

@charliermarsh

@charliermarsh charliermarsh commented Jul 20, 2026 •

Copy link
Copy Markdown
Member

Summary

This changes the default for prune-cache from true to false, motivated by #745. Users that want the existing behavior can continue to set prune-cache: true explicitly.

Some history: I originally added uv cache prune --ci after looking at a workload where the uv cache was ~2.2 GB, almost entirely due to the enormous pre-built torch and nvidia_cudnn_cu12 wheels (original analysis). Persisting and restoring thousands of extracted files through the GitHub Actions cache could be slower than downloading the wheels again. In contrast, wheels built from source can be very expensive to recreate. The intent was to remove pre-built wheels while retaining locally-built wheels.

setup-uv subsequently made pruning configurable, but defaulted prune-cache to true; it also later enabled caching by default on GitHub-hosted runners. As a result, the default configuration repeatedly downloads pre-built wheels from PyPI even on a cache hit. That tradeoff has become more important as uv adoption has grown: the PyPI analysis in #745 estimates that uv accounts for roughly half of reported CI downloads from PyPI, and roughly 65-75% for boto3.

I ran the comparison across a few different workloads:

Workload PR Packages Cache: keep / prune / prune-ci Warm restore+sync: keep / prune / prune-ci Downloads: prune / prune-ci
Tiny #1 19 6 / 6 / 2 MB 0.3-0.4 / 0.3 / 0.4-0.5 s 0 / 2
Web #2 65 43 / 43 / 7 MB 0.6-1.0 / 0.5-0.6 / 1.5-1.7 s 0 / 6
Scientific #3 118 586 / 586 / 8 MB 8.2-16.0 / 7.0-8.2 / 8.9-12.1 s 0 / 19
PySpark #4 19 1820 / 1820 / 436 MB 9.9-21.1 / 10.5-11.0 / 5.0-7.0 s 0 / 4
CPU PyTorch #5 14 182 / 182 / 1 MB 3.0-6.0 / 3.6-4.0 / 5.7-6.4 s 0 / 6
CPU-PyTorch ML #6 137 346 / 346 / 10 MB 7.4-18.0 / 8.8-8.9 / 9.7-11.9 s 0 / 20
CUDA PyTorch #7 201 2316 / 2315 / 16 MB 30.2-67.9 / 31.0-63.6 / 33.3-36.7 s 0 / 40

The CUDA workload intentionally reproduces the original torch==2.1.1 example. Keeping wheels again produces a ~2.3 GB Actions cache. Across nine warm runs, restoring that cache ranged from slightly faster than re-downloading to roughly twice as slow; pruning consistently re-downloaded 40 distributions in ~33-37 seconds (original runs, additional runs).

I also tried running uv cache prune --force without --ci across every workload, to see if it provided a useful middle ground. It did not meaningfully reduce any of the caches: plain prune took 11-21 ms and left the extracted cache and file count unchanged, including PySpark. On these fresh caches, there are no dangling entries to remove; without --ci, the pre-built wheels and unpacked source/build artifacts are retained. The per-workload runs are linked in the table above.

So the original motivation still holds for very large CUDA or source-heavy workloads, but it is not representative of the common case. For smaller workloads, keeping pre-built wheels is generally faster and avoids repeated PyPI traffic. This changes the default accordingly, while retaining prune-cache: true as an opt-in for workloads where the smaller cache is worthwhile.

Closes #745.

@charliermarsh charliermarsh changed the title Change prune-cache default to false Change prune-cache default to false Jul 20, 2026
@charliermarsh
charliermarsh marked this pull request as ready for review July 20, 2026 16:42
@charliermarsh
charliermarsh requested a review from eifinger as a code owner July 20, 2026 16:42
@charliermarsh
charliermarsh requested review from zanieb and zsol July 20, 2026 16:42
@zsol

zsol commented Jul 20, 2026

Copy link
Copy Markdown
Member

Could you try running the benchmark with uv cache prune (without --ci) too? I suspect that might be the sweet spot for a default

@charliermarsh

Copy link
Copy Markdown
Member Author

I tested it and it removed 0 artifacts across all the test cases. It's generally just not that aggressive -- it removes things like obsolete cache buckets, ephemeral environments, etc.

@eifinger eifinger left a comment •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the detailed analysis including statistics and the historical timeline

@eifinger

Copy link
Copy Markdown
Collaborator

For some users this might be a big surprise so I'm gonna flag this as a breaking change.

@eifinger
eifinger merged commit 47a7f4f into main Jul 20, 2026
91 checks passed
@eifinger
eifinger deleted the charlie/prune-cache-default-false branch July 20, 2026 18:25
Doridian pushed a commit to FoxDenHome/core that referenced this pull request Jul 21, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [https://github.com/astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) | action | major | `v8.3.2` → `v9.0.0` |

---

### Release Notes

<details>
<summary>astral-sh/setup-uv (https://github.com/astral-sh/setup-uv)</summary>

### [`v9.0.0`](https://github.com/astral-sh/setup-uv/releases/tag/v9.0.0): 🌈 Change `prune-cache` default to `false`

[Compare Source](astral-sh/setup-uv@v8.3.2...v9.0.0)

#### Changes

This release disables the default cache cache pruning to ease the load on the PyPi infrastructure.
Since users might experience more GitHub Actions cache usage which might result in higher costs this is marked as a breaking change. To read more on why we did this (now) you can read the detailed analysis and reasoning in [#&#8203;967](astral-sh/setup-uv#967)

Besides this big breaking change we also have a small bugfix while building caches for linux distributions that behave a big different than the "big ones" and a speed up in version resolution by only reading the version manifest until a matching version is found saving runtime and network bandwith.

#### 🚨 Breaking changes

- Change `prune-cache` default to `false` [@&#8203;charliermarsh](https://github.com/charliermarsh) ([#&#8203;967](astral-sh/setup-uv#967))

#### 🐛 Bug fixes

- fix: fall back to distribution ID when os-release has no version field [@&#8203;cxzhong](https://github.com/cxzhong) ([#&#8203;961](astral-sh/setup-uv#961))

#### 🚀 Enhancements

- Speed up version client by partial response reads [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;807](astral-sh/setup-uv#807))

#### 🧰 Maintenance

- chore: update known checksums for 0.11.30 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;968](astral-sh/setup-uv#968))
- chore: update known checksums for 0.11.29 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;960](astral-sh/setup-uv#960))

#### 📚 Documentation

- docs: update version references to v8.3.2 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;949](astral-sh/setup-uv#949))

#### ⬆️ Dependency updates

- chore(deps): roll up Dependabot updates [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;970](astral-sh/setup-uv#970))
- chore(deps): roll up Dependabot updates [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;962](astral-sh/setup-uv#962))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNzMuMCIsInVwZGF0ZWRJblZlciI6IjQzLjI3My4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Reviewed-on: https://git.foxden.network/FoxDen/core/pulls/136
ajgon pushed a commit to deedee-ops/schemas that referenced this pull request Jul 22, 2026
#14)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) | action | major | `v8.3.2` → `v9.0.0` |

---

### Release Notes

<details>
<summary>astral-sh/setup-uv (astral-sh/setup-uv)</summary>

### [`v9.0.0`](https://github.com/astral-sh/setup-uv/releases/tag/v9.0.0): 🌈 Change `prune-cache` default to `false`

[Compare Source](astral-sh/setup-uv@v8.3.2...v9.0.0)

#### Changes

This release disables the default cache cache pruning to ease the load on the PyPi infrastructure.
Since users might experience more GitHub Actions cache usage which might result in higher costs this is marked as a breaking change. To read more on why we did this (now) you can read the detailed analysis and reasoning in [#&#8203;967](astral-sh/setup-uv#967)

Besides this big breaking change we also have a small bugfix while building caches for linux distributions that behave a big different than the "big ones" and a speed up in version resolution by only reading the version manifest until a matching version is found saving runtime and network bandwith.

#### 🚨 Breaking changes

- Change `prune-cache` default to `false` [@&#8203;charliermarsh](https://github.com/charliermarsh) ([#&#8203;967](astral-sh/setup-uv#967))

#### 🐛 Bug fixes

- fix: fall back to distribution ID when os-release has no version field [@&#8203;cxzhong](https://github.com/cxzhong) ([#&#8203;961](astral-sh/setup-uv#961))

#### 🚀 Enhancements

- Speed up version client by partial response reads [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;807](astral-sh/setup-uv#807))

#### 🧰 Maintenance

- chore: update known checksums for 0.11.30 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;968](astral-sh/setup-uv#968))
- chore: update known checksums for 0.11.29 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;960](astral-sh/setup-uv#960))

#### 📚 Documentation

- docs: update version references to v8.3.2 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;949](astral-sh/setup-uv#949))

#### ⬆️ Dependency updates

- chore(deps): roll up Dependabot updates [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;970](astral-sh/setup-uv#970))
- chore(deps): roll up Dependabot updates [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;962](astral-sh/setup-uv#962))

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/Warsaw)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNzIuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI3Mi4yIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbXX0=-->

Reviewed-on: https://git.ajgon.casa/deedee/schemas/pulls/14
luketainton pushed a commit to luketainton/repos_pypilot that referenced this pull request Jul 24, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) | action | major | `v8.3.2` → `v9.0.0` |

---

### Release Notes

<details>
<summary>astral-sh/setup-uv (astral-sh/setup-uv)</summary>

### [`v9.0.0`](https://github.com/astral-sh/setup-uv/releases/tag/v9.0.0): 🌈 Change `prune-cache` default to `false`

[Compare Source](astral-sh/setup-uv@v8.3.2...v9.0.0)

##### Changes

This release disables the default cache cache pruning to ease the load on the PyPi infrastructure.
Since users might experience more GitHub Actions cache usage which might result in higher costs this is marked as a breaking change. To read more on why we did this (now) you can read the detailed analysis and reasoning in [#&#8203;967](astral-sh/setup-uv#967)

Besides this big breaking change we also have a small bugfix while building caches for linux distributions that behave a big different than the "big ones" and a speed up in version resolution by only reading the version manifest until a matching version is found saving runtime and network bandwith.

##### 🚨 Breaking changes

- Change `prune-cache` default to `false` [@&#8203;charliermarsh](https://github.com/charliermarsh) ([#&#8203;967](astral-sh/setup-uv#967))

##### 🐛 Bug fixes

- fix: fall back to distribution ID when os-release has no version field [@&#8203;cxzhong](https://github.com/cxzhong) ([#&#8203;961](astral-sh/setup-uv#961))

##### 🚀 Enhancements

- Speed up version client by partial response reads [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;807](astral-sh/setup-uv#807))

##### 🧰 Maintenance

- chore: update known checksums for 0.11.30 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;968](astral-sh/setup-uv#968))
- chore: update known checksums for 0.11.29 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;960](astral-sh/setup-uv#960))

##### 📚 Documentation

- docs: update version references to v8.3.2 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;949](astral-sh/setup-uv#949))

##### ⬆️ Dependency updates

- chore(deps): roll up Dependabot updates [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;970](astral-sh/setup-uv#970))
- chore(deps): roll up Dependabot updates [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;962](astral-sh/setup-uv#962))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNzMuMCIsInVwZGF0ZWRJblZlciI6IjQzLjI3My4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL2RlcGVuZGVuY2llcyJdfQ==-->Reviewed-on: https://git.tainton.uk/repos/pypilot/pulls/468
Reviewed-by: Luke Tainton <luke@tainton.uk>
Co-authored-by: renovate[bot] <renovate-bot@git.tainton.uk>
luketainton pushed a commit to luketainton/repos_labmcp that referenced this pull request Jul 24, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) | action | major | `v8.3.2` → `v9.0.0` |

---

### Release Notes

<details>
<summary>astral-sh/setup-uv (astral-sh/setup-uv)</summary>

### [`v9.0.0`](https://github.com/astral-sh/setup-uv/releases/tag/v9.0.0): 🌈 Change `prune-cache` default to `false`

[Compare Source](astral-sh/setup-uv@v8.3.2...v9.0.0)

##### Changes

This release disables the default cache cache pruning to ease the load on the PyPi infrastructure.
Since users might experience more GitHub Actions cache usage which might result in higher costs this is marked as a breaking change. To read more on why we did this (now) you can read the detailed analysis and reasoning in [#&#8203;967](astral-sh/setup-uv#967)

Besides this big breaking change we also have a small bugfix while building caches for linux distributions that behave a big different than the "big ones" and a speed up in version resolution by only reading the version manifest until a matching version is found saving runtime and network bandwith.

##### 🚨 Breaking changes

- Change `prune-cache` default to `false` [@&#8203;charliermarsh](https://github.com/charliermarsh) ([#&#8203;967](astral-sh/setup-uv#967))

##### 🐛 Bug fixes

- fix: fall back to distribution ID when os-release has no version field [@&#8203;cxzhong](https://github.com/cxzhong) ([#&#8203;961](astral-sh/setup-uv#961))

##### 🚀 Enhancements

- Speed up version client by partial response reads [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;807](astral-sh/setup-uv#807))

##### 🧰 Maintenance

- chore: update known checksums for 0.11.30 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;968](astral-sh/setup-uv#968))
- chore: update known checksums for 0.11.29 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;960](astral-sh/setup-uv#960))

##### 📚 Documentation

- docs: update version references to v8.3.2 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;949](astral-sh/setup-uv#949))

##### ⬆️ Dependency updates

- chore(deps): roll up Dependabot updates [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;970](astral-sh/setup-uv#970))
- chore(deps): roll up Dependabot updates [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;962](astral-sh/setup-uv#962))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNzMuMCIsInVwZGF0ZWRJblZlciI6IjQzLjI3My4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL2RlcGVuZGVuY2llcyJdfQ==-->Reviewed-on: https://git.tainton.uk/repos/labmcp/pulls/17
Reviewed-by: Luke Tainton <luke@tainton.uk>
Co-authored-by: renovate[bot] <renovate-bot@git.tainton.uk>
mischa76 added a commit to mischa76/vault-agent that referenced this pull request Jul 24, 2026
The pinned v6 SHA targets the Node.js 20 runtime, which GitHub deprecated and now
force-runs on Node 24 (annotation on every CI run). v9.0.0 declares node24 natively.

Its one breaking change (prune-cache default false, astral-sh/setup-uv#967) only affects
cache size for workflows that enable the uv cache; this job does not.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
hynek added a commit to hynek/setup-cached-uv that referenced this pull request Jul 25, 2026
donverduyn added a commit to donverduyn/ha-pylontech-mqtt that referenced this pull request Jul 25, 2026
v9.0.0's own release notes call this out as the breaking change:
"Change prune-cache default to false" (astral-sh/setup-uv#967). Without
pruning, the cache directory setup-uv's own post-step tries to save
isn't guaranteed to exist on disk by job end, which failed every lint/
pytest job here outright: "Cache path .../setup-uv-cache does not exist
on disk." Setting it explicitly restores the behavior every job already
depended on.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
donverduyn added a commit to donverduyn/ha-pylontech-mqtt that referenced this pull request Jul 25, 2026
* chore(deps): bump astral-sh/setup-uv from 8.3.2 to 9.0.0

Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 8.3.2 to 9.0.0.
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](astral-sh/setup-uv@11f9893...c771a70)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 9.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Fix inconsistent astral-sh/setup-uv pin in setup-python-env composite action

Dependabot doesn't scan .github/actions/**, so this PR's own diff updated
the astral-sh/setup-uv pin in dependency-updates.yaml and
min-ha-version-update.yaml but missed this composite action, leaving it
on the old v8.3.2 SHA and tripping check_action_pins.py's
inconsistent-pins check. Brings it in line with what this PR already
updated everywhere else.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Restore prune-cache: true after setup-uv v9.0.0 changed its own default

v9.0.0's own release notes call this out as the breaking change:
"Change prune-cache default to false" (astral-sh/setup-uv#967). Without
pruning, the cache directory setup-uv's own post-step tries to save
isn't guaranteed to exist on disk by job end, which failed every lint/
pytest job here outright: "Cache path .../setup-uv-cache does not exist
on disk." Setting it explicitly restores the behavior every job already
depended on.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Donny Verduijn <donnyverduijn@gmail.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
tsvikas added a commit to tsvikas/python-template that referenced this pull request Jul 26, 2026
v9 flips prune-cache to false. We take the new default rather than pinning
prune-cache: true, because the benchmarks in astral-sh/setup-uv#967 show
pruning only pays off for very large pre-built wheels: 6 MB vs 2 MB on a tiny
project, 43 vs 7 on a web project, and only the PySpark (1820 vs 436 MB) and
CUDA torch (2316 vs 16 MB) shapes justify it. Projects generated from this
template are ordinary Python libraries, where keeping wheels is faster on warm
runs and avoids re-downloading from PyPI on every cache hit.

Generated projects that do pull torch or a similarly huge wheel should set
prune-cache: true themselves.

This also converges the template (was v8.3.1) and this repo's own workflow
(was v8.3.0) onto one version.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JP6NCazpaMz2Xfejds3mxq
ChristianGeng added a commit to audeering/audeer that referenced this pull request Aug 5, 2026
Fix CI caching; bump checkout/setup-python off Node.js 20

setup-uv's cache keys on uv.lock/requirements*.txt, neither of which
exists here (no committed lockfile, by design), so caching never
actually worked. Bumped astral-sh/setup-uv v5 -> v9.0.0: v6.0.0 added
pyproject.toml to the default glob, which is committed and changes
exactly when a dependency does -- so caching now works with no
lockfile needed. Verified on CI: first run misses and saves a fresh
cache, as expected for a new key.

Also bumped actions/checkout, actions/setup-python, and
codecov/codecov-action to v7, clearing the "Node.js 20 is deprecated"
warning entirely. codecov-action's v5 rewrite dropped the `file`
input this workflow used; renamed to `files`, its replacement.

Left `prune-cache` at its new default (off): per astral-sh/setup-uv#967,
pruning only pays off for huge pre-built wheels (e.g. torch), which
this repo doesn't have.
ChristianGeng added a commit to audeering/opensmile-python that referenced this pull request Aug 5, 2026
setup-uv's cache keys on uv.lock/requirements*.txt, neither of which
exists here (no committed lockfile, by design), so caching never
actually worked. Bumped astral-sh/setup-uv v4/v5 -> v9.0.0 (publish.yml
had both, in its two jobs): v9.0.0's default glob adds pyproject.toml,
which is committed and changes exactly when a dependency does -- so
caching now works with no lockfile needed.

Also bumped actions/checkout and actions/setup-python to v7 across all
four workflows, and codecov/codecov-action to v7 in test.yml, clearing
the "Node.js 20 is deprecated" warning entirely. codecov-action's v5
rewrite dropped the `file` input this workflow used; renamed to
`files`, its replacement.

Left `prune-cache` at its new default (off): opensmile-python's only
runtime dependencies are audobject and audinterface, with no
torch-scale binary wheels in the dependency tree, so per
astral-sh/setup-uv#967 pruning wouldn't pay off here either.

Documentation workflow fails on this branch too, but it's a
pre-existing, unrelated failure (hardcoded emodb v1.1.1, no longer
available -- see #133); merged per Hagen's go-ahead despite that
check being red.
ChristianGeng added a commit to audeering/audb that referenced this pull request Aug 5, 2026
setup-uv's cache keys on uv.lock/requirements*.txt, neither of which
exists here (no committed lockfile, by design), so caching never
actually worked. Bumped astral-sh/setup-uv v5 -> v9.0.0: v6.0.0 added
pyproject.toml to the default glob, which is committed and changes
exactly when a dependency does -- so caching now works with no
lockfile needed.

Also bumped actions/checkout, actions/setup-python, actions/cache,
and codecov/codecov-action to v7 (v6 for actions/cache), clearing
the "Node.js 20 is deprecated" warning entirely. codecov-action's
v5 rewrite dropped the `file` input this workflow used; renamed to
`files`, its replacement.

Left `prune-cache` at its new default (off): per astral-sh/setup-uv#967,
pruning only pays off for huge pre-built wheels (e.g. torch), which
this repo doesn't have.
max-sixty pushed a commit to max-sixty/tend that referenced this pull request Aug 9, 2026
Weekly `uses:` drift sweep, "ours alone" half: the hand-maintained
`.github/workflows/` files plus `.config/tend.yaml`. Nothing here ships
to adopters — the adopter-facing refs are split into their own PRs.

| Ref | Was | Now | Where |
|---|---|---|---|
| `actions/checkout` | v6 | v7 | ci, publish-site, pypi-release,
review-reviewers, worker-deploy |
| `actions/setup-node` | v4 | v7 | ci, publish-site, worker-deploy |
| `astral-sh/setup-uv` | v7 | v9.0.0 | ci, pypi-release |
| `astral-sh/setup-uv` | v6 | v9.0.0 | `.config/tend.yaml` `setup:` |
| `actions/upload-artifact` | v6 | v7 | pypi-release |
| `actions/download-artifact` | v7 | v8 | pypi-release |
| `pypa/gh-action-pypi-publish` | v1.13.0 | v1.14.2 | pypi-release |

The generated `tend-*.yaml` changes are the `setup:` bump landing
through `uvx tend@0.1.14 init` — one `setup-uv` line per workflow,
nothing else. Regenerating against the released 0.1.14 (not the in-tree
generator) keeps the `max-sixty/tend/claude@0.1.14` pin resolvable.
Nothing in CI checks that regen — `tend-install-test` only exists on an
install PR (`init --with-install-test`) and the nightly regen deletes it
— so it was verified by hand: `uvx tend@0.1.14 init` on this branch
leaves the tree unchanged.

Two things worth knowing rather than just merging past:

**`setup-uv` no longer publishes floating major tags.** v8.0.0 was the
first immutable release and dropped the moving `v8`/`v9` refs —
`astral-sh/setup-uv@v9` does not resolve. Hence the exact `@v9.0.0` pin,
which is a shape change from the `@v6`/`@v7` this repo used before;
future bumps of this action are full-version edits.

**`setup-uv` v9.0.0 flips `prune-cache` to `false` by default**
(astral-sh/setup-uv#967) to reduce load on PyPI infrastructure. Upstream
marked it breaking because it can raise Actions cache usage. That lands
in this repo's CI and in the generated tend workflows; the mitmproxy
cache in `claude/action.yaml` is a separate `actions/cache` entry and is
unaffected. If cache growth is unwelcome, `prune-cache: true` restores
the old behavior — say the word and I'll add it to `.config/tend.yaml`'s
`setup:` rather than hold the version back.

The other majors are routine: `checkout` v7 is dependency updates plus
PR-checkout input hardening; `setup-node` v7 is an ESM migration with
new `cache-primary-key`/`cache-matched-key` outputs and the dummy
`NODE_AUTH_TOKEN` export removed; `upload-artifact` v7 and
`download-artifact` v8 are runtime/dependency refreshes (v8 adds CJK
artifact-name support); `gh-action-pypi-publish` v1.14.2 is a
dependency-tree update whose visible piece is Twine 7, which is what
lets an sdist or wheel carrying core-metadata 2.5 upload at all.

Co-authored-by: tend-agent <270458913+tend-agent@users.noreply.github.com>
max-sixty pushed a commit to max-sixty/tend that referenced this pull request Aug 9, 2026
Weekly `uses:` drift sweep, adopter-facing half for
`astral-sh/setup-uv`: v6 → v9.0.0 in the generated `tend-install-test`
workflow (`generator/src/tend/workflows.py`) and in the commented
`setup:` example that both `docs/tend.example.yaml` and the install
skill's copy show adopters. The refs this repo runs itself move
separately in #920.

**No floating major tag.** v8.0.0 was `setup-uv`'s first immutable
release and dropped the moving major/minor refs —
`astral-sh/setup-uv@v9` does not resolve, only `@v9.0.0` does. That's a
shape change for anyone copying the example: future bumps are
full-version edits, not a major that drifts forward on its own.

What the three majors carry:

- **v7.0.0** — Node 20 → Node 24, hence "breaking" for self-hosted
runners that don't auto-update. Also removes the long-deprecated
`server-url` input, superseded by `manifest-file`. Neither the generated
workflow nor the example uses it.
- **v8.0.0** — immutable releases, plus removal of the old
`manifest-file` format (a new format replaces it) and the major/minor
tags above.
- **v9.0.0** — `prune-cache` now defaults to `false`, to reduce load on
PyPI infrastructure (astral-sh/setup-uv#967). Marked breaking because it
can raise an adopter's Actions cache usage. It's the one change here an
adopter might actually notice; `prune-cache: true` restores the old
behavior.

`tend-install-test` is a one-shot workflow (`init --with-install-test`)
that runs on PRs touching the generated files, so the exposure of the v9
cache change through *that* path is small — the wider surface is
adopters who copied the example `setup:` block.

Also relaxes the `setup-uv` assertion in
`test_install_test_workflow_shape` to be version-agnostic. The exact pin
is already covered byte-for-byte by the regtest output; asserting it a
second time meant every weekly bump edited two places to say the same
thing.

Co-authored-by: tend-agent <270458913+tend-agent@users.noreply.github.com>
phbaer pushed a commit to phbaer/ha-birthday-calendar that referenced this pull request Aug 9, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) | action | major | `v7` → `v9.0.0` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the warning logs for more information.

---

### Release Notes

<details>
<summary>astral-sh/setup-uv (astral-sh/setup-uv)</summary>

### [`v9.0.0`](https://github.com/astral-sh/setup-uv/releases/tag/v9.0.0): 🌈 Change `prune-cache` default to `false`

[Compare Source](astral-sh/setup-uv@v8.3.2...v9.0.0)

##### Changes

This release disables the default cache cache pruning to ease the load on the PyPi infrastructure.
Since users might experience more GitHub Actions cache usage which might result in higher costs this is marked as a breaking change. To read more on why we did this (now) you can read the detailed analysis and reasoning in [#&#8203;967](astral-sh/setup-uv#967)

Besides this big breaking change we also have a small bugfix while building caches for linux distributions that behave a big different than the "big ones" and a speed up in version resolution by only reading the version manifest until a matching version is found saving runtime and network bandwith.

##### 🚨 Breaking changes

- Change `prune-cache` default to `false` [@&#8203;charliermarsh](https://github.com/charliermarsh) ([#&#8203;967](astral-sh/setup-uv#967))

##### 🐛 Bug fixes

- fix: fall back to distribution ID when os-release has no version field [@&#8203;cxzhong](https://github.com/cxzhong) ([#&#8203;961](astral-sh/setup-uv#961))

##### 🚀 Enhancements

- Speed up version client by partial response reads [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;807](astral-sh/setup-uv#807))

##### 🧰 Maintenance

- chore: update known checksums for 0.11.30 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;968](astral-sh/setup-uv#968))
- chore: update known checksums for 0.11.29 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;960](astral-sh/setup-uv#960))

##### 📚 Documentation

- docs: update version references to v8.3.2 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;949](astral-sh/setup-uv#949))

##### ⬆️ Dependency updates

- chore(deps): roll up Dependabot updates [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;970](astral-sh/setup-uv#970))
- chore(deps): roll up Dependabot updates [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;962](astral-sh/setup-uv#962))

### [`v8.3.2`](https://github.com/astral-sh/setup-uv/releases/tag/v8.3.2): 🌈 update known checksums for 0.11.28

[Compare Source](astral-sh/setup-uv@v8.3.1...v8.3.2)

##### Changes

Just a maintenance release

##### 🧰 Maintenance

- chore: update known checksums for 0.11.28 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;947](astral-sh/setup-uv#947))

##### 📚 Documentation

- docs: update version references to v8.3.1 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;946](astral-sh/setup-uv#946))

##### ⬆️ Dependency updates

- chore: roll up Dependabot updates [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;948](astral-sh/setup-uv#948))

### [`v8.3.1`](https://github.com/astral-sh/setup-uv/releases/tag/v8.3.1): 🌈 update known checksums for 0.11.27

[Compare Source](astral-sh/setup-uv@v8.3.0...v8.3.1)

##### Changes

Just a maintenance release

##### 🧰 Maintenance

- Change update-docs PR labels from 'update-docs' to 'documentation' [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;945](astral-sh/setup-uv#945))
- chore: update known checksums for 0.11.27 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;944](astral-sh/setup-uv#944))

##### 📚 Documentation

- docs: update version references to v8.3.0 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;939](astral-sh/setup-uv#939))

### [`v8.3.0`](https://github.com/astral-sh/setup-uv/releases/tag/v8.3.0): 🌈 Support uv.lock as a version-file source

[Compare Source](astral-sh/setup-uv@v8.2.0...v8.3.0)

##### Changes

Thanks to [@&#8203;somaz94](https://github.com/somaz94) you can now use the pinned version of uv itself in `uv.lock`. It gets picked up automatically.
If you have pinned another version of uv in your `uv.lock` you can use the inputs `version` or `version-source` to override this.

##### 🐛 Bug fixes

- Strip environment markers from detected uv dependency pins [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;938](astral-sh/setup-uv#938))
- Fix cache keys for Python version ranges [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;937](astral-sh/setup-uv#937))
- fix: use BUILD\_ID as backup for determining os version [@&#8203;hgaiser](https://github.com/hgaiser) ([#&#8203;912](astral-sh/setup-uv#912))

##### 🚀 Enhancements

- feat: support uv.lock as a version-file source [@&#8203;somaz94](https://github.com/somaz94) ([#&#8203;918](astral-sh/setup-uv#918))

##### 🧰 Maintenance

- ci: call docs update workflow from release [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;933](astral-sh/setup-uv#933))
- chore: update known checksums for 0.11.26 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;930](astral-sh/setup-uv#930))
- chore: update known checksums for 0.11.25 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;929](astral-sh/setup-uv#929))
- chore: update known checksums for 0.11.24 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;925](astral-sh/setup-uv#925))
- chore: update known checksums for 0.11.23 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;922](astral-sh/setup-uv#922))
- chore: update known checksums for 0.11.22 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;921](astral-sh/setup-uv#921))
- chore: update known checksums for 0.11.21 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;917](astral-sh/setup-uv#917))
- chore: update known checksums for 0.11.20 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;915](astral-sh/setup-uv#915))
- chore: update known checksums for 0.11.19 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;909](astral-sh/setup-uv#909))

##### 📚 Documentation

- docs: update version references to v8.2.0 [@&#8203;KRRT7](https://github.com/KRRT7) ([#&#8203;932](astral-sh/setup-uv#932))
- Add a threat model for setup-uv [@&#8203;zsol](https://github.com/zsol) ([#&#8203;923](astral-sh/setup-uv#923))

##### ⬆️ Dependency updates

- chore(deps): roll up Dependabot updates [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;936](astral-sh/setup-uv#936))
- chore(deps): bump release-drafter/release-drafter from 7.3.1 to 7.4.0 @&#8203;[dependabot\[bot\]](https://github.com/apps/dependabot) ([#&#8203;924](astral-sh/setup-uv#924))
- chore(deps): bump actions/checkout from 6.0.2 to 7.0.0 @&#8203;[dependabot\[bot\]](https://github.com/apps/dependabot) ([#&#8203;926](astral-sh/setup-uv#926))

### [`v8.2.0`](https://github.com/astral-sh/setup-uv/releases/tag/v8.2.0): 🌈 New inputs `quiet` and `download-from-astral-mirror`

[Compare Source](astral-sh/setup-uv@v8.1.0...v8.2.0)

##### Changes

This release brings two new inputs and a few bug fixes.

##### New inputs

Lets talk about the new inputs first.

##### quiet

Pretty simple. It turns of all `info` loggings. Useful if you use this in a composite action and are not interested in all the details.
In the upcoming releases we will add log groups to fully implement support for "less noise"

> \[!NOTE]\
> Warnings and errors are always logged.

##### download-from-astral-mirror

In some cases you may want to directly use the fallback of checking for available versions and downloading releases from GitHub instead of using the astral.sh mirror. Setting `download-from-astral-mirror: false` allows you to do that.

##### Bugfixes

When using the astral.sh mirror to query available versions and download releases (done by default) we now stop sending the GitHub token in the header. The mirror never looked at it but we shouldn't be handing out that data even if it is just a short lived token.
All other bugfixes try to limit the impact of failed GitHub queries due to retries and other faults.

We couldn't pinpoint all rootcauses yet but added more logging for error cases to track them down.

##### 🐛 Bug fixes

- fix: report unexpected cache save failures [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;896](astral-sh/setup-uv#896))
- fix: report unexpected setup failures [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;895](astral-sh/setup-uv#895))
- fix: add timeout to fetch to prevent silent hangs [@&#8203;eifinger-bot](https://github.com/eifinger-bot) ([#&#8203;883](astral-sh/setup-uv#883))
- Limit GitHub tokens to github.com download URLs [@&#8203;zsol](https://github.com/zsol) ([#&#8203;878](astral-sh/setup-uv#878))
- increase libuv-workaround timeout to 100ms [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;880](astral-sh/setup-uv#880))

##### 🚀 Enhancements

- Add quiet input to suppress info-level log output [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;898](astral-sh/setup-uv#898))
- feat: add `download-from-astral-mirror` input [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;897](astral-sh/setup-uv#897))

##### 🧰 Maintenance

- docs: update dependabot rollup biome guidance [@&#8203;eifinger](https://github.com/eifinger) ([#&#8203;902](astral-sh/setup-uv#902))
- chore: update known checksums for 0.11.18 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;899](astral-sh/setup-uv#899))
- chore: update known checksums for 0.11.17 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;892](astral-sh/setup-uv#892))
- chore: update known checksums for 0.11.16 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;889](astral-sh/setup-uv#889))
- chore: update known checksums for 0.11.15 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;885](astral-sh/setup-uv#885))
- chore: update known checksums for 0.11.14 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;879](astral-sh/setup-uv#879))
- chore: update known checksums for 0.11.13 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;877](astral-sh/setup-uv#877))
- chore: update known checksums for 0.11.12 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;876](astral-sh/setup-uv#876))
- chore: update known checksums for 0.11.11 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;873](astral-sh/setup-uv#873))
- chore: update known checksums for 0.11.9/0.11.10 @&#8203;[github-actions\[bot\]](https://github.com/apps/github-actions) ([#&#8203;871](astral-sh/setup-uv#871))
- chore: update known checksums for 0.11.8 @&#8203;[github-actions\[bot\]](