Using pip:
python -m pip install -e ".[dev]"
python -m pytest -q
python -m build
python -m twine check dist/*Using Pixi:
pixi install
pixi run version-show
pixi run release-checkIf you are preparing a release, bump the version first and then refresh the lock file:
pixi run version-bump 7.0.1
pixi installIf you use Pixi and pyproject.toml changed, regenerate pixi.lock with
pixi install and commit the updated lock file.
The repository includes .github/workflows/publish.yml, which is intended for
GitHub Actions Trusted Publishing.
One-time setup on GitHub:
- In the repository settings, create a GitHub Actions environment named
pypi. - Optionally add protection rules or required reviewers if you want a manual approval gate before publishing.
One-time setup on PyPI:
- Create the
arena-interfaceproject on PyPI if it does not already exist. - In the PyPI project settings, add a Trusted Publisher for this GitHub repository.
- Use workflow filename
publish.ymland environment namepypi.
Release trigger:
- Push a release tag such as
<version>orv<version>. - GitHub Actions will build
dist/*and publish to PyPI without storing a long-lived API token in GitHub secrets. workflow_dispatchis kept as a manual build/debug entry point; the actual PyPI publish step only runs for tag pushes.
The normal release path is to let GitHub Actions publish via Trusted
Publishing. Local twine upload is only needed if you intentionally want to
bypass that workflow.
Notes:
- The workflows use current
actions/upload-artifactandactions/download-artifactmajor versions to stay ahead of the GitHub-hosted runner migration away from Node.js 20. - In the PyPI publish job,
Generating and uploading digital attestationsis expected with Trusted Publishing andpypa/gh-action-pypi-publish; it is not a separate failure condition.
Conda-forge packages are maintained in a separate feedstock repository, so the upstream project does not need to vendor the feedstock into this repository.
Recommended flow after a PyPI release:
-
Wait for the
<version>sdist to be available on PyPI. -
Generate or update a conda-forge v1 recipe:
grayskull pypi --use-v1-format --strict-conda-forge arena-interface==<version>
-
Submit the generated
recipe.yamltoconda-forge/staged-recipesfor the first release, or open a PR against the existing feedstock for updates. -
Verify the recipe uses the PyPI sdist URL and SHA256,
noarch: python, andpip install . --no-deps --no-build-isolationin the build script.