🔧 Modernize packaging, tooling and CI#21
Merged
Conversation
All CI jobs were failing: Python 3.7-3.9 are no longer available on
ubuntu-latest runners, and the tests that did run failed against modern
Sphinx/docutils.
- Packaging: require Python >=3.11 and sphinx>=8,<10; update classifiers,
project URLs (repo moved to sphinx-extensions2) and flit sdist excludes
- Drop the docutils<0.18 findall/traverse compatibility shim
- Lint: replace black/isort/flake8/pyupgrade with ruff-check + ruff-format
- CI: add a pre-commit job; test matrix of py3.11-3.14 x sphinx 8/9 (plus
Windows); add a PyPI trusted-publishing job on version tags
- tox: py{311-314}-sphinx{8,9} and docs-{update,clean} environments
- Read the Docs: ubuntu-24.04/py3.12 and the now-required configuration key
- Tests: make the .tex output filename version-agnostic (Sphinx >=7.2
renamed the default project); serialize the is_subfigure attribute as a
string so doctree fixtures are stable across docutils 0.21/0.22
All 15 tests pass against both sphinx 8.2/docutils 0.21 and
sphinx 9.0/docutils 0.22, and the docs build warning-free on Sphinx 9.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CQYXtJrMEhZWpJVvBcx7ff
This was referenced Jul 12, 2026
Closed
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.
All CI jobs are currently failing: Python 3.7–3.9 are no longer available on
ubuntu-latestrunners (the jobs die at "Set up Python"), and the one job that does run (py3.10) fails in pytest against modern Sphinx/docutils. This PR brings the project's tooling in line with MyST-Parser's current setup and makes CI green again.Packaging
>=3.11andsphinx>=8,<10; update classifiers accordinglysphinx-extensions2) and add a Documentation URLflit_core >=3.4and sdist excludes fordocs//tests/<0.18findall/traversecompatibility shim (_compat.py) — no longer reachable with the new support floorLint / format
pre-commit-hooksto v6CI
>=8,<9/>=9,<10, plus two Windows jobsactions/checkout@v6/setup-python@v6(were v2/v1)v*tags using trusted publishing —pypi) in the PyPI project settings before the next releaseCODECOV_TOKENwith current codecov-action versions); coverage still reports in the job logTests (the py3.10 pytest failures)
python.tex, but Sphinx ≥7.2 renamed the default project (projectnamenotset.tex) — now globs for the.texfileis_subfigure="True", but docutils 0.22 serializes bool attributes as"1"(0.21 as"True"), so no single fixture could pass the whole matrix — the attribute is now the string"true", which serializes identically on all versionssphinx 8.2.3 / docutils 0.21.2andsphinx 9.0.4 / docutils 0.22.4tox / Read the Docs
py{311,312,313,314}-sphinx{8,9}anddocs-{update,clean}environmentsubuntu-24.04/ Python 3.12, and the now-mandatorysphinx.configurationkey (docs build verified warning-free locally with-nWon Sphinx 9 + latest myst-parser/furo)Also updates
AGENTS.mdto match (removed_compat.py, ruff, new tox env names).Deliberately not included, to leave the contributor PRs intact: the debug
print()removal (#19) and the parallel read/write declaration (#16) — both still apply cleanly on top of this.