Commit Graph

8001 Commits

Author SHA1 Message Date
liam 79bfa2b4cd
Preserve end-of-line comment whitespace when editing `pyproject.toml` (#16734)
Resolves https://github.com/astral-sh/uv/issues/16719

`uv add` collapses multiple spaces before inline comments in
`[project.dependencies]`, causing unrelated diffs and moving comments
onto the wrong columns. This diff captures the exact whitespace padding
that preceded each end-of-line comment when parsing the array and reuses
it when formatting.

---------

Co-authored-by: konstin <konstin@mailbox.org>
2025-11-20 20:15:27 +01:00
liam 5b4446f086
Fix `uv init` author serialization via `toml_edit` inline tables (#16778) 2025-11-20 14:10:12 -05:00
Zanie Blue 75bd2ea0c5
Move do not upload publish note out of the guide into concepts (#16789)
This feels a little out of place here and it seems nice to be able to
link to it.
2025-11-20 12:33:15 -06:00
Tom Schafer fd7e6d0a05
Add SBOM export support (#16523)
Co-authored-by: Will Rollason <william.rollason@snyk.io>
2025-11-20 12:52:31 -05:00
pythonweb2 7d8634bf35
Document the new behavior for free-threaded python versions (#16781)
## Summary

I noticed that after first installing the free-threaded version, then
the gil version of 3.14, I wasn't able
to install greenlet, because it doesn't ship with wheels for the
free-threaded version (I think it isn't
safe for it to use that interpreter). I noticed that the change made in
3.14 wasn't updated in the docs.

## Test Plan

N/A

---------

Co-authored-by: Wade Roberts <wade.roberts@centralsquare.com>
Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-11-20 08:58:49 -06:00
Ryan Blue 4a867dc60b
Fix status messages without TTY (#16785)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

#12175 changed the behavior of `on_request_complete` when stderr is not
a tty to output `Downloading`/`Uploading` (via `Direction::as_str`).
This fixes it to output `Downloaded`/`Uploaded` again.

## Test Plan

Tested locally to verify new output.

Old:
```
$ uv sync --no-cache 2>&1 | tee /dev/null
Using CPython 3.14.0
Creating virtual environment at: .venv
Resolved 12 packages in 19ms
Downloading numpy (15.8MiB)
Downloading matplotlib (9.4MiB)
Downloading fonttools (4.6MiB)
Downloading pillow (6.7MiB)
Downloading kiwisolver (1.4MiB)
 Downloading kiwisolver
 Downloading fonttools
 Downloading pillow
 Downloading matplotlib
 Downloading numpy
```
New:
```
$ uv sync --no-cache 2>&1 | tee /dev/null
Using CPython 3.14.0
Creating virtual environment at: .venv
Resolved 12 packages in 3ms
Downloading numpy (15.8MiB)
Downloading fonttools (4.6MiB)
Downloading matplotlib (9.4MiB)
Downloading kiwisolver (1.4MiB)
Downloading pillow (6.7MiB)
 Downloaded kiwisolver
 Downloaded pillow
 Downloaded fonttools
 Downloaded matplotlib
 Downloaded numpy
```
2025-11-20 15:14:42 +01:00
Zanie Blue fc0cf90795
Fix the preview warning on `uv workspace dir` (#16775) 2025-11-19 13:20:25 -06:00
Zanie Blue 3ac43e8d15
Disable always-authenticate when running under Dependabot (#16773)
Dependabot appears to run a proxy which intercepts all requests and adds
credentials — credentials are _not_ provided via the CLI or environment
variables and there's no way for a user to do so. This means that when
`authenticate = "always"` is used (or when the index URL is on a pyx
domain), uv will fail even though Dependabot may intercept the request
and add credentials.

See
https://github.com/dependabot/dependabot-core/#private-registry-credential-management
2025-11-18 15:43:44 -06:00
renovate[bot] 0e88114882
Update dependency astral-sh/uv to v0.9.10 (#16753)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [astral-sh/uv](https://redirect.github.com/astral-sh/uv) | uses-with |
patch | `0.9.8` -> `0.9.10` |

---

### Release Notes

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

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

[Compare
Source](https://redirect.github.com/astral-sh/uv/compare/0.9.9...0.9.10)

Released on 2025-11-17.

##### Enhancements

- Add support for `SSL_CERT_DIR`
([#&#8203;16473](https://redirect.github.com/astral-sh/uv/pull/16473))
- Enforce UTF‑8-encoded license files during `uv build`
([#&#8203;16699](https://redirect.github.com/astral-sh/uv/pull/16699))
- Error when a `project.license-files` glob matches nothing
([#&#8203;16697](https://redirect.github.com/astral-sh/uv/pull/16697))
- `pip install --target` (and `sync`) install Python if necessary
([#&#8203;16694](https://redirect.github.com/astral-sh/uv/pull/16694))
- Account for `python_downloads_json_url` in pre-release Python version
warnings
([#&#8203;16737](https://redirect.github.com/astral-sh/uv/pull/16737))
- Support HTTP/HTTPS URLs in `uv python --python-downloads-json-url`
([#&#8203;16542](https://redirect.github.com/astral-sh/uv/pull/16542))

##### Preview features

- Add support for `--upgrade` in `uv python install`
([#&#8203;16676](https://redirect.github.com/astral-sh/uv/pull/16676))
- Fix handling of `python install --default` for pre-release Python
versions
([#&#8203;16706](https://redirect.github.com/astral-sh/uv/pull/16706))
- Add `uv workspace list` to list workspace members
([#&#8203;16691](https://redirect.github.com/astral-sh/uv/pull/16691))

##### Bug fixes

- Don't check file URLs for ambiguously parsed credentials
([#&#8203;16759](https://redirect.github.com/astral-sh/uv/pull/16759))

##### Documentation

- Add a "storage" reference document
([#&#8203;15954](https://redirect.github.com/astral-sh/uv/pull/15954))

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

[Compare
Source](https://redirect.github.com/astral-sh/uv/compare/0.9.8...0.9.9)

Released on 2025-11-12.

##### Deprecations

- Deprecate use of `--project` in `uv init`
([#&#8203;16674](https://redirect.github.com/astral-sh/uv/pull/16674))

##### Enhancements

- Add iOS support to Python interpreter discovery
([#&#8203;16686](https://redirect.github.com/astral-sh/uv/pull/16686))
- Reject ambiguously parsed URLs
([#&#8203;16622](https://redirect.github.com/astral-sh/uv/pull/16622))
- Allow explicit values in `uv version --bump`
([#&#8203;16555](https://redirect.github.com/astral-sh/uv/pull/16555))
- Warn on use of managed pre-release Python versions when a stable
version is available
([#&#8203;16619](https://redirect.github.com/astral-sh/uv/pull/16619))
- Allow signing trampolines on Windows by using `.rcdata` to store
metadata
([#&#8203;15068](https://redirect.github.com/astral-sh/uv/pull/15068))
- Add `--only-emit-workspace` and similar variants to `uv export`
([#&#8203;16681](https://redirect.github.com/astral-sh/uv/pull/16681))

##### Preview features

- Add `uv workspace dir` command
([#&#8203;16678](https://redirect.github.com/astral-sh/uv/pull/16678))
- Add `uv workspace metadata` command
([#&#8203;16516](https://redirect.github.com/astral-sh/uv/pull/16516))

##### Configuration

- Add `UV_NO_DEFAULT_GROUPS` environment variable
([#&#8203;16645](https://redirect.github.com/astral-sh/uv/pull/16645))

##### Bug fixes

- Remove `torch-model-archiver` and `torch-tb-profiler` from PyTorch
backend
([#&#8203;16655](https://redirect.github.com/astral-sh/uv/pull/16655))
- Fix Pixi environment detection
([#&#8203;16585](https://redirect.github.com/astral-sh/uv/pull/16585))

##### Documentation

- Fix `CMD` path in FastAPI Dockerfile
([#&#8203;16701](https://redirect.github.com/astral-sh/uv/pull/16701))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM, only on
Monday ( * 0-3 * * 1 ) (UTC), 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/uv).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNzMuMSIsInVwZGF0ZWRJblZlciI6IjQxLjE3My4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJpbnRlcm5hbCJdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-18 18:46:15 +01:00
William Woodruff f78ddf05c4
Add an integration test for publishing to pyx (#16740) 2025-11-18 12:13:57 -05:00
William Woodruff 512c0ca5ed
Open PRs as drafts for sync-python-releases (#16763)
## Summary

This is a little goofy, but it saves us a click: when automation PRs are
opened as drafts, they don't need to be cycled through closed/opened to
force the CI to run. Instead, once undrafted the CI runs.

See #16505 for an example of the closed/opened cycle hack this avoids.

## Test Plan

No functional changes besides CI automation.

Signed-off-by: William Woodruff <william@astral.sh>
2025-11-17 15:04:10 -06:00
Zanie Blue cda7fc3fda
Revert "Fix CMD path in FastAPI Dockerfile (#16701)" (#16752)
This reverts commit 92230ba679 from #16701

See https://github.com/astral-sh/uv/pull/16701#issuecomment-3538541379
2025-11-17 13:17:27 -06:00
konsti 44f5a14f40
Bump version to 0.9.10 (#16762)
Motivated by https://github.com/astral-sh/uv/pull/16759

Doesn't contain https://github.com/astral-sh/uv/pull/16752, but that one
doesn't seem critical
2025-11-17 16:29:14 +00:00
Zanie Blue 07e03ee776
Add `uv workspace list` to list workspace members (#16691)
I'm a little wary here, in the sense that it might be silly to have a
command that does something so simple that's covered by `uv workspace
metadata`? but I think this could be stabilized much faster than `uv
workspace metadata` and makes it easier to write scripts against
workspace members.

---------

Co-authored-by: liam <liam@scalzulli.com>
2025-11-17 09:35:50 -06:00
Zsolt Dollenstein 6f525f9462
Add a "storage" reference document (#15954)
Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-11-17 09:38:14 -05:00
konsti 2d75aca8e3
Don't check file URLs for ambiguously parsed URLs (#16759)
Fixes https://github.com/astral-sh/uv/issues/16756
Follow-up for https://github.com/astral-sh/uv/pull/16622

I noticed that rustfmt couldn't handle the check, so I moved the code
around in the first two commits.
2025-11-17 14:16:13 +00:00
renovate[bot] 163729ecc3
Update Rust crate indicatif to v0.18.3 (#16754)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [indicatif](https://redirect.github.com/console-rs/indicatif) |
workspace.dependencies | patch | `0.18.2` -> `0.18.3` |

---

### Release Notes

<details>
<summary>console-rs/indicatif (indicatif)</summary>

###
[`v0.18.3`](https://redirect.github.com/console-rs/indicatif/releases/tag/0.18.3)

[Compare
Source](https://redirect.github.com/console-rs/indicatif/compare/0.18.2...0.18.3)

#### What's Changed

- Add ProgressBar::set\_elapsed by
[@&#8203;sunshowers](https://redirect.github.com/sunshowers) in
[#&#8203;742](https://redirect.github.com/console-rs/indicatif/pull/742)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM, only on
Monday ( * 0-3 * * 1 ) (UTC), 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/uv).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNzMuMSIsInVwZGF0ZWRJblZlciI6IjQxLjE3My4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJpbnRlcm5hbCJdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-17 13:23:12 +01:00
samypr100 bf99f0a195
Add support for SSL_CERT_DIR (#16473)
## Summary

Closes https://github.com/astral-sh/uv/issues/16414

Adds support for the standard
[SSL_CERT_DIR](https://docs.openssl.org/3.6/man3/SSL_CTX_load_verify_locations)
which has gained recent proper support from
[rustls-native-certs](https://github.com/rustls/rustls-native-certs/pull/187)
in v0.8.2.

In addition, this PR clarifies documentation around `SSL_CERT_FILE` and
`SSL_CERT_DIR` when used in combination with `UV_NATIVE_TLS` as
mentioned in
https://github.com/astral-sh/uv/issues/16412#issuecomment-3434927201

## Test Plan

Manually tested with custom cert chains in multiple directories and
loading them via SSL_CERT_DIR. We didn't have tests for `SSL_CERT_FILE`
or `SSL_CERT_DIR` environment variables so I added a basic one using our
own test-only certificate generation and dummy https server. I also
moved some things around for better reuse.
2025-11-16 11:48:31 -06:00
Meitar Reihan b9826778b9
Support http/https URLs in `uv python --python-downloads-json-url` (#16542)
continuation PR based on #14687

---------

Co-authored-by: Geoffrey Thomas <geofft@ldpreload.com>
Co-authored-by: Aria Desires <aria.desires@gmail.com>
2025-11-14 17:51:24 -05:00
Meitar Reihan 7f4d8c67a8
Account for `python_downloads_json_url` on Pre-release Python version warnings (#16737)
Solves #16711
2025-11-14 15:12:35 -06:00
konsti 4e4235648a
Use crates.io async_zip fork (#16742)
Migrate to our fork on crates.io.
2025-11-14 20:15:54 +01:00
konsti 56b0db3359
Use crates.io pubgrub fork (#16725)
Migrate pubgrub and version-ranges from a Git dependency to our fork on
crates.io.
2025-11-14 17:56:37 +00:00
konsti 181262bdbd
Use crates.io reqwest-middleware fork (#16738)
Requires forking async_http_range_reader too and a new ambient-id
release.
2025-11-14 18:43:25 +01:00
liam 1a14d595fd
Error when a `project.license-files` glob matches nothing (#16697)
Resolves https://github.com/astral-sh/uv/issues/16693

[`PEP 639`](https://peps.python.org/pep-0639/#add-license-files-key)
requires build tools to error if any user-specified
`project.license-files` glob fails to match a file, but uv currently
allows the build to succeed and produces empty `.dist-info/licenses/`
directories.

This PR enforces the spec by tracking matches for each glob during
metadata generation, raising a clear
validation error when one is unmatched.
2025-11-14 11:02:04 +01:00
Zanie Blue f5ce5b47c8
Add support for `--upgrade` in `uv python install` (#16676)
This allows us to suggest `uv python install --upgrade 3.14` as the
canonical way to get the latest patch version of a given Python
regardless of whether it is installed already. Currently, you can do `uv
python upgrade 3.14` and it will install it, but I'd like to remove that
behavior as I find it very surprising.
2025-11-13 09:55:48 -06:00
liam e28dc62358
Enforce UTF‑8-encoded license files during `uv build` (#16699)
I noticed this when working on
https://github.com/astral-sh/uv/pull/16697.

[PEP 639](https://peps.python.org/pep-0639/#add-license-files-key)
expects tools to ship license texts as UTF‑8, but previously `uv build`
would quietly include any binary blob listed under
`project.license-files`.

I have no clue what is going on with `rustfmt` for this file, but it
seems that when I add the check, it wants to reformat a bunch of
surrounding stuff.

The relevant part to look at is:

```rust
for license_file in &license_files {
    let file_path = root.join(license_file);
    let bytes = fs_err::read(&file_path)?;
    if str::from_utf8(&bytes).is_err() {
        return Err(ValidationError::LicenseFileNotUtf8(license_file.clone()).into());
    }
}
```

where we validate all collected license files before proceeding.

---------

Co-authored-by: konstin <konstin@mailbox.org>
2025-11-13 12:49:59 +00:00
CatBraaain c167146f8c
refactor: update deprecated renovate schedule syntax (#16717)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

Related issue: none
This is a minor change; no issue is associated. Please let me know if
one is required.

## Summary
Update deprecated renovate schedule syntax
```diff
- schedule: ["before 4am on Monday"],
+ schedule: ["* 0-3 * * 1"],
```

<!-- What's the purpose of the change? What does it do, and why? -->
## Rationale
- Deprecated: Renovate plans to remove the @breejs/later library, so
cron syntax is recommended.
- Time range: at least 3-4 hours recommended for any schedule.

References:
- [Deprecated later
syntax](https://docs.renovatebot.com/key-concepts/scheduling/#deprecated-breejslater-syntax)
- [Schedule
options](https://docs.renovatebot.com/configuration-options/#schedule)


## Test Plan
<!-- How was it tested? -->
- Cron syntax verified on
[crontab.guru](https://crontab.guru/#*_0-3_*_*_1)
- Behavior in Renovate not testable directly
2025-11-13 10:52:19 +01:00
Mikayla Thompson 88811553e4
`pip install --target` (and `sync`) install python if necessary (#16694)
## Summary

As described in https://github.com/astral-sh/uv/issues/12229, `pip
install` with `--target` or `--prefix` seem like they should install the
necessary python version if it doesn't exist, but they currently don't.

Most minimal reproduction is something like:
```
> uv python uninstall 3.13
...
> uv pip install anyio --target target-dir --python 3.13
error: No interpreter found for Python 3.13 in virtual environments, managed installations, or search path
```

This also fails without `--target`, but a venv is expected in that case,
so the with `--target`/`--prefix` is the only version that needs to be
fixed. The same mechanism occurs for `uv pip sync` as well.

## Test Plan

Added tests for install and sync that failed before fix and now pass.

---------

Signed-off-by: Mikayla Thompson <mrt@mikayla.codes>
2025-11-12 15:42:52 -07:00
Oshadha Gunawardena aec42540a1
Fix handling of `python install --default` for pre-release Python versions (#16706)
## Summary

Fixes `--default` not creating default executable links for pre-release
Python versions.

When using `--default` with a pre-release version like `3.15.0a1`, the
code was checking `matches_installation()` against the download request
instead of the original user request. This caused the check to fail
since the download request doesn't match pre-release versions the same
way.

Changed it to use `installation.satisfies(&first_request.request)` when
`--default` is used, which checks against the original user request.

Fixes #16696

## Test Plan

Added `python_install_default_prerelease` test that installs Python 3.15
with `--default` and verifies all three executable links (`python3.15`,
`python3`, `python`) are created. The test skips gracefully if 3.15
isn't available.

All existing tests pass.
2025-11-12 12:33:58 -06:00
Zanie Blue 4fac4cb7ed
Bump version to 0.9.9 (#16708) 2025-11-12 18:14:44 +00:00
Zsolt Dollenstein e96354a6dd
Always attach linehaul data (#16705) 2025-11-12 17:10:15 +00:00
Charlie Marsh 2c0d166260
Add `only-emit-workspace` and similar variants to `uv export` (#16681)
## Summary

This is useful for scenarios in which you want to emit the workspace
dependencies, but nothing else.
2025-11-12 16:51:45 +00:00
William Woodruff ae1edef9c0
Reject ambiguously parsed URLs (#16622)
Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-11-12 16:27:57 +00:00
bigmoonbit 82c612704a
chore: fix typo in crates/uv-virtualenv/README.md (#16700)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

fix typo in crates/uv-virtualenv/README.md


<!-- What's the purpose of the change? What does it do, and why? -->

## Test Plan

<!-- How was it tested? -->

No need.

Signed-off-by: bigmoonbit <bigmoonbit@outlook.com>
2025-11-12 09:45:37 -06:00
Zsolt Dollenstein c16a5fd630
Fix shell-specific test snapshots (#16688)
## Summary

Two tests were failing when run with `SHELL=fish`:
1. `create_venv_current_working_directory` failed because the "activate"
filter didn't apply properly when the venv was in the CWD. This PR fixes
the filter.
2. `tool_install_warn_path` failed because the messages are different
between fish and bash. This PR hardcodes `SHELL=fish`.

## Test Plan

CI
2025-11-12 07:55:33 -06:00
liam d32cc638d1
Deny stdout/stderr printing in `uv` crate via clippy (#16695)
Follow-up from https://github.com/astral-sh/uv/pull/16690, in `uv` every
command should be using `write!(...)/writeln!(...)` with the `Printer`
abstraction instead of bypassing control with the standard printing
functions. This lint ensures that.
2025-11-12 07:54:52 -06:00
Zsolt Dollenstein 2de987ed37
Skip python_install_emulated_macos except on ARM64 macos with rosetta (#16687)
## Summary

This test isn't useful on non-arm64 macs, and it outright fails if
rosetta isn't installed.

## Test Plan

Run it on my rosetta-stripped macbook
2025-11-12 07:48:16 -06:00
liam 1b38b47a3f
Warn on managed prerelease interpreters when a stable build is available (#16619)
Resolves https://github.com/astral-sh/uv/issues/16616

This PR detects managed prerelease interpreters during discovery and
warns when a matching stable build is available, wiring the new helper
into `PythonInstallation::find`, `find_best`, and `find_or_download`.
2025-11-12 07:45:31 -06:00
jspablo 92230ba679
Fix CMD path in FastAPI Dockerfile (#16701)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

Fix suggestion for uv when used with FastAPI and Docker.

## Test Plan

The Dockerfile sets `/app` as workdir, later the CMD command points
again to `app/main.py` instead of only `main.py`, causing the following
error:
```
Path does not exist app/main.py
```
2025-11-12 07:39:14 -06:00
konsti e36bf634ba
Add iOS support for Python discovery (#16686)
iOS support exist nominally
(https://github.com/astral-sh/uv/pull/15640), but Python discovery
currently fails.
2025-11-12 11:03:27 +00:00
Zanie Blue 63df2cdfe9
Minor fixups to `uv workspace metadata` (#16692) 2025-11-11 20:41:26 +00:00
Mikayla Thompson 00e2a0e54d
Replace println with Printer for all `dir` commands & workspace dir followups (#16690)
## Summary

1. Discussed in review of #16678 that println should be replaced by
using `printer`. The `println` pattern was pretty consistent across all
the `dir` commands, so I've updated all of them in this PR (there are
some usages of `println` outside of `uv/src/commands` that I didn't
touch -- the use cases there seemed more complex and nuanced).
2. I missed two comments in the previous PR before merging, so updates
from those are in here as well.

## Test Plan

No behavior changes, existing tests for all commands pass.

---------

Signed-off-by: Mikayla Thompson <mrt@mikayla.codes>
2025-11-11 14:36:31 -06:00
Mikayla Thompson b81060674e
`workspace dir` command (#16678)
Addresses https://github.com/astral-sh/uv/issues/13636

Prints the path to the workspace root by default, and any of the child
packages if requested.

I looped it into the same preview flag as `workspace metadata`, given
how closely related they are.

## Summary

```
─> uv workspace dir
/Users/mikayla/code/uv/dev-envs

─> uv workspace dir --package foo-proj
/Users/mikayla/code/uv/dev-envs/foo-proj

─> uv workspace dir --package bar-proj
error: Package `bar-proj` not found in workspace.
```

## Test Plan

Unit tests added.

---------

Signed-off-by: Mikayla Thompson <mrt@mikayla.codes>
Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-11-11 12:30:39 -07:00
konsti 92c2bfcca0
Remove unnecessary `DisplaySafeUrl::from` (#16689)
For #16622
2025-11-11 19:12:20 +00:00
liam 63ab247765
Allow explicit values with `uv version --bump` (#16555)
Resolves https://github.com/astral-sh/uv/issues/16427

This PR updates `uv version --bump` so you can pin the exact number
you’re targeting, i.e. `--bump patch=10` or `--bump dev=42`. The
command-line interface now parses those `component=value` flags, and the
bump logic actually sets the version to the number you asked for.
2025-11-11 12:27:32 -05:00
Zanie Blue 3ccad58166
Add `uv workspace metadata` (#16516)
This adds the scaffolding for a `uv workspace metadata` command, as an
equivalent to `cargo metadata`, for integration with downstream tools. I
didn't do much here beyond emit the workspace root path and the paths of
the workspace members. I explored doing a bit more in #16638, but I
think we're actually going to want to come up with a fairly
comprehensive schema like `cargo metadata` has. I've started exploring
that too, but I don't have a concrete proposal to share yet.

I don't want this to be a top-level command because I think people would
expect `uv metadata <PACKAGE>` to show metadata about arbitrary packages
(this has been requested several times). I also think we can do other
things in the workspace namespace to make trivial integrations simpler,
like `uv workspace list` (enumerate members) and `uv workspace dir`
(show the path to the workspace root).

I don't expect this to be stable at all to start. I've both gated it
with preview and hidden it from the help. The intent is to merge so we
can iterate on it as we figure out what integrations need.
2025-11-11 15:46:01 +00:00
Charlie Marsh 5b517bb966
Remove Git-based dependency for tl (#16679)
## Summary

I published our own fork, since our PR had been lingering for over a
year: https://crates.io/crates/astral-tl
2025-11-11 08:41:13 -06:00
Mikayla Thompson f22af0f88a
Deprecate `--project` arg for init (#16674)
Addresses https://github.com/astral-sh/uv/issues/15790

## Summary

After discussion, the functionality of `--project` vs `--directory` was
quite unclear in this case, so deprecating `--project` for `init` is
probably the clearest behavior option. This is a breaking change, so it
requires being under preview before being rolled out fully.

Included in the PR now:
- new feature flag (`init --project` is deprecated if `--preview` or
`--preview-features deprecate-project-for-init` are provided)
- tests (for `--directory` behavior, as well as the current warning and
future error)
- documentation updated in docs/concepts/projects/init.md

---------

Signed-off-by: Mikayla Thompson <mrt@mikayla.codes>
2025-11-10 16:33:08 -07:00
Mathieu Kniewallner 9a21897f3d
feat(cli): expose `UV_NO_DEFAULT_GROUPS` environment variable (#16645)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

Similarly to #16529 that adds `UV_NO_GROUP`, this adds
`UV_NO_DEFAULT_GROUPS` that does the same as `--no-default-groups`. This
can be useful on the CI, to disable default groups on a job without
having to set the argument in all commands that could trigger a sync
(for instance
[here](8757b318e9/.github/workflows/main.yml (L105-L116))).

## Test Plan

Snapshot tests.

---------

Co-authored-by: samypr100 <3933065+samypr100@users.noreply.github.com>
2025-11-10 14:43:48 -06:00
Charlie Marsh c1c1950dce
Add support for the Simple index API top-level route (#16656)
## Summary

At present, we only have support for the detail routes (e.g.,
`https://pypi.org/simple/requests`), but not the top-level index route
(e.g., `https://pypi.org/simple/`). I need this for some downstream work
so pulling it into its own PR.
2025-11-10 14:50:19 -05:00