Skip to content

Run coverage from pytest addopts; add Sphinx docs - #47

Merged
pattonw merged 4 commits into
mainfrom
chore/best-practices
Nov 5, 2026
Merged

pattonw merged 4 commits into
mainfrom
chore/best-practices

Conversation

@pattonw

@pattonw pattonw commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

uv run pytest now measures coverage

[tool.pytest.ini_options] addopts carries --cov --cov-report=term-missing, so the README's uv run pytest prints the coverage table and enforces the committed fail_under floor exactly as CI does. The CI step drops the flags it no longer needs. A single file can be run without the floor:

uv run pytest --no-cov tests/<file>.py

testpaths = ["tests"] replaces the tests argument on the command line.

Sphinx docs

docs/ builds with sphinx, autodoc, napoleon, autodoc-typehints, autodoc_pydantic and myst on the pydata theme, from a docs dependency group. The index includes the README. Two hand-written pages: Arrays and metadata (the five metadata fields and their defaults, how a MetaDataFormat maps them onto attributes, and the four config file locations with their precedence) and Graph databases (attribute types, Vec, and the rule that an edge belongs to the ROI of its u endpoint on read and write). The API page is generated from the docstrings; three malformed `class:Roi` roles in array.py become :class:`Roi` . The docs workflow builds with -W on push to main and deploys to GitHub Pages; the README and [project.urls] link the site, which goes live with the first run on main. Ruff now excludes *.md, since ruff 0.17 formats code blocks inside Markdown.

Verified locally: uv run pytest passes the floor, uv run --group docs sphinx-build -W docs/source docs/build/html succeeds, ruff and ty clean.

Import time and test duration, tracked per commit

The tests job times its own uv run pytest and measures the cold import of funlib.persistence (benchmarks/run.py), and uploads the two numbers as an artifact from the floor-interpreter, highest-resolution cell. A new benchmark workflow runs when a tests run on main completes, downloads that artifact, creates the gh-pages branch if it is missing, and publishes with github-action-benchmark to gh-pages:dev/bench, with a comparison table in the job summary and a commit comment when a metric gets 1.5x worse. The docs gain a Benchmarks page that charts every metric from that data; the docs workflow now runs after each benchmark run (instead of on push) and copies dev/bench from gh-pages into the deployed site, so the charts carry the newest point and the action's own dashboard stays reachable under the docs site. Nothing runs the test suite twice.

The same setup runs end to end in pattonw/prototype-lib.

🤖 Generated with Claude Code

pattonw and others added 4 commits November 4, 2026 17:46
…command

`[tool.pytest.ini_options] addopts` now carries `--cov --cov-report=term-missing`,
so the README's `uv run pytest` prints the coverage table and enforces
`[tool.coverage.report] fail_under` the same way CI does. The CI step drops the
flags it no longer needs. A single-file run can skip the floor with `--no-cov`.

Co-Authored-By: Claude Mythos 5.1 <noreply@anthropic.com>
docs/ builds with sphinx, autodoc, napoleon, autodoc-typehints,
autodoc_pydantic and myst on the pydata theme (the layout the e11lib.ml docs
use), from a `docs` dependency group. The index includes the README. Two
hand-written pages: arrays and metadata (the five metadata fields and their
defaults, how a MetaDataFormat maps them onto attributes, and the four
config file locations with their precedence, from read_config), and graph
databases (attribute types, Vec, and the u-endpoint rule that decides which
edges a ROI reads and writes). The API page is generated from the
docstrings; three malformed `class:` roles in array.py become :class:. The
docs workflow builds with -W on push to main and deploys to GitHub Pages;
README and [project.urls] link the site.

Co-Authored-By: Claude Mythos 5.1 <noreply@anthropic.com>
The tests job times its own `uv run pytest`, measures the cold import of
the package's headline modules (benchmarks/run.py), and uploads the two
numbers as an artifact from one matrix cell. The benchmark workflow runs
when a tests run on main completes, downloads that artifact, creates the
gh-pages branch if it is missing, and publishes with github-action-benchmark
to gh-pages:dev/bench, with a comparison table in the job summary and a
commit comment when a metric gets 1.5x worse. The docs gain a Benchmarks
page that charts every metric from that data, one line per metric with the
commit on hover and click; the docs workflow now runs after each benchmark
run and copies dev/bench from gh-pages into the deployed site, so the
charts carry the newest point and the action's own dashboard keeps its URL.
Nothing runs the test suite twice.

Co-Authored-By: Claude Mythos 5.1 <noreply@anthropic.com>
@pattonw
pattonw merged commit 2807d17 into main Nov 5, 2026
5 checks passed
@pattonw
pattonw deleted the chore/best-practices branch November 5, 2026 03:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant