Skip to content

ci: install gating jobs from a constraints file exported from uv.lock - #194

Merged
kevincostner17 merged 2 commits into
mainfrom
ci/locked-ci-deps
Sep 14, 2026
Merged

kevincostner17 merged 2 commits into
mainfrom
ci/locked-ci-deps

Conversation

@kevincostner17

Copy link
Copy Markdown
Contributor

Summary

The gating CI jobs resolved dependencies fresh on every run. That's how numpy 2.5 turned median imputation into an OverflowError without any freshdata change (#187). Meanwhile uv.lock had drifted: it was last updated 2026-07-11, and uv lock --check failed against today's pyproject.toml.

This PR pins the jobs that gate merges and releases to the lockfile. The test matrix stays unpinned on purpose, so upstream breaks still show up early and in one place.

Changes

  • uv.lock: refreshed with uv lock, and build bumped off the yanked 1.5.1 (now 1.6.1; 1.4.4 on Python 3.9).
  • constraints/ci.txt (new): uv export --frozen --no-hashes --all-extras --no-emit-project. --no-emit-project drops the -e . line, which pip rejects in a constraints file. Pins carry Python-version markers, so one file serves every interpreter.
  • ci.yml:
    • quality-fast, truthbench, nightly-online-large, large-data-status and coverage-badge install with -c constraints/ci.txt.
    • quality-fast now runs lint and tests on the locked numpy (2.5.1 on 3.12), then downgrades to numpy<2.5 just for mypy. mypy targets 3.10, and NumPy 2.5's stubs require 3.12.
    • test-matrix is unchanged and commented as intentionally floating.
    • New lockfile job: uv lock --check, re-export, and git diff --exit-code constraints/ci.txt. It fails with a hint to run make constraints.
  • performance-large.yml: installs with constraints.
  • Makefile: new constraints target, which runs uv lock and then the same export as the CI job.

perf-regression.yml isn't touched here, to avoid conflicting with the A/B gate PR. It can pick up -c constraints/ci.txt in a follow-up.

Verification

  • uv lock --check: passes.
  • make constraints regenerates constraints/ci.txt byte-for-byte (git diff --exit-code is clean).
  • A fresh Python 3.12 venv, pip install --dry-run -c constraints/ci.txt -e ".[dev,ml]", resolves 68 packages, including:
    • numpy 2.5.1, pandas 2.3.3, polars 1.42.1, duckdb 1.5.4, pyarrow 25.0.0
    • scikit-learn 1.9.0, mypy 1.19.1, ruff 0.15.21, pytest 9.1.1
  • Both edited workflows parse as YAML. This PR's own CI run is the end-to-end check of every pinned job.

CI resolved dependencies fresh on every run, so an upstream release could
turn main red overnight (numpy 2.5 broke median imputation this way), and
uv.lock had silently drifted from pyproject.toml since July.

- Refresh uv.lock (bumping the yanked build==1.5.1 pin) and export it as
  constraints/ci.txt (uv export --no-hashes --all-extras --no-emit-project).
- quality-fast, truthbench, nightly-online-large, large-data-status,
  coverage-badge and performance-large install with -c constraints/ci.txt.
- quality-fast type-checks after the tests, downgrading to numpy<2.5 only
  for mypy (NumPy 2.5 stubs need Python 3.12; mypy targets 3.10).
- test-matrix stays unpinned as the early warning for upstream breakage.
- New lockfile job fails when uv.lock or constraints/ci.txt is stale;
  `make constraints` refreshes both.
@coderabbitai

coderabbitai Bot commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: d03fafb3-a3b2-47f4-b7f2-7eefa217c3b0


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…w contract

The contract test asserted the exact pre-constraints install line in
performance-large.yml, so every test lane failed once the workflow began
installing with -c constraints/ci.txt.
@kevincostner17
kevincostner17 merged commit f295847 into main Sep 14, 2026
18 checks passed
kevincostner17 added a commit that referenced this pull request Sep 14, 2026
- perf-regression.yml installs with -c constraints/ci.txt like the other
  gating jobs (left out of #194 to avoid conflicting with #193).
- MissForest convergence converts with to_numpy(dtype="float64",
  na_value=np.nan): the same pandas < 2 masked-array conversion that #192
  fixed in the streaming state. Adds a nullable Int16 MissForest test.
- contributor-roadmap.md no longer advertises #33 and #31, which are
  resolved; it points at the good-first-issue label instead.
@kevincostner17
kevincostner17 deleted the ci/locked-ci-deps branch September 14, 2026 18:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant