npa is distributed as a source checkout plus tagged releases with built
artifacts. Every release is a git tag vX.Y.Z that matches the version
field in npa/pyproject.toml; the Release workflow
(.github/workflows/release.yml) builds the sdist and wheel, smoke-installs
the wheel, and attaches both to a GitHub Release.
-
Bump the version in
npa/pyproject.toml([project] version). Pre-1.0, breaking CLI/SDK changes bump the minor version and fixes bump the patch version. -
Update
CHANGELOG.md: move the relevant## Unreleasedentries under a new## vX.Y.Z - YYYY-MM-DDheading. Keep## Unreleasedat the top for the next cycle. -
Merge to
mainthrough the normal PR flow (CI must be green). -
Tag and push:
git checkout main && git pull git tag vX.Y.Z git push origin vX.Y.Z -
The
Releaseworkflow refuses tags whose version does not matchnpa/pyproject.toml, so a mismatched tag fails fast instead of shipping a mislabeled artifact.
Consumers who do not want a source checkout can pin a released artifact:
pip install "npa @ https://github.com/nebius/nebius-physical-ai/releases/download/vX.Y.Z/npa-X.Y.Z-py3-none-any.whl"The base wheel ships the full non-GPU workbench capability set; only the GPU
and dev extras are opt-in (npa[genesis], npa[groot], npa[sonic],
npa[dev]). The legacy npa[full]/npa[data]/npa[lancedb]/npa[viz]/
npa[server] extras still resolve as no-ops for backward compatibility.
When the project is ready to publish to PyPI:
-
Create the
npaproject on PyPI and configure a trusted publisher pointing at this repository and therelease.ymlworkflow. -
Add a
pypienvironment in the repository settings. -
Append a publish job to
release.yml:publish: needs: build runs-on: ubuntu-latest environment: pypi permissions: id-token: write steps: - uses: actions/download-artifact@v4 - uses: pypa/gh-action-pypi-publish@release/v1
Until then, GitHub Releases are the canonical distribution channel.