Release checklist
This checklist keeps the PyPI release focused on the scientific Python package.
The repository also contains docs, site, notebooks, tests, and reference tooling,
but the PyPI artifacts should ship only mlx_atomistic plus package metadata.
Local gates
Section titled “Local gates”Run these from the repository root on an Apple Silicon machine with usable Metal:
RELEASE_DIST=/tmp/mlx-atomistic-release-distrm -rf "$RELEASE_DIST"UV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv lock --checkUV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv sync --locked --no-default-groups --extra prep --group testUV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv run --locked --no-default-groups --group test ruff check src tests scriptsUV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv run --no-project --python 3.13.12 python scripts/sync_site_docs.pyUV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv run --no-project --python 3.13.12 python scripts/sync_site_docs.py --checkUV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv run --no-project --with griffe --python 3.13.12 python scripts/gen_api_docs.pyUV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv run --locked --no-default-groups --extra prep --group test python -m pytest -m "not slow"UV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv run --locked --no-default-groups --extra prep --group test python -m pytest --cov=mlx_atomistic --cov-report=term-missingUV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv build --out-dir "$RELEASE_DIST"UV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv run --no-project --with twine twine check "$RELEASE_DIST"/*UV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv run --no-project --python 3.13.12 python scripts/check_dist_contents.py "$RELEASE_DIST"/*Routine correctness runs on the Linux CPU backend. GitHub Actions uses
ubuntu-22.04 and mlx-cpu; Metal remains a local development and
optimization surface rather than a release gate.
Reference-engine and vendor-data validation is not a PyPI gate. Run it only after explicitly provisioning the local reference surfaces:
UV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv run --locked --no-default-groups --group dev python -m pytest --run-reference -m referenceUV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv run --locked --no-default-groups --group dev python -m pytest --run-data -m dataUV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv run --locked --no-default-groups --group test python -m pytest --run-gpu -m gpuUV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv run --locked --no-default-groups --extra prep --group test python -m pytest --run-perf -m perfArtifact inspection
Section titled “Artifact inspection”Confirm the wheel contains the package, metadata, license, entry points, and the
py.typed marker:
unzip -l /tmp/mlx-atomistic-release-dist/mlx_atomistic-*.whlConfirm the source distribution excludes monorepo surfaces such as .github/,
site/, notebooks/, tests/, scripts/, docs/, AGENTS.md, CLAUDE.md,
and uv.lock. Hatchling may still include the root .gitignore as sdist build
provenance:
tar -tzf /tmp/mlx-atomistic-release-dist/mlx_atomistic-*.tar.gzInstall the wheel outside the checkout and verify the import:
UV_CACHE_DIR=/tmp/mlx-atomistic-uv-cache uv run --no-project --isolated --with /tmp/mlx-atomistic-release-dist/mlx_atomistic-*-py3-none-any.whl python -c "import mlx_atomistic as ma; print(ma.__version__)"Publishing
Section titled “Publishing”PyPI Trusted Publishing is configured through a pending publisher for:
- Repository:
appautomaton/mlx-atomistic - Workflow:
workflow.yml - Environment:
pypi - Project:
mlx-atomistic
Publishing happens when a GitHub release is published. The pending publisher does not reserve the project name until the first successful publish, so avoid a long delay between final validation and the first release.