Skip to content

Releasing & Distribution

HyperMesh is a proprietary package distributed through a private index, not public PyPI. This page is the end-to-end release runbook.

ArtifactBuilt byContents
hypermesh-X.Y.Z-cp3XX-…-manylinux_…_x86_64.whlCI (cibuildwheel)engine .so bundled, no toolchain needed
hypermesh-X.Y.Z-cp3XX-…-manylinux_…_aarch64.whlCI (cibuildwheel)ARM64 build
hypermesh-X.Y.Z.tar.gz (sdist)CI / python -m buildsource; builds the engine via make on install
  1. Bump the version in pyproject.toml ([project].version) following SemVer. __version__ is sourced from this at runtime.
  2. Update CHANGELOG.md — move items from Unreleased into the new version section with the date.
  3. Commit + tag:
    Terminal window
    git commit -am "release: vX.Y.Z"
    git tag vX.Y.Z
    git push origin main --tags
  4. CI publishes automatically. The tag triggers the publish job in .github/workflows/ci.yml, which runs lint → type → test → build wheels (cibuildwheel) → twine upload to the private index.

When you need to publish outside CI (or for a one-off):

Terminal window
# Build + validate only (no upload)
./tools/publish.sh --check # or: nox -s publish -- --check
# Upload to your private index
export TWINE_REPOSITORY_URL="https://pypi.acme.internal/"
export TWINE_USERNAME="__token__"
export TWINE_PASSWORD="<token>"
./tools/publish.sh # or: nox -s publish

Credentials can live in ~/.pypirc instead — copy .pypirc.example and use twine upload -r hypermesh-private dist/*.

Terminal window
export TWINE_REPOSITORY_URL="https://pypi.acme.internal/"
export TWINE_USERNAME="__token__"; export TWINE_PASSWORD="<token>"
Terminal window
export TWINE_REPOSITORY_URL="https://acme.jfrog.io/artifactory/api/pypi/hypermesh-pypi"
export TWINE_USERNAME="<user>"; export TWINE_PASSWORD="<api-key>"
Terminal window
aws codeartifact login --tool twine --domain acme --repository hypermesh
# or set TWINE_* manually from: aws codeartifact get-authorization-token ...

Consumers install straight from the repo:

Terminal window
pip install "hypermesh @ git+ssh://git@github.com/acme/hypermesh.git@vX.Y.Z"

Point pip at the index and install with the extras you need:

Terminal window
pip install \
--index-url https://pypi.acme.internal/simple/ \
"hypermesh[engine,analytics]"

Pin it for a project in pip.conf / requirements.txt:

--index-url https://pypi.acme.internal/simple/
hypermesh[engine]==X.Y.Z

For machines with no network, build a self-contained bundle of the wheel/sdist plus every dependency wheel:

Terminal window
./tools/build_offline_bundle.sh "[engine,analytics]"
# → hypermesh-offline/ and hypermesh-offline.tar.gz

On the target:

Terminal window
pip install --no-index --find-links ./hypermesh-offline "hypermesh[engine,analytics]"
Terminal window
python -c "import hypermesh as hm; print(hm.__version__)"
python tools/wheel_smoke.py # golden query through the bundled engine