Skip to content

Comments

Add brew specific message for uv self update#16838

Merged
zanieb merged 3 commits intoastral-sh:mainfrom
terror:self-update-brew
Dec 4, 2025
Merged

Add brew specific message for uv self update#16838
zanieb merged 3 commits intoastral-sh:mainfrom
terror:self-update-brew

Conversation

@terror
Copy link
Contributor

@terror terror commented Nov 24, 2025

Resolves #16833

uv self update could error with a better message if it knows the user has installed it with brew. This diff adds an InstallSource we can use the detect where a uv binary comes from and augment error messages with better context. We're only adding brew for now, but it could easily be extend with other detection heuristics.

@zanieb
Copy link
Member

zanieb commented Nov 24, 2025

Running the external tool to perform the update seems interesting but can definitely happen after / separately.

Maybe it's worth looking at what tailscale does?

@zanieb zanieb closed this Nov 24, 2025
@zanieb zanieb reopened this Nov 24, 2025
@zanieb
Copy link
Member

zanieb commented Nov 24, 2025

(sorry wrong button)

@terror
Copy link
Contributor Author

terror commented Nov 24, 2025

Running the external tool to perform the update seems interesting but can definitely happen after / separately.

Maybe it's worth looking at what tailscale does?

Yeah I'll follow up with this!

@konstin konstin added the error messages Messaging when something goes wrong label Nov 26, 2025
@terror
Copy link
Contributor Author

terror commented Dec 4, 2025

@zanieb Was there something else blocking this?

"{base}",
"\n",
"\n",
"hint: You installed uv using {}. To update uv, run:\n `{}`"
Copy link
Member

Choose a reason for hiding this comment

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

This still doesn't match our usual hint styling, e.g.,

"{}{} `{name}` is a development dependency (try: `{}`)",
"hint".bold().cyan(),
":".bold(),

