From e1445302875787d0826ed15640037511ecd9cd5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Eertmans?= Date: Fri, 18 Apr 2025 12:30:40 +0200 Subject: [PATCH 1/2] chore(dev): move dev-dependencies inside dependency-groups --- .github/workflows/tests.yml | 2 +- .readthedocs.yaml | 12 +-- CHANGELOG.md | 9 ++ docs/source/contributing/workflow.md | 2 +- pyproject.toml | 64 +++++------ uv.lock | 155 ++++++++++++++++----------- 6 files changed, 141 insertions(+), 103 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index fc262413..89422e92 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -96,7 +96,7 @@ jobs: uses: ssciwr/setup-mesa-dist-win@v2 - name: Run pytest - run: uv run --python ${{ matrix.pyversion }} --frozen --extra tests pytest + run: uv run --python ${{ matrix.pyversion }} --frozen --group tests --no-dev pytest - name: Upload to codecov.io uses: codecov/codecov-action@v5 diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 5b11b321..cc455e79 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -6,13 +6,13 @@ build: apt_packages: - libpango1.0-dev - ffmpeg +jobs: + post_create_environment: + - asdf plugin add uv + - asdf install uv latest + - asdf global uv latest + - UV_PROJECT_ENVIRONMENT=$READTHEDOCS_VIRTUALENV_PATH uv sync --group docs --no-dev --no-cache sphinx: builder: html configuration: docs/source/conf.py fail_on_warning: true -python: - install: - - method: pip - path: . - extra_requirements: - - docs diff --git a/CHANGELOG.md b/CHANGELOG.md index 67570aa6..ee684d7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 (unreleased)= ## [Unreleased](https://github.com/jeertmans/manim-slides/compare/v5.5.1...HEAD) +(unreleased-chore)= +### Chore + +- Moved `docs` and `tests` extras, as well as `dev-dependencies`, + inside groups in `dependency-groups`. This could break existing code + when using one of those extras, but as they were not part of the public API, + we do not consider this to be a **breaking change**. + [#542](https://github.com/jeertmans/manim-slides/pull/542) + (v5.5.1)= ## [v5.5.1](https://github.com/jeertmans/manim-slides/compare/v5.5.0...v5.5.1) diff --git a/docs/source/contributing/workflow.md b/docs/source/contributing/workflow.md index 4d10fdcc..1fd8a6d9 100644 --- a/docs/source/contributing/workflow.md +++ b/docs/source/contributing/workflow.md @@ -32,7 +32,7 @@ and development dependencies. If not already, please install this tool. With uv, installation becomes straightforward: ```bash -uv sync --all-extras +uv sync ``` :::{note} diff --git a/pyproject.toml b/pyproject.toml index 82350caa..1bc2bffa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,6 +2,39 @@ build-backend = "hatchling.build" requires = ["hatchling", "hatch-fancy-pypi-readme"] +[dependency-groups] +dev = [ + {include-group = "docs"}, + {include-group = "tests"}, + "bump-my-version>=0.20.3", + "pre-commit>=3.5.0", + "setuptools>=73.0.1", +] +docs = [ + "manim-slides[magic,manim,pyqt6,sphinx-directive]", + "furo>=2023.5.20", + "ipykernel>=6.25.1", + "myst-parser>=2.0.0", + "nbsphinx>=0.9.2", + "pandoc>=2.3", + "pygments<2.19", # See: https://github.com/ManimCommunity/manim/issues/4104 + "sphinx>=7.0.1", + "sphinxcontrib-programoutput>=0.18", + "sphinx-design>=0.6.1", + "sphinx-click>=4.4.0", + "sphinx-copybutton>=0.5.1", + "sphinxext-opengraph>=0.7.5", +] +tests = [ + "importlib-metadata>=8.6.1;python_version<'3.10'", + "manim-slides[full,manimgl,pyqt6,pyside6,sphinx-directive]", + "pytest>=7.4.0", + "pytest-cov>=4.1.0", + "pytest-env>=0.8.2", + "pytest-missing-modules>=0.1.0", + "pytest-qt>=4.2.0", +] + [project] authors = [{name = "Jérome Eertmans", email = "jeertmans@icloud.com"}] classifiers = [ @@ -42,21 +75,6 @@ name = "manim-slides" requires-python = ">=3.9" [project.optional-dependencies] -docs = [ - "manim-slides[magic,manim,pyqt6,sphinx-directive]", - "furo>=2023.5.20", - "ipykernel>=6.25.1", - "myst-parser>=2.0.0", - "nbsphinx>=0.9.2", - "pandoc>=2.3", - "pygments<2.19", # See: https://github.com/ManimCommunity/manim/issues/4104 - "sphinx>=7.0.1", - "sphinxcontrib-programoutput>=0.18", - "sphinx-design>=0.6.1", - "sphinx-click>=4.4.0", - "sphinx-copybutton>=0.5.1", - "sphinxext-opengraph>=0.7.5", -] full = [ "manim-slides[magic,manim,sphinx-directive]", ] @@ -68,15 +86,6 @@ pyqt6-full = ["manim-slides[full,pyqt6]"] pyside6 = ["pyside6>=6.6.1,!=6.8.1.1"] pyside6-full = ["manim-slides[full,pyside6]"] sphinx-directive = ["docutils>=0.20.1", "manim-slides[manim]"] -tests = [ - "importlib-metadata>=8.6.1;python_version<'3.10'", - "manim-slides[full,manimgl,pyqt6,pyside6,sphinx-directive]", - "pytest>=7.4.0", - "pytest-cov>=4.1.0", - "pytest-env>=0.8.2", - "pytest-missing-modules>=0.1.0", - "pytest-qt>=4.2.0", -] [project.scripts] manim-slides = "manim_slides.__main__:cli" @@ -225,10 +234,3 @@ isort = {known-first-party = ["manim_slides", "tests"]} [tool.ruff.lint.per-file-ignores] "docs/source/reference/magic_example.ipynb" = ["F403", "F405"] "tests/test_slide.py" = ["N801"] - -[tool.uv] -dev-dependencies = [ - "bump-my-version>=0.20.3", - "pre-commit>=3.5.0", - "setuptools>=73.0.1", -] diff --git a/uv.lock b/uv.lock index 6d445040..65751ee8 100644 --- a/uv.lock +++ b/uv.lock @@ -1549,27 +1549,6 @@ dependencies = [ ] [package.optional-dependencies] -docs = [ - { name = "docutils" }, - { name = "furo" }, - { name = "ipykernel" }, - { name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "ipython", version = "8.31.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "manim" }, - { name = "myst-parser", version = "3.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "myst-parser", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "nbsphinx" }, - { name = "pandoc" }, - { name = "pygments" }, - { name = "pyqt6" }, - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "sphinx-click" }, - { name = "sphinx-copybutton" }, - { name = "sphinx-design" }, - { name = "sphinxcontrib-programoutput" }, - { name = "sphinxext-opengraph" }, -] full = [ { name = "docutils" }, { name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, @@ -1611,27 +1590,59 @@ sphinx-directive = [ { name = "docutils" }, { name = "manim" }, ] -tests = [ - { name = "docutils" }, + +[package.dev-dependencies] +dev = [ + { name = "bump-my-version" }, + { name = "furo" }, { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "ipython", version = "8.31.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "manim" }, - { name = "manimgl" }, - { name = "pyqt6" }, - { name = "pyside6" }, + { name = "ipykernel" }, + { name = "manim-slides", extra = ["full", "magic", "manim", "manimgl", "pyqt6", "pyside6", "sphinx-directive"] }, + { name = "myst-parser", version = "3.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "myst-parser", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "nbsphinx" }, + { name = "pandoc" }, + { name = "pre-commit" }, + { name = "pygments" }, { name = "pytest" }, { name = "pytest-cov" }, { name = "pytest-env" }, { name = "pytest-missing-modules" }, { name = "pytest-qt" }, -] - -[package.dev-dependencies] -dev = [ - { name = "bump-my-version" }, - { name = "pre-commit" }, { name = "setuptools" }, + { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "sphinx-click" }, + { name = "sphinx-copybutton" }, + { name = "sphinx-design" }, + { name = "sphinxcontrib-programoutput" }, + { name = "sphinxext-opengraph" }, +] +docs = [ + { name = "furo" }, + { name = "ipykernel" }, + { name = "manim-slides", extra = ["magic", "manim", "pyqt6", "sphinx-directive"] }, + { name = "myst-parser", version = "3.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "myst-parser", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "nbsphinx" }, + { name = "pandoc" }, + { name = "pygments" }, + { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "sphinx-click" }, + { name = "sphinx-copybutton" }, + { name = "sphinx-design" }, + { name = "sphinxcontrib-programoutput" }, + { name = "sphinxext-opengraph" }, +] +tests = [ + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "manim-slides", extra = ["full", "manimgl", "pyqt6", "pyside6", "sphinx-directive"] }, + { name = "pytest" }, + { name = "pytest-cov" }, + { name = "pytest-env" }, + { name = "pytest-missing-modules" }, + { name = "pytest-qt" }, ] [package.metadata] @@ -1640,73 +1651,89 @@ requires-dist = [ { name = "beautifulsoup4", specifier = ">=4.12.3" }, { name = "click", specifier = ">=8.1.3" }, { name = "click-default-group", specifier = ">=1.2.2" }, - { name = "docutils", marker = "extra == 'docs'", specifier = ">=0.20.1" }, { name = "docutils", marker = "extra == 'full'", specifier = ">=0.20.1" }, { name = "docutils", marker = "extra == 'pyqt6-full'", specifier = ">=0.20.1" }, { name = "docutils", marker = "extra == 'pyside6-full'", specifier = ">=0.20.1" }, { name = "docutils", marker = "extra == 'sphinx-directive'", specifier = ">=0.20.1" }, - { name = "docutils", marker = "extra == 'tests'", specifier = ">=0.20.1" }, - { name = "furo", marker = "extra == 'docs'", specifier = ">=2023.5.20" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10' and extra == 'tests'", specifier = ">=8.6.1" }, - { name = "ipykernel", marker = "extra == 'docs'", specifier = ">=6.25.1" }, - { name = "ipython", marker = "extra == 'docs'", specifier = ">=8.12.2" }, { name = "ipython", marker = "extra == 'full'", specifier = ">=8.12.2" }, { name = "ipython", marker = "extra == 'magic'", specifier = ">=8.12.2" }, { name = "ipython", marker = "extra == 'pyqt6-full'", specifier = ">=8.12.2" }, { name = "ipython", marker = "extra == 'pyside6-full'", specifier = ">=8.12.2" }, - { name = "ipython", marker = "extra == 'tests'", specifier = ">=8.12.2" }, { name = "jinja2", specifier = ">=3.1.2" }, { name = "lxml", specifier = ">=4.9.2" }, - { name = "manim", marker = "extra == 'docs'", specifier = ">=0.19" }, { name = "manim", marker = "extra == 'full'", specifier = ">=0.19" }, { name = "manim", marker = "extra == 'magic'", specifier = ">=0.19" }, { name = "manim", marker = "extra == 'manim'", specifier = ">=0.19" }, { name = "manim", marker = "extra == 'pyqt6-full'", specifier = ">=0.19" }, { name = "manim", marker = "extra == 'pyside6-full'", specifier = ">=0.19" }, { name = "manim", marker = "extra == 'sphinx-directive'", specifier = ">=0.19" }, - { name = "manim", marker = "extra == 'tests'", specifier = ">=0.19" }, { name = "manimgl", marker = "extra == 'manimgl'", specifier = ">=1.7.2" }, - { name = "manimgl", marker = "extra == 'tests'", specifier = ">=1.7.2" }, - { name = "myst-parser", marker = "extra == 'docs'", specifier = ">=2.0.0" }, - { name = "nbsphinx", marker = "extra == 'docs'", specifier = ">=0.9.2" }, { name = "numpy", specifier = ">=1.19" }, - { name = "pandoc", marker = "extra == 'docs'", specifier = ">=2.3" }, { name = "pillow", specifier = ">=9.5.0" }, { name = "pydantic", specifier = ">=2.0.1" }, { name = "pydantic-extra-types", specifier = ">=2.0.0" }, - { name = "pygments", marker = "extra == 'docs'", specifier = "<2.19" }, - { name = "pyqt6", marker = "extra == 'docs'", specifier = ">=6.7.0" }, { name = "pyqt6", marker = "extra == 'pyqt6'", specifier = ">=6.7.0" }, { name = "pyqt6", marker = "extra == 'pyqt6-full'", specifier = ">=6.7.0" }, - { name = "pyqt6", marker = "extra == 'tests'", specifier = ">=6.7.0" }, { name = "pyside6", marker = "extra == 'pyside6'", specifier = ">=6.6.1,!=6.8.1.1" }, { name = "pyside6", marker = "extra == 'pyside6-full'", specifier = ">=6.6.1,!=6.8.1.1" }, - { name = "pyside6", marker = "extra == 'tests'", specifier = ">=6.6.1,!=6.8.1.1" }, - { name = "pytest", marker = "extra == 'tests'", specifier = ">=7.4.0" }, - { name = "pytest-cov", marker = "extra == 'tests'", specifier = ">=4.1.0" }, - { name = "pytest-env", marker = "extra == 'tests'", specifier = ">=0.8.2" }, - { name = "pytest-missing-modules", marker = "extra == 'tests'", specifier = ">=0.1.0" }, - { name = "pytest-qt", marker = "extra == 'tests'", specifier = ">=4.2.0" }, { name = "python-pptx", specifier = ">=0.6.21" }, { name = "qtpy", specifier = ">=2.4.1" }, { name = "requests", specifier = ">=2.28.1" }, { name = "rich", specifier = ">=13.3.2" }, { name = "rtoml", specifier = ">=0.11.0" }, - { name = "sphinx", marker = "extra == 'docs'", specifier = ">=7.0.1" }, - { name = "sphinx-click", marker = "extra == 'docs'", specifier = ">=4.4.0" }, - { name = "sphinx-copybutton", marker = "extra == 'docs'", specifier = ">=0.5.1" }, - { name = "sphinx-design", marker = "extra == 'docs'", specifier = ">=0.6.1" }, - { name = "sphinxcontrib-programoutput", marker = "extra == 'docs'", specifier = ">=0.18" }, - { name = "sphinxext-opengraph", marker = "extra == 'docs'", specifier = ">=0.7.5" }, { name = "tqdm", specifier = ">=4.64.1" }, ] -provides-extras = ["docs", "full", "magic", "manim", "manimgl", "pyqt6", "pyqt6-full", "pyside6", "pyside6-full", "sphinx-directive", "tests"] +provides-extras = ["full", "magic", "manim", "manimgl", "pyqt6", "pyqt6-full", "pyside6", "pyside6-full", "sphinx-directive"] [package.metadata.requires-dev] dev = [ { name = "bump-my-version", specifier = ">=0.20.3" }, + { name = "furo", specifier = ">=2023.5.20" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'", specifier = ">=8.6.1" }, + { name = "ipykernel", specifier = ">=6.25.1" }, + { name = "manim-slides", extras = ["full", "manimgl", "pyqt6", "pyside6", "sphinx-directive"] }, + { name = "manim-slides", extras = ["magic", "manim", "pyqt6", "sphinx-directive"] }, + { name = "myst-parser", specifier = ">=2.0.0" }, + { name = "nbsphinx", specifier = ">=0.9.2" }, + { name = "pandoc", specifier = ">=2.3" }, { name = "pre-commit", specifier = ">=3.5.0" }, + { name = "pygments", specifier = "<2.19" }, + { name = "pytest", specifier = ">=7.4.0" }, + { name = "pytest-cov", specifier = ">=4.1.0" }, + { name = "pytest-env", specifier = ">=0.8.2" }, + { name = "pytest-missing-modules", specifier = ">=0.1.0" }, + { name = "pytest-qt", specifier = ">=4.2.0" }, { name = "setuptools", specifier = ">=73.0.1" }, + { name = "sphinx", specifier = ">=7.0.1" }, + { name = "sphinx-click", specifier = ">=4.4.0" }, + { name = "sphinx-copybutton", specifier = ">=0.5.1" }, + { name = "sphinx-design", specifier = ">=0.6.1" }, + { name = "sphinxcontrib-programoutput", specifier = ">=0.18" }, + { name = "sphinxext-opengraph", specifier = ">=0.7.5" }, +] +docs = [ + { name = "furo", specifier = ">=2023.5.20" }, + { name = "ipykernel", specifier = ">=6.25.1" }, + { name = "manim-slides", extras = ["magic", "manim", "pyqt6", "sphinx-directive"] }, + { name = "myst-parser", specifier = ">=2.0.0" }, + { name = "nbsphinx", specifier = ">=0.9.2" }, + { name = "pandoc", specifier = ">=2.3" }, + { name = "pygments", specifier = "<2.19" }, + { name = "sphinx", specifier = ">=7.0.1" }, + { name = "sphinx-click", specifier = ">=4.4.0" }, + { name = "sphinx-copybutton", specifier = ">=0.5.1" }, + { name = "sphinx-design", specifier = ">=0.6.1" }, + { name = "sphinxcontrib-programoutput", specifier = ">=0.18" }, + { name = "sphinxext-opengraph", specifier = ">=0.7.5" }, +] +tests = [ + { name = "importlib-metadata", marker = "python_full_version < '3.10'", specifier = ">=8.6.1" }, + { name = "manim-slides", extras = ["full", "manimgl", "pyqt6", "pyside6", "sphinx-directive"] }, + { name = "pytest", specifier = ">=7.4.0" }, + { name = "pytest-cov", specifier = ">=4.1.0" }, + { name = "pytest-env", specifier = ">=0.8.2" }, + { name = "pytest-missing-modules", specifier = ">=0.1.0" }, + { name = "pytest-qt", specifier = ">=4.2.0" }, ] [[package]] From b08413a0a135645a53eda5dc9c304368a770d2fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Eertmans?= Date: Fri, 18 Apr 2025 14:06:26 +0200 Subject: [PATCH 2/2] fix(ci): ci was not broken --- .readthedocs.yaml | 12 ++++++------ pyproject.toml | 2 +- uv.lock | 2 ++ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index cc455e79..4911e8e8 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -6,12 +6,12 @@ build: apt_packages: - libpango1.0-dev - ffmpeg -jobs: - post_create_environment: - - asdf plugin add uv - - asdf install uv latest - - asdf global uv latest - - UV_PROJECT_ENVIRONMENT=$READTHEDOCS_VIRTUALENV_PATH uv sync --group docs --no-dev --no-cache + jobs: + post_create_environment: + - asdf plugin add uv + - asdf install uv latest + - asdf global uv latest + - UV_PROJECT_ENVIRONMENT=$READTHEDOCS_VIRTUALENV_PATH uv sync --group docs --no-dev --no-cache sphinx: builder: html configuration: docs/source/conf.py diff --git a/pyproject.toml b/pyproject.toml index 1bc2bffa..92203d08 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,6 @@ dev = [ {include-group = "tests"}, "bump-my-version>=0.20.3", "pre-commit>=3.5.0", - "setuptools>=73.0.1", ] docs = [ "manim-slides[magic,manim,pyqt6,sphinx-directive]", @@ -33,6 +32,7 @@ tests = [ "pytest-env>=0.8.2", "pytest-missing-modules>=0.1.0", "pytest-qt>=4.2.0", + "setuptools>=73.0.1", ] [project] diff --git a/uv.lock b/uv.lock index 65751ee8..6955046f 100644 --- a/uv.lock +++ b/uv.lock @@ -1643,6 +1643,7 @@ tests = [ { name = "pytest-env" }, { name = "pytest-missing-modules" }, { name = "pytest-qt" }, + { name = "setuptools" }, ] [package.metadata] @@ -1734,6 +1735,7 @@ tests = [ { name = "pytest-env", specifier = ">=0.8.2" }, { name = "pytest-missing-modules", specifier = ">=0.1.0" }, { name = "pytest-qt", specifier = ">=4.2.0" }, + { name = "setuptools", specifier = ">=73.0.1" }, ] [[package]]