Skip to content

Conversation

merlinz01
Copy link
Contributor

Summary

uv doesn't separate the metadata block from other blocks when adding the script block to a script, which results in the next block being considered part of the script block and causes errors when running.

See #12499 for more details.

Closes #12499

Test Plan

I manually tested the most common scenario, but there's a few edge cases that would be good to have tests for.

I would have written the tests also, but I was running into errors like this:

$ cargo test --package uv-scripts
   Compiling uv-configuration v0.0.1 (/home/merlin/Projects/uv/crates/uv-configuration)
error: cannot find attribute `value` in this scope
 --> crates/uv-configuration/src/project_build_backend.rs:8:38
  |
8 |     #[cfg_attr(feature = "schemars", value(hide = true))]
  |                                      ^^^^^

error: could not compile `uv-configuration` (lib) due to 1 previous error

@charliermarsh
Copy link
Member

Thanks, a few tests would be great. You can apply this patch:

diff --git a/crates/uv-configuration/src/project_build_backend.rs b/crates/uv-configuration/src/project_build_backend.rs
index fb1a171e9..90fac2ec9 100644
--- a/crates/uv-configuration/src/project_build_backend.rs
+++ b/crates/uv-configuration/src/project_build_backend.rs
@@ -5,7 +5,7 @@
 #[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
 pub enum ProjectBuildBackend {
     #[cfg_attr(feature = "clap", value(hide = true))]
-    #[cfg_attr(feature = "schemars", value(hide = true))]
+    #[cfg_attr(feature = "schemars", schemars(skip))]
     /// Use uv as the project build backend.
     Uv,
     #[default]

@charliermarsh
Copy link
Member

Ah, looks like you also need #12504.

@merlinz01
Copy link
Contributor Author

Hmm, now I'm getting lots of errors like this:

$ cargo test --package uv-scripts
   Compiling uv-settings v0.0.1 (/home/merlin/Projects/uv/crates/uv-settings)
error[E0277]: the trait bound `PythonPreference: ValueEnum` is not satisfied
   --> crates/uv-settings/src/settings.rs:252:35
    |
252 |     pub python_preference: Option<PythonPreference>,
    |                                   ^^^^^^^^^^^^^^^^ the trait `ValueEnum` is not implemented for `PythonPreference`
    |
    = help: the trait `ValueEnum` is implemented for `clap::ColorChoice`
# 25 more similar errors...

This is what I'm running:

$ cargo --version
cargo 1.85.1 (d73d2caf9 2024-12-31)
$ rustup --version
rustup 1.26.0 (2024-04-01)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: The currently active `rustc` version is `rustc 1.85.1 (4eb161250 2025-03-15)`
$ rustc --version
rustc 1.85.1 (4eb161250 2025-03-15)
$ uname -a
Linux myhostname 6.8.0-55-generic #57-Ubuntu SMP PREEMPT_DYNAMIC Wed Feb 12 23:42:21 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/os-release 
NAME="Linux Mint"
VERSION="22.1 (Xia)"

@charliermarsh
Copy link
Member

Those PRs should merge shortly, then you can rebase on top of them if you'd like. (The problem, I think, is that we tend to run cargo test over the entire workspace, so as long as one crate enables the necessary features, all crates have access. Thus, you only see these failures if you try to test a crate individually.)

@merlinz01 merlinz01 force-pushed the add-newline-after-metadata branch from 16eb7fe to 1356b41 Compare March 27, 2025 11:32
@merlinz01
Copy link
Contributor Author

Thanks for the speedy fix! I have added tests.

@charliermarsh charliermarsh self-assigned this Mar 27, 2025
dependencies = []
"#}
);
assert_eq!(
Copy link
Member

Choose a reason for hiding this comment

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

It might be easier to do this via snapshot testing?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I can't find how to import the uv_snapshot macro.

Copy link
Member

Choose a reason for hiding this comment

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

I looked into it briefly but I think insta strips some whitespace, and these tests are intentionally quite whitespace-sensitive, so lets leave it as-is.

Copy link
Member

@charliermarsh charliermarsh left a comment

Choose a reason for hiding this comment

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

Thanks.

@charliermarsh charliermarsh added the bug Something isn't working label Mar 27, 2025
@charliermarsh charliermarsh enabled auto-merge (squash) March 27, 2025 21:32
@charliermarsh charliermarsh merged commit 5b2a8ab into astral-sh:main Mar 27, 2025
75 checks passed
@merlinz01 merlinz01 deleted the add-newline-after-metadata branch March 27, 2025 21:44
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Mar 31, 2025
This MR contains the following updates:

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

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

[Compare Source](astral-sh/uv@0.6.10...0.6.11)

##### Enhancements

-   Add dependents ("via ..." comments) in `uv export` command ([#&#8203;12350](astral-sh/uv#12350))
-   Bump least-recent non-EOL macOS version to 13.0 ([#&#8203;12518](astral-sh/uv#12518))
-   Support `--find-links`-style "flat" indexes in `[[tool.uv.index]]` ([#&#8203;12407](astral-sh/uv#12407))
-   Distinguish between `-q` and `-qq` ([#&#8203;12300](astral-sh/uv#12300))

##### Configuration

-   Support `UV_PROJECT` environment to set project directory. ([#&#8203;12327](astral-sh/uv#12327))

##### Performance

-   Use a boxed slice for various requirement types ([#&#8203;12514](astral-sh/uv#12514))

##### Bug fixes

-   Add a newline after metadata when initializing scripts with other metadata blocks ([#&#8203;12501](astral-sh/uv#12501))
-   Avoid writing empty `requires-python` to script blocks ([#&#8203;12517](astral-sh/uv#12517))
-   Respect build constraints in `uv sync` ([#&#8203;12502](astral-sh/uv#12502))
-   Respect transitive dependencies in `uv tree --only-group` ([#&#8203;12560](astral-sh/uv#12560))

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMTkuMiIsInVwZGF0ZWRJblZlciI6IjM5LjIxOS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Apr 21, 2025
## 0.6.14

### Python versions

The following Python versions have been added:

- CPython 3.13.3
- CPython 3.12.10
- CPython 3.11.12
- CPython 3.10.17
- CPython 3.9.22

See the [`python-build-standalone` release notes](https://github.com/astral-sh/python-build-standalone/releases/tag/20250409) for more details.

### Enhancements

- Add `uv-build` and `uv_build` aliases to `uv init --build-backend` ([#12776](astral-sh/uv#12776))
- Emit dedicated error message for Conda `environment.yml` files ([#12669](astral-sh/uv#12669))


### Preview features

- Build backend: Check module dir exists for sdist build ([#12779](astral-sh/uv#12779))
- Build backend: Fix sdist with long directories ([#12764](astral-sh/uv#12764))

### Performance

- Avoid querying GitHub on repeated install invocations ([#12767](astral-sh/uv#12767))

### Bug fixes

- Error when `tool.uv.sources` is set in system-level configuration file ([#12757](astral-sh/uv#12757))
- Split workspace members onto their own lines in `uv init` ([#12756](astral-sh/uv#12756))

### Documentation

- Add lockfile note about PEP 751 ([#12732](astral-sh/uv#12732))
- Extend the reference documentation for `uv pip sync` ([#12683](astral-sh/uv#12683))
- Fix mismatched pip interface header / nav titles ([#12640](astral-sh/uv#12640))

## 0.6.13

### Enhancements

- Add `--show-version` to `uv python find` ([#12376](astral-sh/uv#12376))
- Remove `--no-config` warning from `uv pip compile` and `uv pip sync` ([#12642](astral-sh/uv#12642))
- Skip repeated directories in `PATH` when searching for Python interpreters ([#12367](astral-sh/uv#12367))
- Unset `SCRIPT_PATH` in relocatable activation script ([#12672](astral-sh/uv#12672))
- Add `UV_PYTHON_DOWNLOADS_JSON_URL` to set custom managed python sources ([#10939](astral-sh/uv#10939))
- Reject `pyproject.toml` files in `uv pip compile -o` ([#12673](astral-sh/uv#12673))
- Respect the `--offline` flag for Git operations ([#12619](astral-sh/uv#12619))

### Bug fixes

- Warn instead of error if CRC appears to be missing ([#12722](astral-sh/uv#12722))
- Avoid infinite loop in `uv export` with conflicts ([#12726](astral-sh/uv#12726))

### Rust API

- Update MSRV to 1.84 ([#12670](astral-sh/uv#12670))

## 0.6.12

### Enhancements

- Report the queried executable path in `uv python list` ([#12628](astral-sh/uv#12628))
- Improve archive unpack error messages ([#12627](astral-sh/uv#12627))

### Bug fixes

- Respect `authenticate` when using `explicit = true` ([#12631](astral-sh/uv#12631))
- Normalize extra and group names in `uv add` and `uv remove` ([#12586](astral-sh/uv#12586))
- Enforce CRC-32 checks when unpacking archives ([#12623](astral-sh/uv#12623))
- Fix parsing of `python-platform` in settings files ([#12592](astral-sh/uv#12592))

### Documentation

- Add note about `uv build` to `package = false` ([#12608](astral-sh/uv#12608))
- Add index fallback note to `authenticate = always` documentation ([#12498](astral-sh/uv#12498))
- Fix invalid 'kind' reference in flat index docs ([#12583](astral-sh/uv#12583))

## 0.6.11

### Enhancements

- Add dependents ("via ..." comments) in `uv export` command ([#12350](astral-sh/uv#12350))
- Bump least-recent non-EOL macOS version to 13.0 ([#12518](astral-sh/uv#12518))
- Support `--find-links`-style "flat" indexes in `[[tool.uv.index]]` ([#12407](astral-sh/uv#12407))
- Distinguish between `-q` and `-qq` ([#12300](astral-sh/uv#12300))

### Configuration

- Support `UV_PROJECT` environment to set project directory. ([#12327](astral-sh/uv#12327))

### Performance

- Use a boxed slice for various requirement types ([#12514](astral-sh/uv#12514))

### Bug fixes

- Add a newline after metadata when initializing scripts with other metadata blocks ([#12501](astral-sh/uv#12501))
- Avoid writing empty `requires-python` to script blocks ([#12517](astral-sh/uv#12517))
- Respect build constraints in `uv sync` ([#12502](astral-sh/uv#12502))
- Respect transitive dependencies in `uv tree --only-group` ([#12560](astral-sh/uv#12560))

## 0.6.10

### Enhancements

- Add `uv sync --check` flag ([#12342](astral-sh/uv#12342))
- Add support for Python version requests in `uv python list` ([#12375](astral-sh/uv#12375))
- Support `.env` files in `uv tool run` ([#12386](astral-sh/uv#12386))
- Support `python find --script` ([#11891](astral-sh/uv#11891))

### Preview features

- Check all compatible torch indexes when `--torch-backend` is enabled ([#12385](astral-sh/uv#12385))

### Performance

- Use a boxed slice for extras and groups ([#12391](astral-sh/uv#12391))
- Use small string for index name type ([#12355](astral-sh/uv#12355))

### Bug fixes

- Allow virtual packages with `--no-build` ([#12314](astral-sh/uv#12314))
- Ignore `--find-links` entries for pinned indexes ([#12396](astral-sh/uv#12396))
- Omit wheels from lockfile based on `--exclude-newer` ([#12299](astral-sh/uv#12299))
- Retain end-of-line comment position when adding dependency ([#12360](astral-sh/uv#12360))
- Omit fragment when querying for wheels in Simple HTML API ([#12384](astral-sh/uv#12384))
- Error on missing argument in `requirements.txt` ([#12354](astral-sh/uv#12354))
- Support modules with different casing in build backend ([#12240](astral-sh/uv#12240))
- Add authentication policy support for `pip` commands ([#12470](astral-sh/uv#12470))

## 0.6.9

### Enhancements

- Use `keyring --mode creds` when `authenticate = "always"` ([#12316](astral-sh/uv#12316))
- Fail with specific error message when no password is present and `authenticate = "always"` ([#12313](astral-sh/uv#12313))

### Bug fixes

- Add boolish value parser for `UV_MANAGED_PYTHON` flags ([#12345](astral-sh/uv#12345))
- Make deserialization non-fatal when assessing source tree revisions ([#12319](astral-sh/uv#12319))
- Use resolver-returned wheel over alternate cached wheel ([#12301](astral-sh/uv#12301))

### Documentation

- Add experimental `--torch-backend` to the PyTorch guide ([#12317](astral-sh/uv#12317))
- Fix `#keyring-provider` references in alternative index docs ([#12315](astral-sh/uv#12315))
- Fix `--directory` path in examples ([#12165](astral-sh/uv#12165))

### Preview changes

- Automatically infer the PyTorch index via `--torch-backend=auto` ([#12070](astral-sh/uv#12070))

## 0.6.8

### Enhancements

- Add support for enabling all groups by default with `default-groups = "all"` ([#12289](astral-sh/uv#12289))
- Add simpler `--managed-python` and `--no-managed-python` flags for toggling Python preferences ([#12246](astral-sh/uv#12246))

### Performance

- Avoid allocations for default cache keys ([#12063](astral-sh/uv#12063))

### Bug fixes

- Allow local version mismatches when validating lockfile ([#12285](astral-sh/uv#12285))
- Allow owned string when deserializing `requires-python` ([#12278](astral-sh/uv#12278))
- Make cache errors non-fatal in `Planner::build` ([#12281](astral-sh/uv#12281))

## 0.6.7

### Python

- Add CPython 3.14.0a6
- Fix regression where extension modules would use wrong `CXX` compiler on Linux
- Enable FTS3 enhanced query syntax for SQLite

See the [`python-build-standalone` release notes](https://github.com/astral-sh/python-build-standalone/releases/tag/20250317) for more details.

### Enhancements

- Add support for `-c` constraints in `uv add` ([#12209](astral-sh/uv#12209))
- Add support for `--global` default version in `uv python pin` ([#12115](astral-sh/uv#12115))
- Always reinstall local source trees passed to `uv pip install` ([#12176](astral-sh/uv#12176))
- Render token claims on publish permission error ([#12135](astral-sh/uv#12135))
- Add pip-compatible `--group` flag to `uv pip install` and `uv pip compile` ([#11686](astral-sh/uv#11686))

### Preview features

- Avoid creating duplicate directory entries in built wheels ([#12206](astral-sh/uv#12206))
- Allow overriding module names for editable builds ([#12137](astral-sh/uv#12137))

### Performance

- Avoid replicating core-metadata field on `File` struct ([#12159](astral-sh/uv#12159))

### Bug fixes

- Add `src` to default cache keys ([#12062](astral-sh/uv#12062))
- Discard insufficient fork markers ([#10682](astral-sh/uv#10682))
- Ensure `python pin --global` creates parent directories if missing ([#12180](astral-sh/uv#12180))
- Fix GraalPy abi tag parsing and discovery ([#12154](astral-sh/uv#12154))
- Remove extraneous script packages in `uv sync --script` ([#12158](astral-sh/uv#12158))
- Remove redundant `activate.bat` output ([#12160](astral-sh/uv#12160))
- Avoid subsequent index hint when no versions are available on the first index ([#9332](astral-sh/uv#9332))
- Error on lockfiles with incoherent wheel versions ([#12235](astral-sh/uv#12235))

### Rust API

- Update `BaseClientBuild` to accept custom proxies ([#12232](astral-sh/uv#12232))

### Documentation

- Make testpypi index explicit in example snippet ([#12148](astral-sh/uv#12148))
- Reverse and format the archived changelogs ([#12099](astral-sh/uv#12099))
- Use consistent commas around i.e. and e.g. ([#12157](astral-sh/uv#12157))
- Fix typos in MRE docs ([#12198](astral-sh/uv#12198))
- Fix double space typo ([#12171](astral-sh/uv#12171))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Initial uv add --script produces invalid result with existing metadata section

2 participants