Conversation
📝 WalkthroughWalkthroughMigrates project tooling from Poetry to UV: updates CI workflows, Dependabot config, pre-commit hooks, pyproject.toml packaging metadata, documentation and example commands, and minor file header and .gitignore entries to reference uv-based commands and build/version handling. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant Dev as "Developer"
participant GH as "GitHub Actions"
participant SetupUV as "astral-sh/setup-uv@v7"
participant UV as "uv (tool)"
participant Artifact as "Docs / PyPI / Test Runner"
Dev->>GH: Push or open PR
GH->>SetupUV: install latest uv runtime/action
SetupUV-->>GH: uv available
GH->>UV: run commands (uv run --frozen pytest | uv run --frozen --with docs | uv build)
UV->>Artifact: build/test/publish artifacts
Artifact-->>GH: report status / deploy results
GH-->>Dev: CI status / publish confirmation
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
🧪 Generate unit tests (beta)
No actionable comments were generated in the recent review. 🎉 🧹 Recent nitpick comments
Comment |
There was a problem hiding this comment.
Actionable comments posted: 5
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
docs/src/contributing.md (2)
90-112:⚠️ Potential issue | 🟡 MinorUpdate versioning documentation to reflect current tooling.
The documentation references
poetry-dynamic-versioningbut the project configuration (pyproject.toml) explicitly requiressetuptools-scm>=8anduv-dynamic-versioning. Update lines 92, 95, and 111 to reflect the actual versioning tools used to avoid misleading contributors.Suggested changes
-We use [`poetry-dynamic-versioning`](https://github.com/mtkennerly/poetry-dynamic-versioning) to help version this software through [`PEP 440`](https://peps.python.org/pep-0440/) standards. +We use `setuptools-scm` with `uv-dynamic-versioning` to produce `PEP 440` versions. @@ -`poetry-dynamic-versioning` uses `git` tags to help distinguish version data. +Versioning uses `git` tags to help distinguish version data. @@ -CytoDataFrame version specifications are controlled through [`poetry-dynamic-versioning`](https://github.com/mtkennerly/poetry-dynamic-versioning) which leverages [`dunamai`](https://github.com/mtkennerly/dunamai) +CytoDataFrame version specifications are controlled through `setuptools-scm` and `uv-dynamic-versioning`
18-28:⚠️ Potential issue | 🟡 Minor
uv sync --all-groupscommand is correct.Confirmed per current uv documentation: this is the recommended approach for local development/contributors who want all tooling (lint, test, docs, etc.) installed without listing each group individually.
However, the versioning section (lines 90-96) still references
poetry-dynamic-versioningand should be updated to align with the migration touv. Review whether versioning tooling has been migrated or if this reference is now stale.
🤖 Fix all issues with AI agents
In @.github/dependabot.yml:
- Around line 15-16: Update the misleading comment text that says "every week"
to match the configured interval "monthly" for the Dependabot schedule entries;
locate the comment lines adjacent to the interval: "monthly" (the two
occurrences where the comment currently reads "Check for updates to GitHub
Actions every week") and change the wording to reflect "monthly" so the comment
matches interval: "monthly".
In @.github/workflows/dependabot.yml:
- Around line 31-34: Update the workflow to pin the astral-sh/setup-uv and
j178/prek-action actions to immutable commit SHAs and provide an explicit uv
version via the setup-uv `version` input: replace uses: astral-sh/setup-uv@v7
with uses: astral-sh/setup-uv@<commit-sha> and add a with: version: "0.10.0" (or
project-configured version), and replace uses: j178/prek-action@v1 with uses:
j178/prek-action@<commit-sha> so both actions are tied to full commit SHAs to
prevent CI drift and supply-chain risk.
In @.pre-commit-config.yaml:
- Line 18: The pre-commit hook for pyproject-fmt is pinned to a non-existent
release "v2.16.0"; update the rev value in .pre-commit-config.yaml (the
pyproject-fmt hook's rev) to a real PyPI release such as "v2.12.1" (or the
latest available), then run pre-commit autoupdate / pre-commit install to verify
hooks install correctly; retain the existing hook args and uv.lock usage as-is.
In `@pyproject.toml`:
- Around line 1-3: The pyproject build configuration is incompatible because
uv-dynamic-versioning is a Hatchling-only plugin but build-backend is set to
setuptools.build_meta; either remove "uv-dynamic-versioning" from the requires
list and keep build-backend = "setuptools.build_meta" (relying on
"setuptools-scm" only), or change build-backend to "hatchling.build" and keep
"uv-dynamic-versioning" in requires; update the [build-system] section
accordingly referencing build-backend, requires, and the uv-dynamic-versioning
and setuptools-scm symbols.
In `@tests/data/cytotable/NF1_cellpainting_data_shrunken/create_image_data.py`:
- Around line 5-7: The docstring command references the wrong filename: update
the usage example so it matches the actual script name (create_image_data.py) or
rename the file to create.py to match the docstring; specifically, edit the
top-level comment in create_image_data.py to either change the example command
to `uv run python
tests/data/cytotable/NF1_cellpainting_data_shrunken/create_image_data.py` or
rename the file and update any imports/CI references so they point to
`create.py`.
🧹 Nitpick comments (2)
pyproject.toml (2)
22-43: Remove redundant<3.9dependency markers.With
requires-python >=3.11, thepython_full_version<'3.9'branches are unreachable. Consolidating these reduces confusion and lock churn.Suggested cleanup
- "pandas<2.2.2; python_full_version<'3.9'", - "pandas>=2.2.2,<3; python_full_version>='3.9'", + "pandas>=2.2.2,<3", @@ - "pywavelets>=1.4.1,<2; python_full_version<'3.9'", - "pywavelets>1.4.1; python_full_version>='3.9'", + "pywavelets>1.4.1", @@ - "scikit-image>=0.19.3,<0.20; python_full_version<'3.9'", - "scikit-image>0.19.3; python_full_version>='3.9'", + "scikit-image>0.19.3",
5-21: Align Ruff target-version with the project's Python floor.
requires-pythonis>=3.11, buttool.ruff.target-versionis set topy38(line 87). Sincetarget-versiontakes precedence overrequires-python, Ruff will only enforce compatibility checks for Python 3.8+, not 3.11+. Update it topy311to match the actual minimum supported version.Suggested update
[tool.ruff] -target-version = "py38" +target-version = "py311"
Description
This PR migrates from
poetrytouvfor environment management in the project.What kind of change(s) are included?
Checklist
Please ensure that all boxes are checked before indicating that this pull request is ready for review.
Summary by CodeRabbit
Chores
Documentation