Skip to content

Comments

Enforce UTF‑8-encoded license files during uv build#16699

Merged
konstin merged 6 commits intoastral-sh:mainfrom
terror:license-files-utf8
Nov 13, 2025
Merged

Enforce UTF‑8-encoded license files during uv build#16699
konstin merged 6 commits intoastral-sh:mainfrom
terror:license-files-utf8

Conversation

@terror
Copy link
Contributor

@terror terror commented Nov 12, 2025

I noticed this when working on #16697.

PEP 639 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:

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.

@zanieb zanieb requested a review from konstin November 12, 2025 15:00
@konstin konstin added the enhancement New feature or improvement to existing functionality label Nov 13, 2025
@konstin
Copy link
Member

konstin commented Nov 13, 2025

I've moved the license metadata parsing to its own function, it's been getting too big.

It makes sense to add since it's in the spec, but FWIW this isn't really a problem users run into, I don't think I've seen any problems from non-UTF-8 files in uv. The only part where we really need to care of non-UTF-8 inputs is Windows file paths.

----- stdout -----

----- stderr -----
error: Invalid pyproject.toml
Copy link
Member

Choose a reason for hiding this comment

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

It's not ideal that we say the problem is pyproject.toml, the file itself is valid, I'll follow-up in a separate PR.

@konstin konstin enabled auto-merge (squash) November 13, 2025 12:41
@konstin konstin merged commit e28dc62 into astral-sh:main Nov 13, 2025
99 checks passed
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Nov 18, 2025
This MR contains the following updates:

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

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.10`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0910)

[Compare Source](astral-sh/uv@0.9.9...0.9.10)

Released on 2025-11-17.

##### Enhancements

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

##### Preview features

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

##### Bug fixes

- Don't check file URLs for ambiguously parsed credentials ([#&#8203;16759](astral-sh/uv#16759))

##### Documentation

- Add a "storage" reference document ([#&#8203;15954](astral-sh/uv#15954))

</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:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNzMuMSIsInVwZGF0ZWRJblZlciI6IjQxLjE3My4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or improvement to existing functionality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants