chore: finish migration off pip-tools/tox onto uv - #1118
Merged
Conversation
The repo had already dropped pip-compile'd dev requirements in favor of PEP 735 dependency-groups, but kept tox (via tox-uv) as an intermediate layer and still generated a top-level requirements.txt with pip-compile. This drops that remaining layer: tox.ini and the top-level requirements.in/.txt are gone, CI workflows call `uv sync --group X` + `uv run <tool>` directly instead of `uv run tox -e X`, and the packaging group (build/twine) is replaced by `uv build`/`uv publish --dry-run` natively. Adds `default-groups = []` so per-group CI jobs don't accidentally pull in the whole `dev` group, and a `uv-lock` pre-commit hook to keep uv.lock current automatically. docs/requirements.txt is intentionally kept - the sphinx-notes/pages action needs a standalone requirements file at a known path. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Completes the repository’s migration away from pip-tools/tox to a direct uv-based workflow by removing legacy requirements/tox config and updating CI + contributor docs to use uv sync --group … and uv run … directly.
Changes:
- Removes
tox.iniand top-levelrequirements.in/requirements.txt, and updatesuv.lockaccordingly (droppingpip-tools,build,twine, and related transitive deps). - Rewrites GitHub Actions workflows to run per-group CI tasks via
uv sync --group <group>anduv run <tool>(tests, linting, type checks, coverage, docs, packaging). - Updates developer documentation and tooling: adds
[tool.uv] default-groups = [], introducesuv-lockpre-commit hook, updates VS Code interpreter path, and refreshes tox-referencing comments.
Reviewed changes
Copilot reviewed 16 out of 19 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
uv.lock |
Updates locked dependency graph to reflect removal of tox/pip-tools and packaging tool deps. |
tox.ini |
Removes tox configuration entirely as part of the uv-only migration. |
scripts/generate_docs_assets.py |
Updates documentation-generation prerequisites and local link paths to match the new uv/docs build layout. |
requirements.txt |
Removes top-level pip-compiled requirements output. |
requirements.in |
Removes top-level pip-compile input file. |
README.rst |
Updates contributor instructions to run checks via uv groups instead of tox. |
pyproject.toml |
Drops the packaging dependency group, removes pip-tools from dev, and sets tool.uv.default-groups = []. |
generate_or_validate_json_schemas.py |
Updates module comments/instructions from tox-based to uv-group-based invocation. |
docs/contributing_guide.rst |
Rewrites contributor workflow guidance to use uv sync/uv run directly (no tox). |
.vscode/settings.json |
Points the Python interpreter to .venv/bin/python instead of .tox/.... |
.pre-commit-config.yaml |
Adds astral-sh/uv-pre-commit uv-lock hook to keep uv.lock current. |
.gitignore |
Removes .tox/ ignore entry as tox is removed. |
.github/workflows/tests.yml |
Runs tests via uv sync --group tests and uv run pytest. |
.github/workflows/test_docs.yml |
Runs docs checks via uv (sync + schema generation + asset generation + sphinx-build + doctest). |
.github/workflows/python-publish.yml |
Updates release workflows to use uv directly (tests, schema generation, docs build steps, and uv build). |
.github/workflows/packaging_test.yml |
Replaces tox packaging env with uv build + uv publish --dry-run. |
.github/workflows/linting.yml |
Replaces tox envs with group-specific uv sync + direct pylint/mypy/pre-commit commands. |
.github/workflows/docs_latest.yml |
Updates docs deployment workflow to use uv sync and direct schema + asset generation steps. |
.github/workflows/coverage.yml |
Runs coverage via uv sync --group coverage and direct coverage run/html/report. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
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.
Summary
[dependency-groups]and dropped pip-compile'd dev requirements, but kepttox/tox-uvas an intermediate layer and still generated a top-levelrequirements.txtwith pip-compile.tox.iniand the top-levelrequirements.in/requirements.txt, and rewrites CI workflows to calluv sync --group <group>+uv run <tool>directly instead ofuv run tox -e <env>.packagingdependency-group (build,twine) in favor ofuv build/uv publish --dry-runnatively, and removespip-toolsfrom thedevgroup.[tool.uv] default-groups = []so per-group CI jobs (linting, type_check, ...) don't silently also install the wholedevgroup.astral-sh/uv-pre-commituv-lockhook to keepuv.lockcurrent automatically..vscode/settings.json, and stale in-code comments that referencedtox.docs/requirements.txtis intentionally kept — thesphinx-notes/pagesaction needs a standalone requirements file at a known path.Test plan
uv lock— resolves cleanly, dropsbuild/twine/pip-toolsand their transitive depsuv sync --group dev+uv run pytest— 107 passeduv sync --group linting+uv run pylint src/bo4e/generate_or_validate_json_schemas.py— 10.00/10uv sync --group type_check+uv run mypyonsrc/bo4e,tests,generate_or_validate_json_schemas.py— no issuesuv sync --group coverage+uv run coverage run/html/report --fail-under 99— 99% (passes)uv sync --group json_schemas+uv run python generate_or_validate_json_schemas.py --mode generate— matches CI invocationuv sync --group docs+uv run python -c "import bo4e; print(bo4e.__gh_version__)"— worksuv build+uv publish --dry-run— builds sdist/wheel, dry-run exits 0pre-commit run --all-files— all hooks pass, including the newuv-lockhookgrep -rnE "setup-uv@v[0-9]+$" .github/workflows/— no floating-major tagstests (3.10/3.11/3.12, ubuntu-latest),Python Code Quality and Lint (3.12, ubuntu-latest, {linting,type_check,dev}),coverage (3.12, ubuntu-latest),formatting,Check Docs (3.12, ubuntu-latest)) — matrix job names were kept unchanged so required-check names still match🤖 Generated with Claude Code