Publishing
Documentation
Section titled “Documentation”The Docs workflow builds the site on every push and pull request to main and devel. It
executes the tutorials, generates the API reference and uploads the site. Pushes to devel
also deploy it to GitHub Pages at https://max-models.github.io/tree-d-3d/.
Enable GitHub Pages once in the repository settings, with “GitHub Actions” as the source.
Releases and PyPI
Section titled “Releases and PyPI”Before merging a release to main, update the version in pyproject.toml,
src/tree_d_3d/__init__.py and CITATION.cff (including its release date), and add the release notes
to CHANGELOG.md. On every push to main, the Release workflow:
- tags the release
vX.Y.Zand creates the GitHub release, - builds the package with
uv buildand publishes it to PyPI with trusted publishing (OIDC), if that version is not already on PyPI.
One-time configuration
Section titled “One-time configuration”- Create an account on PyPI and create or claim your project name.
- In the PyPI project settings go to “Publishing” → “Add a new publisher” and fill in:
- PyPI project name:
tree-d-3d(or your project name) - Owner: your GitHub username or organization
- Repository name:
tree-d-3d - Workflow name:
release.yml - Environment name:
pypi
- PyPI project name:
- Optionally, in the GitHub repository settings create an environment named
pypiwhose deployment branches are limited tomain.
Development against the devel branches
Section titled “Development against the devel branches”Pull requests to devel test against the devel branches of the max-models packages tree-d-3d
depends on (cunumpy, plasma-plots, plasmacoll and simgeometry), pinned in uv.lock
through [tool.uv.sources]. Pull requests to main and the release use PyPI only (CI sets
UV_NO_SOURCES), and on them the Test Pytest workflow fails if the built wheel has a direct
reference (name @ git+...), which PyPI rejects. Refresh the pinned devel commits with uv lock --upgrade-package cunumpy, and reproduce a run against PyPI with UV_NO_SOURCES=true uv sync --extra test (it rewrites uv.lock, so git restore uv.lock afterwards).
Coverage
Section titled “Coverage”The tests upload coverage to Codecov. Public repositories need no
configuration; for a private one add a CODECOV_TOKEN repository secret.