ci: pin uv to 0.11.19 (0.11.20 resolver regression breaks the test suite) - #1576
Merged
Conversation
uv 0.11.20 (released 2026-06-10) has a resolver regression: it silently drops pinned direct dependencies from `uv pip install -r requirements.txt` when the requirements also include an editable `-e` install. This dropped matplotlib/scipy/scikit-learn/Pillow from 7 servers' per-server test venvs, reding the full-test-suite Test job on every PR. CI installed uv unpinned (curl .../uv/install.sh), so it picked up 0.11.20 the day it released. Pin to 0.11.19, the latest known-good version. Verified locally with the exact CI install command for resources_servers/reasoning_gym: - uv 0.11.19: resolves 154 packages incl. matplotlib==3.10.6 -> import OK - uv 0.11.20: resolves 150 packages, matplotlib dropped -> ModuleNotFoundError Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
ko3n1g
previously approved these changes
Jun 12, 2026
Contributor
|
/ok to test 8ed2d8e |
Contributor
|
/ok to test cc06fa7 |
ko3n1g
pushed a commit
that referenced
this pull request
Jun 12, 2026
…n → ~2-3min) (#1577) ## Problem The **Unit tests → `Test`** check runs `ng_test_all`, which iterates all ~114 server modules **strictly sequentially** in a single runner (build venv → pytest → delete venv per module), taking **~22 min**. This is the long pole on every PR that touches core files (which trigger the full suite via the existing change-detection). ## Change **`ng_test_all` sharding** (`nemo_gym/cli.py`): new `+num_shards` / `+shard_index` options. Modules are partitioned **round-robin over a sorted list** so heavy modules (longmt_eval, the scientific servers) spread evenly across shards. The `fail_on_total_and_test_mismatch` check still runs against the full (unsharded) module list. Extracted `_select_shard()` with unit tests. **Workflow restructure** (`.github/workflows/unit-tests.yml`): - `detect` — change classification (unchanged logic), exposed as job outputs. - `Test` — core library unit tests (`ng_dev_test`) + the changed-servers path. (Fast now — the full server loop moved out.) - `Server suite (shard N)` — `ng_test_all +num_shards=8 +shard_index=N` across an **8-way matrix** (`fail-fast: false`), only on a full run. - `Server suite` — aggregation job that gates on all shards (single required check). **Result: full-suite wall-time ~22 min → ~2-3 min.** Same total compute, parallelized. Also pins uv to **0.11.19** (0.11.20 has a resolver regression that drops pinned deps — see #1576; this overlaps #1576 on `unit-tests.yml`, so merge #1576 first or fold them). ##⚠️ Branch-protection action required Server tests moved out of the `Test` job into the sharded jobs. To preserve gating, add **`Server suite`** as a required status check alongside **`Test`**. (`Server suite` uses `if: always()` so it reports green when the full suite isn't needed for a change, and red if any shard fails — so it's safe to require unconditionally.) ## Testing - `_select_shard` unit tests: complete + disjoint partition, balanced sizes, round-robin stride, out-of-range guard. `pytest tests/unit_tests/test_cli.py` 14/14, ruff clean, workflow YAML parses. - The workflow itself can only be fully validated once it runs on CI. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
Contributor
|
/ok to test 3be810d |
ko3n1g
approved these changes
Jun 12, 2026
Contributor
|
/ok to test 3be810d |
wprazuch
added a commit
that referenced
this pull request
Jun 17, 2026
Unblocks CI on this martas/1434-stacked branch: pin uv (0.11.20 drops pinned deps -> scipy/sklearn/matplotlib/PIL ModuleNotFoundError on 7 servers; = #1576) and pull main's graphwalks data/example_rollouts.jsonl (fixes its data validation). Drop both when martas/1434 rebases on main. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
wprazuch
added a commit
that referenced
this pull request
Jun 17, 2026
Shared CI fixes for the martas/1434-stacked CLI work: pin uv (0.11.20 drops pinned deps -> 7 servers fail; = #1576) and pull main's graphwalks example_rollouts.jsonl (fixes its data validation). This branch is the base for the ng_validate (#1599) and config-error (#1609) PRs so the fixes live in one place. Drop when martas/1434 rebases on main. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
wprazuch
added a commit
that referenced
this pull request
Jun 22, 2026
Shared CI fixes for the martas/1434-stacked CLI work: pin uv (0.11.20 drops pinned deps -> 7 servers fail; = #1576) and pull main's graphwalks example_rollouts.jsonl (fixes its data validation). This branch is the base for the ng_validate (#1599) and config-error (#1609) PRs so the fixes live in one place. Drop when martas/1434 rebases on main. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
wprazuch
added a commit
that referenced
this pull request
Jun 22, 2026
Shared CI fixes for the martas/1434-stacked CLI work: pin uv (0.11.20 drops pinned deps -> 7 servers fail; = #1576) and pull main's graphwalks example_rollouts.jsonl (fixes its data validation). This branch is the base for the ng_validate (#1599) and config-error (#1609) PRs so the fixes live in one place. Drop when martas/1434 rebases on main. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
wprazuch
added a commit
that referenced
this pull request
Jun 22, 2026
Shared CI fixes for the martas/1434-stacked CLI work: pin uv (0.11.20 drops pinned deps -> 7 servers fail; = #1576) and pull main's graphwalks example_rollouts.jsonl (fixes its data validation). This branch is the base for the ng_validate (#1599) and config-error (#1609) PRs so the fixes live in one place. Drop when martas/1434 rebases on main. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
wprazuch
added a commit
that referenced
this pull request
Jun 22, 2026
Shared CI fixes for the martas/1434-stacked CLI work: pin uv (0.11.20 drops pinned deps -> 7 servers fail; = #1576) and pull main's graphwalks example_rollouts.jsonl (fixes its data validation). This branch is the base for the ng_validate (#1599) and config-error (#1609) PRs so the fixes live in one place. Drop when martas/1434 rebases on main. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
wprazuch
added a commit
that referenced
this pull request
Jun 22, 2026
Shared CI fixes for the martas/1434-stacked CLI work: pin uv (0.11.20 drops pinned deps -> 7 servers fail; = #1576) and pull main's graphwalks example_rollouts.jsonl (fixes its data validation). This branch is the base for the ng_validate (#1599) and config-error (#1609) PRs so the fixes live in one place. Drop when martas/1434 rebases on main. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
wprazuch
added a commit
that referenced
this pull request
Jun 22, 2026
Shared CI fixes for the martas/1434-stacked CLI work: pin uv (0.11.20 drops pinned deps -> 7 servers fail; = #1576) and pull main's graphwalks example_rollouts.jsonl (fixes its data validation). This branch is the base for the ng_validate (#1599) and config-error (#1609) PRs so the fixes live in one place. Drop when martas/1434 rebases on main. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
wprazuch
added a commit
that referenced
this pull request
Jun 22, 2026
Shared CI fixes for the martas/1434-stacked CLI work: pin uv (0.11.20 drops pinned deps -> 7 servers fail; = #1576) and pull main's graphwalks example_rollouts.jsonl (fixes its data validation). This branch is the base for the ng_validate (#1599) and config-error (#1609) PRs so the fixes live in one place. Drop when martas/1434 rebases on main. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
wprazuch
added a commit
that referenced
this pull request
Jun 22, 2026
Shared CI fixes for the martas/1434-stacked CLI work: pin uv (0.11.20 drops pinned deps -> 7 servers fail; = #1576) and pull main's graphwalks example_rollouts.jsonl (fixes its data validation). This branch is the base for the ng_validate (#1599) and config-error (#1609) PRs so the fixes live in one place. Drop when martas/1434 rebases on main. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
wprazuch
added a commit
that referenced
this pull request
Jun 22, 2026
Shared CI fixes for the martas/1434-stacked CLI work: pin uv (0.11.20 drops pinned deps -> 7 servers fail; = #1576) and pull main's graphwalks example_rollouts.jsonl (fixes its data validation). This branch is the base for the ng_validate (#1599) and config-error (#1609) PRs so the fixes live in one place. Drop when martas/1434 rebases on main. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
wprazuch
added a commit
that referenced
this pull request
Jun 22, 2026
Shared CI fixes for the martas/1434-stacked CLI work: pin uv (0.11.20 drops pinned deps -> 7 servers fail; = #1576) and pull main's graphwalks example_rollouts.jsonl (fixes its data validation). This branch is the base for the ng_validate (#1599) and config-error (#1609) PRs so the fixes live in one place. Drop when martas/1434 rebases on main. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
wprazuch
added a commit
that referenced
this pull request
Jun 22, 2026
…n → ~2-3min) (#1577) The **Unit tests → `Test`** check runs `ng_test_all`, which iterates all ~114 server modules **strictly sequentially** in a single runner (build venv → pytest → delete venv per module), taking **~22 min**. This is the long pole on every PR that touches core files (which trigger the full suite via the existing change-detection). **`ng_test_all` sharding** (`nemo_gym/cli.py`): new `+num_shards` / `+shard_index` options. Modules are partitioned **round-robin over a sorted list** so heavy modules (longmt_eval, the scientific servers) spread evenly across shards. The `fail_on_total_and_test_mismatch` check still runs against the full (unsharded) module list. Extracted `_select_shard()` with unit tests. **Workflow restructure** (`.github/workflows/unit-tests.yml`): - `detect` — change classification (unchanged logic), exposed as job outputs. - `Test` — core library unit tests (`ng_dev_test`) + the changed-servers path. (Fast now — the full server loop moved out.) - `Server suite (shard N)` — `ng_test_all +num_shards=8 +shard_index=N` across an **8-way matrix** (`fail-fast: false`), only on a full run. - `Server suite` — aggregation job that gates on all shards (single required check). **Result: full-suite wall-time ~22 min → ~2-3 min.** Same total compute, parallelized. Also pins uv to **0.11.19** (0.11.20 has a resolver regression that drops pinned deps — see #1576; this overlaps #1576 on `unit-tests.yml`, so merge #1576 first or fold them). Server tests moved out of the `Test` job into the sharded jobs. To preserve gating, add **`Server suite`** as a required status check alongside **`Test`**. (`Server suite` uses `if: always()` so it reports green when the full suite isn't needed for a change, and red if any shard fails — so it's safe to require unconditionally.) - `_select_shard` unit tests: complete + disjoint partition, balanced sizes, round-robin stride, out-of-range guard. `pytest tests/unit_tests/test_cli.py` 14/14, ruff clean, workflow YAML parses. - The workflow itself can only be fully validated once it runs on CI. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
wprazuch
added a commit
that referenced
this pull request
Jun 22, 2026
…ite) (#1576) ## Problem The **Full test suite** (`Test`) job has been red on every PR, failing 7 servers (`math_with_code`, `newton_bench`, `arena_judge`, `reasoning_gym`, `ether0`, `aviary`, `stirrup_agent`) with `ModuleNotFoundError` at test collection — `scipy`, `scikit-learn`, `matplotlib`, `PIL`. These deps **are** declared (and pinned) in each server's `requirements.txt`. The real cause: **`uv 0.11.20` (released 2026-06-10) has a resolver regression** — it silently drops pinned direct dependencies from `uv pip install -r requirements.txt` when the requirements also include an editable `-e` install (as every server's `-e nemo-gym[dev] @ ../../` does). No error, no conflict — the package is just omitted. CI installs uv **unpinned** (`curl -LsSf https://astral.sh/uv/install.sh | sh`), so it picked up 0.11.20 the day it released — which is exactly when the suite started failing. The first (passing) run used an earlier uv. ## Evidence (reproduced locally with the exact CI install command) For `resources_servers/reasoning_gym` (`source .venv/bin/activate && uv pip install -r requirements.txt openai==2.7.2`): | uv version | Resolved | `matplotlib==3.10.6` | |---|---|---| | 0.11.19 | 154 packages | ✅ installed → `import matplotlib` OK | | **0.11.20** | 150 packages | ❌ dropped → `ModuleNotFoundError` | Bisected 0.10.2 → 0.11.20: every version **through 0.11.19 works**; only **0.11.20** is broken. ## Fix Pin the uv installer to **0.11.19** (latest known-good) in `full-test-suite.yml` (Test + wheel jobs) and `unit-tests.yml`, with a comment explaining why. Once uv ships a fix, the pin can be bumped. Not caused by — and unblocks — any PR that triggers the full matrix (e.g. #1561, #1575). Worth also reporting the regression upstream to astral-sh/uv. Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The Full test suite (
Test) job has been red on every PR, failing 7 servers(
math_with_code,newton_bench,arena_judge,reasoning_gym,ether0,aviary,stirrup_agent) withModuleNotFoundErrorat test collection —scipy,scikit-learn,matplotlib,PIL.These deps are declared (and pinned) in each server's
requirements.txt. The real cause:uv 0.11.20(released 2026-06-10) has a resolver regression — it silently drops pinneddirect dependencies from
uv pip install -r requirements.txtwhen the requirements alsoinclude an editable
-einstall (as every server's-e nemo-gym[dev] @ ../../does). No error,no conflict — the package is just omitted.
CI installs uv unpinned (
curl -LsSf https://astral.sh/uv/install.sh | sh), so it picked up0.11.20 the day it released — which is exactly when the suite started failing. The first
(passing) run used an earlier uv.
Evidence (reproduced locally with the exact CI install command)
For
resources_servers/reasoning_gym(source .venv/bin/activate && uv pip install -r requirements.txt openai==2.7.2):matplotlib==3.10.6import matplotlibOKModuleNotFoundErrorBisected 0.10.2 → 0.11.20: every version through 0.11.19 works; only 0.11.20 is broken.
Fix
Pin the uv installer to 0.11.19 (latest known-good) in
full-test-suite.yml(Test + wheeljobs) and
unit-tests.yml, with a comment explaining why. Once uv ships a fix, the pin can bebumped.
Not caused by — and unblocks — any PR that triggers the full matrix (e.g. #1561, #1575). Worth
also reporting the regression upstream to astral-sh/uv.