@zanieb zanieb merged commit ee6e3be into astral-sh:main Dec 4, 2025
102 checks passed
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Dec 12, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [astral-sh/uv](https://github.com/astral-sh/uv) | patch | `0.9.13` -> `0.9.17` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

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

### [`v0.9.17`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0917)

[Compare Source](astral-sh/uv@0.9.16...0.9.17)

Released on 2025-12-09.

##### Enhancements

- Add `torch-tensorrt` and `torchao` to the PyTorch list ([#&#8203;17053](astral-sh/uv#17053))
- Add hint for misplaced `--verbose`  in `uv tool run` ([#&#8203;17020](astral-sh/uv#17020))
- Add support for relative durations in `exclude-newer` (a.k.a., dependency cooldowns) ([#&#8203;16814](astral-sh/uv#16814))
- Add support for relocatable nushell activation script ([#&#8203;17036](astral-sh/uv#17036))

##### Bug fixes

- Respect dropped (but explicit) indexes in dependency groups ([#&#8203;17012](astral-sh/uv#17012))

##### Documentation

- Improve `source-exclude` reference docs ([#&#8203;16832](astral-sh/uv#16832))
- Recommend `UV_NO_DEV` in Docker installs ([#&#8203;17030](astral-sh/uv#17030))
- Update `UV_VERSION` in docs for GitLab CI/CD ([#&#8203;17040](astral-sh/uv#17040))

### [`v0.9.16`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0916)

[Compare Source](astral-sh/uv@0.9.15...0.9.16)

Released on 2025-12-06.

##### Python

- Add CPython 3.14.2
- Add CPython 3.13.11

##### Enhancements

- Add a 5m default timeout to acquiring file locks to fail faster on deadlock ([#&#8203;16342](astral-sh/uv#16342))
- Add a stub `debug` subcommand to `uv pip` announcing its intentional absence ([#&#8203;16966](astral-sh/uv#16966))
- Add bounds in `uv add --script` ([#&#8203;16954](astral-sh/uv#16954))
- Add brew specific message for `uv self update` ([#&#8203;16838](astral-sh/uv#16838))
- Error when built wheel is for the wrong platform ([#&#8203;16074](astral-sh/uv#16074))
- Filter wheels from PEP 751 files based on `--no-binary` et al in `uv pip compile` ([#&#8203;16956](astral-sh/uv#16956))
- Support `--target` and `--prefix` in `uv pip list`, `uv pip freeze`, and `uv pip show` ([#&#8203;16955](astral-sh/uv#16955))
- Tweak language for build backend validation errors ([#&#8203;16720](astral-sh/uv#16720))
- Use explicit credentials cache instead of global static ([#&#8203;16768](astral-sh/uv#16768))
- Enable SIMD in HTML parsing ([#&#8203;17010](astral-sh/uv#17010))

##### Preview features

- Fix missing preview warning in `uv workspace metadata` ([#&#8203;16988](astral-sh/uv#16988))
- Add a `uv auth helper --protocol bazel` command ([#&#8203;16886](astral-sh/uv#16886))

##### Bug fixes

- Fix Pyston wheel compatibility tags ([#&#8203;16972](astral-sh/uv#16972))
- Allow redundant entries in `tool.uv.build-backend.module-name` but emit warnings ([#&#8203;16928](astral-sh/uv#16928))
- Fix infinite loop in non-attribute re-treats during HTML parsing ([#&#8203;17010](astral-sh/uv#17010))

##### Documentation

- Clarify `--project` flag help text to indicate project discovery ([#&#8203;16965](astral-sh/uv#16965))
- Regenerate the crates.io READMEs on release ([#&#8203;16992](astral-sh/uv#16992))
- Update Docker integration guide to prefer `COPY` over `ADD` for simple cases ([#&#8203;16883](astral-sh/uv#16883))
- Update PyTorch documentation to include information about supporting CUDA 13.0.x ([#&#8203;16957](astral-sh/uv#16957))
- Update the versioning policy ([#&#8203;16710](astral-sh/uv#16710))
- Upgrade PyTorch documentation to latest versions ([#&#8203;16970](astral-sh/uv#16970))

### [`v0.9.15`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0915)

[Compare Source](astral-sh/uv@0.9.14...0.9.15)

Released on 2025-12-02.

##### Python

- Add CPython 3.14.1
- Add CPython 3.13.10

##### Enhancements

- Add ROCm 6.4 to `--torch-backend=auto` ([#&#8203;16919](astral-sh/uv#16919))
- Add a Windows manifest to uv binaries ([#&#8203;16894](astral-sh/uv#16894))
- Add LFS toggle to Git sources ([#&#8203;16143](astral-sh/uv#16143))
- Cache source reads during resolution ([#&#8203;16888](astral-sh/uv#16888))
- Allow reading requirements from scripts without an extension ([#&#8203;16923](astral-sh/uv#16923))
- Allow reading requirements from scripts with HTTP(S) paths ([#&#8203;16891](astral-sh/uv#16891))

##### Configuration

- Add `UV_HIDE_BUILD_OUTPUT` to omit build logs ([#&#8203;16885](astral-sh/uv#16885))

##### Bug fixes

- Fix `uv-trampoline-builder` builds from crates.io by moving bundled executables ([#&#8203;16922](astral-sh/uv#16922))
- Respect `NO_COLOR` and always show the command as a header when paging `uv help` output ([#&#8203;16908](astral-sh/uv#16908))
- Use `0o666` permissions for flock files instead of `0o777` ([#&#8203;16845](astral-sh/uv#16845))
- Revert "Bump `astral-tl` to v0.7.10 ([#&#8203;16887](astral-sh/uv#16887))" to narrow down a regression causing hangs in metadata retrieval ([#&#8203;16938](astral-sh/uv#16938))

##### Documentation

- Link to the uv version in crates.io member READMEs ([#&#8203;16939](astral-sh/uv#16939))

### [`v0.9.14`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0914)

[Compare Source](astral-sh/uv@0.9.13...0.9.14)

Released on 2025-12-01.

##### Performance

- Bump `astral-tl` to v0.7.10 to enable SIMD for HTML parsing ([#&#8203;16887](astral-sh/uv#16887))

##### Bug fixes

- Allow earlier post releases with exclusive ordering ([#&#8203;16881](astral-sh/uv#16881))
- Prefer updating existing `.zshenv` over creating a new one in `tool update-shell` ([#&#8203;16866](astral-sh/uv#16866))
- Respect `-e` flags in `uv add` ([#&#8203;16882](astral-sh/uv#16882))

##### Enhancements

- Attach subcommand to User-Agent string ([#&#8203;16837](astral-sh/uv#16837))
- Prefer `UV_WORKING_DIR` over `UV_WORKING_DIRECTORY` for consistency ([#&#8203;16884](astral-sh/uv#16884))

</details>

---

### Configuration

📅 **Schedule**: 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 MR becomes conflicted, or you tick the rebase/retry checkbox.

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

---

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

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4yNy4xIiwidXBkYXRlZEluVmVyIjoiNDIuNDAuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
shaanmajid added a commit to shaanmajid/prek that referenced this pull request Feb 3, 2026
Detects how prek was installed (Homebrew or Cargo) by inspecting the
executable path, then provides actionable upgrade hints when:

- `prek self update` fails (not installed via standalone scripts)
- `minimum_prek_version` isn't satisfied

Detection heuristics:
- Homebrew: path contains `/Cellar/prek/`
- Cargo: path contains `/.cargo/bin/`

Based on astral-sh/uv#16838.
j178 added a commit to j178/prek that referenced this pull request Feb 3, 2026
Detects how prek was installed (Homebrew or Cargo) by inspecting the
executable path, then provides actionable upgrade hints when:

- `prek self update` fails because prek wasn't installed via standalone
scripts
- `minimum_prek_version` isn't satisfied

Based largely on the approach uv implemented in
[astral-sh/uv#16838](astral-sh/uv#16838).

Detection heuristics:
- Homebrew: path contains `/Cellar/prek/`
- Cargo: path contains `/.cargo/bin/`

Example output:
```console
error: prek was installed via an external package manager and cannot self-update.
hint: You installed prek via Homebrew. To update, run brew update && brew upgrade prek
```

See discussion in #1490 for further context.

---------

Co-authored-by: Jo <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

error messages Messaging when something goes wrong

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make "uv self update" friendlier

5 participants