Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-uv for openSUSE:Factory checked in at 2026-08-14 22:09:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-uv (Old) and /work/SRC/openSUSE:Factory/.python-uv.new.1258 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-uv" Fri Aug 14 22:09:19 2026 rev:113 rq:1371208 version:0.12.4 Changes: -------- --- /work/SRC/openSUSE:Factory/python-uv/python-uv.changes 2026-08-09 21:40:06.476008822 +0200 +++ /work/SRC/openSUSE:Factory/.python-uv.new.1258/python-uv.changes 2026-08-14 22:09:23.935227426 +0200 @@ -1,0 +2,69 @@ +Fri Aug 14 09:16:05 UTC 2026 - Martin Pluskal <[email protected]> + +- Add a _multibuild "test" flavour that runs the Rust test suite: + * The package had no check section at all, so this is added + coverage; the main flavour is untouched and still builds the + same six packages with the same content + * The test flavour needs no Python: it skips the singlespec + machinery and declares no subpackages, no Provides and no + files, so it produces only a src.rpm and advertises nothing + * It runs cargo test over 67 of the 70 workspace members + * Excluded uv, whose CLI integration suite resolves against the + real package index and downloads managed CPython interpreters, + neither of which is available in a build chroot + * Excluded uv-dev, whose sysconfig-mapping test downloads + cpython-unix/targets.yml from the python-build-standalone + repository + * Excluded uv-build-backend, which panics inside insta with "does + not allow inline snapshot assertions in loops"; upstream runs + the suite under cargo-nextest, which isolates every test in its + own process, while insta's duplicate detection is process-global + * uv-client and uv-keyring are kept: the tests of theirs that + would need pypi.org or a secret-service daemon sit behind the + non-default test-pypi and native-auth features + * Runs the suite with one test thread, which is a correctness + requirement rather than tuning: several crates set SSL_CERT_FILE + or PATH process-wide from one test while another reads them, + which upstream avoids by running under cargo-nextest + * Pulls in ca-certificates-mozilla for the test flavour; without + any trust anchors the reqwest client constructor fails outright + and took 38 tests with it, none of them network tests + * Skips the linehaul user-agent test, which reads the distro from + /etc/os-release and finds none in a build chroot + +------------------------------------------------------------------- +Fri Aug 14 07:42:41 UTC 2026 - Martin Pluskal <[email protected]> + +- Update to 0.12.4: + * Prefer post-quantum key exchange and add opt-in TLS diagnostics + * Accept whitespace before versions in noncompliant wildcard + comparisons such as Requires-Python: >= 3.5.* + * Report a specific error when a PEP 723 closing tag contains + trailing whitespace or other content + * Add uv check --no-install-project and respect + UV_NO_INSTALL_PROJECT to install dependencies without building + or installing the project (preview) + * Make the ty subprocess invoked by uv check honour uv's colour + and progress settings, including quiet mode (preview) + * Speed up resolutions with long runs of unavailable package + versions by coalescing gaps in the resolver's version ranges + * Speed up Simple API parsing by deserialising PyPI and Pyx file + metadata directly + * Allow uv lock to proceed when .venv is an unusable project + environment + * Respect fork-strategy when ordering forks created from + environments or existing lockfile resolution-markers + * Preserve consecutive wildcard Python minor-version exclusions + such as !=3.11.*, !=3.12.* in uv.lock + * Preserve inline comments on the final item in dependency arrays + when uv add updates it + * Fix interpreter cache reuse: recover from stale base-interpreter + metadata on a version mismatch, and do not reuse the cache + across differing PYTHONEXECUTABLE / __PYVENV_LAUNCHER__ + overrides +- Re-vendor the Rust dependencies: 15 crates added (the cap-std, + tar-codec and blake3 families), 122 updated, none removed. All + newly linked crates are permissive, so License is unchanged at + (Apache-2.0 OR MIT) AND MPL-2.0 + +------------------------------------------------------------------- Old: ---- python-uv-0.12.3.tar.gz New: ---- _multibuild python-uv-0.12.4.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-uv.spec ++++++ --- /var/tmp/diff_new_pack.x5NpQ8/_old 2026-08-14 22:09:28.478394050 +0200 +++ /var/tmp/diff_new_pack.x5NpQ8/_new 2026-08-14 22:09:28.485394306 +0200 @@ -16,6 +16,16 @@ # +%global flavor @BUILD_FLAVOR@%{nil} +%if "%{flavor}" == "test" +%define psuffix -test +%global debug_package %{nil} +%bcond_without test +%else +%define psuffix %{nil} +%bcond_with test +%endif +%define origname python-uv %if 0%{?suse_version} >= 1699 %bcond_without mold %else @@ -25,14 +35,14 @@ %if %{with mold} %global build_rustflags -C linker=clang -C link-arg=-fuse-ld=%{_bindir}/mold -C link-arg=-Wl,-z,relro,-z,now -C debuginfo=2 -C incremental=false -C strip=none %endif -Name: python-uv -Version: 0.12.3 +Name: %{origname}%{psuffix} +Version: 0.12.4 Release: 0 Summary: A Python package installer and resolver, written in Rust # Legal-Review-Notice: uv itself is "Apache-2.0 OR MIT", but the binary # statically links the vendored Rust dependencies. Re-derived on this # re-vendor with "cargo tree --offline -p uv -e normal" over the vendored -# tree (672 crates); the copyleft licences in the linked graph are: +# tree (512 crates); the copyleft licences in the linked graph are: # - MPL-2.0 from astral-pubgrub, astral-version-ranges and option-ext # (the last via shellexpand -> dirs -> dirs-sys), # - priority-queue, which is "LGPL-3.0-or-later OR MPL-2.0" - we elect @@ -44,22 +54,39 @@ # the complete vendor.tar.zst ships in the src.rpm. License: (Apache-2.0 OR MIT) AND MPL-2.0 URL: https://github.com/astral-sh/uv -Source0: https://github.com/astral-sh/uv/archive/refs/tags/%{version}.tar.gz#/%{name}-%{version}.tar.gz +Source0: https://github.com/astral-sh/uv/archive/refs/tags/%{version}.tar.gz#/%{origname}-%{version}.tar.gz Source1: vendor.tar.zst +BuildRequires: cargo >= 1.95 +BuildRequires: cargo-packaging +BuildRequires: cmake +BuildRequires: zstd +%if %{with test} +# A stock build chroot has no /etc/ssl/certs at all, and reqwest's +# ClientBuilder refuses to build with no trust anchors at all +# ("No CA certificates were loaded from the system"). That is a +# constructor error, not a network one, so it took out 38 tests across +# uv-auth, uv-client and uv-test that never touch the network. +BuildRequires: ca-certificates-mozilla +%endif +# The test flavour only builds and runs the Rust test suite. It needs no +# Python at all, so it skips the singlespec machinery entirely - running +# cargo test once per Python flavour would double the cost for no gain. +# Every Provides/Obsoletes and every %%package declaration is guarded, not +# just the %%files: rpmbuild would drop a subpackage that has no %%files, +# but OBS parses the declarations for scheduling, so an unguarded one +# would advertise a competing provider of uv from the test flavour. +%if %{without test} BuildRequires: %{python_module maturin} BuildRequires: %{python_module pip} BuildRequires: %{python_module tomli} BuildRequires: alts -BuildRequires: cargo >= 1.95 -BuildRequires: cargo-packaging -BuildRequires: cmake BuildRequires: fdupes BuildRequires: python-rpm-macros -BuildRequires: zstd Requires: alts Requires: python3 Obsoletes: uv < %{version} Provides: uv = %{version} +%endif %if 0%{?suse_version} >= 1699 BuildRequires: c++_compiler BuildRequires: c_compiler @@ -73,7 +100,7 @@ %ifarch %{ix86} x86_64 BuildRequires: nasm %endif - +%if %{without test} %package -n uv-fish-completion Summary: Fish Completion for %{name} Requires: fish @@ -108,6 +135,7 @@ Bash command-line completion support for %{name}. %python_subpackages +%endif %description uv is a Python package installer and resolver, written in Rust. Designed as a @@ -121,6 +149,7 @@ %endif %build +%if %{without test} export CARGO_AUDITABLE="auditable" export CARGO_INCREMENTAL=0 export CARGO_FEATURE_VENDORED=1 @@ -136,7 +165,53 @@ export CARGO_PROFILE_RELEASE_SPLIT_DEBUGINFO=off export CARGO_PROFILE_RELEASE_STRIP=false %pyproject_wheel +%endif + +%if %{with test} +%check +# The test flavour runs the Rust workspace suite: 67 of the 70 workspace +# members. Three crates are excluded, each for a reason that no amount of +# packaging can fix: +# - uv, the CLI integration suite (78 test files under crates/uv/tests). +# It resolves against the real package index and downloads managed +# CPython interpreters; an OBS build chroot has no network. +# - uv-dev, whose generate_sysconfig_mappings test fetches +# cpython-unix/targets.yml from raw.githubusercontent.com - same +# reason. +# - uv-build-backend, which panics inside insta with "does not allow +# inline snapshot assertions in loops". Upstream ships +# .config/nextest.toml and runs the suite under cargo-nextest, which +# gives every test its own process; insta's duplicate detection is +# process-global, so a shared inline snapshot trips under plain +# cargo test. --test-threads=1 does not help. +# Everything else is offline by construction: those crates carry only +# inline #[test] units (version parsing, PEP 508, resolver, wheel +# filenames, ...) against the vendored dev-dependencies. Two crates that +# look like they need more than that do not: uv-client's four pypi.org +# tests are behind the non-default test-pypi feature, and both of +# uv-keyring's integration test files are gated on +# #![cfg(feature = "native-auth")], also not a default feature, so they +# compile to zero tests and need no secret-service daemon. +# +# --test-threads=1 is not tuning, it is required for correctness. Several +# crates drive process-global state from their tests: uv-client's tls.rs +# points SSL_CERT_FILE/SSL_CERT_DIR at deliberately bogus paths through +# temp_env while base_client.rs builds a reqwest Client that reads them, +# and uv-python's discovery tests rewrite PATH while another test spawns +# a /bin/sh mock interpreter that then cannot find cat. Upstream never +# sees either because cargo-nextest gives every test its own process; +# one test thread is the equivalent for the stock harness. +# +# The single skip is environmental: linehaul reports the distro from +# /etc/os-release, which a build chroot does not have, so the snapshot +# gets null where it expects a name and version. +# +# The leading "--" is required: %%cargo_test is a parametrised macro, so +# without it rpm parses "--workspace" as a macro option and aborts. +%{cargo_test -- --workspace --exclude uv --exclude uv-dev --exclude uv-build-backend -- --test-threads=1 --skip user_agent_version::test_user_agent_has_linehaul} +%endif +%if %{without test} %install export PATH="%{buildroot}%{_bindir}:${PATH}" mkdir -p %{buildroot}%{_datadir}/bash-completion/completions @@ -197,4 +272,5 @@ %dir %{_datadir}/zsh/site-functions %{_datadir}/zsh/site-functions/_uv %{_datadir}/zsh/site-functions/_uvx +%endif ++++++ _multibuild ++++++ <multibuild> <flavor>test</flavor> </multibuild> ++++++ python-uv-0.12.3.tar.gz -> python-uv-0.12.4.tar.gz ++++++ /work/SRC/openSUSE:Factory/python-uv/python-uv-0.12.3.tar.gz /work/SRC/openSUSE:Factory/.python-uv.new.1258/python-uv-0.12.4.tar.gz differ: char 16, line 1 ++++++ vendor.tar.zst ++++++ /work/SRC/openSUSE:Factory/python-uv/vendor.tar.zst /work/SRC/openSUSE:Factory/.python-uv.new.1258/vendor.tar.zst differ: char 7, line 1
