Publishing
extended-data and pytest-extended-data are released from their package paths.The workspace uses release-please, GitHub Releases, and PyPI trusted publishing. The root workspace is not published. extended-data and pytest-extended-data are released from their package paths.
Local Gates
tox -e lint,typecheck,audit,py311,py312,py313,py314,examples,docs,buildRelease Flow
- Merge feature, fix, docs, and maintenance commits to
main. release.ymlruns release-please and opens or updates package release PRs.- Merge the release PR.
- release-please creates the GitHub release and version tag.
release.ymldispatchescd.ymlwith the release tag and package name.cd.ymlpublishes the selected package to PyPI with OIDC trusted publishing.extended-datareleases also build and deploy the Sourcey site.
PyPI Trusted Publishers
Each published package needs a PyPI trusted publisher matching the workflow that uploads it. Both extended-data and pytest-extended-data publish through the standard cd.yml workflow. If a new package needs an initial PyPI pending publisher, use these values before rerunning CD:
| Field | Value |
|---|---|
| PyPI project | pytest-extended-data |
| GitHub owner | jbcom |
| GitHub repository | extended-data |
| Workflow filename | cd.yml |
| Environment | leave blank |
After the pending publisher exists, rerun the failed publish with:
gh workflow run cd.yml --ref main -f tag=pytest-extended-data-v0.1.0 -f package=pytest-extended-dataPackage-scoped release-please configuration owns package versions, package changelogs, release tags, and the release manifest. Do not add the root uv.lock as a package extra-files target; normal uv sync setup can refresh the workspace lock locally, while package builds publish from each package's committed metadata.
Manual tags and manual PyPI uploads are repair paths, not the normal release process.
