
❌ This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.

Overview
Migrate from pip/tox/setup.py to uv, and replace flake8/black with ruff, following the same approach as learningequality/kolibri#14457.
Complexity: Low
Target branch: main
Context
Kolibri has migrated to uv for Python version management, virtual environments, dependency resolution, and CI. The same migration should be applied across the ecosystem for consistency.
The Change
- Convert
setup.py/setup.cfg to pyproject.toml with PEP 735 dependency groups
- Replace custom versioning with setuptools-scm
- Replace tox with direct uv invocation in CI
- Replace flake8/black/reorder-python-imports with ruff
- Replace pre-commit with prek
- Add yamlfmt and actionlint to pre-commit hooks
- Update CI workflows to use
astral-sh/setup-uv with enable-cache: true and cache-python: true
- Update release workflow to produce a wheel file in addition to the source distribution
- Configure
exclude-newer = "7 days" in [tool.uv] for supply chain safety
- Add
uv-lock pre-commit hook (from astral-sh/uv-pre-commit) to keep uv.lock in sync
- Update developer documentation
Acceptance Criteria
References
AI usage
This issue was drafted by Claude Code based on the Kolibri uv migration work.
❌ This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.
Overview
Migrate from pip/tox/setup.py to uv, and replace flake8/black with ruff, following the same approach as learningequality/kolibri#14457.
Complexity: Low
Target branch: main
Context
Kolibri has migrated to uv for Python version management, virtual environments, dependency resolution, and CI. The same migration should be applied across the ecosystem for consistency.
The Change
setup.py/setup.cfgtopyproject.tomlwith PEP 735 dependency groupsastral-sh/setup-uvwithenable-cache: trueandcache-python: trueexclude-newer = "7 days"in[tool.uv]for supply chain safetyuv-lockpre-commit hook (fromastral-sh/uv-pre-commit) to keepuv.lockin syncAcceptance Criteria
pyproject.tomlreplacessetup.py/setup.cfgas the single source of project metadata and configurationtox.iniremoved; CI uses uv directlyastral-sh/setup-uv@v7exclude-newercooldown configured in pyproject.tomluv-lockpre-commit hook added to.pre-commit-config.yamlReferences
AI usage
This issue was drafted by Claude Code based on the Kolibri uv migration work.