Release cycle

  1. release every 3 months (at time T)

  2. T-11 weeks: all add your favorite Issues to the next-rel column

  3. T-10 weeks: Scrum Master prep dev meet (internal)

    • Update/trim next-release column in Kanban

    • Prepare agenda, include possible additions not covered by Kanban/Issues

    • Add milestone tags (nextver, nextver+1, etc.)

  4. T-8 weeks: Release Manager dev meet (external/public)

    • Use Kanban as starter

    • Move issues around based on input

    • Add milestone tags, for this release or future releases

  5. T±0: Release Manager release!

  6. T+1 weeks: Scrum Master retrospective

    • set date for next release


These notes enumerate the steps required every time we release a new version of Arbor.


Update tags/versions and test

  1. Create new temp-branch ending in -rc. E.g. v0.5.1-rc

  2. Bump the VERSION file:

  3. Update Python/pip/PyPi metadata and scripts

  4. Double check all examples/tutorials/etc not covered by CI

Manual test (deprecated)

  1. python sdist

  2. python -m venv env

  3. source env/bin/activate

  4. move tarball here and extract

  5. pip install –upgrade pip

  6. pip install numpy

  7. pip install ./arbor-0.5.1 –verbose

  8. python -c ’import arbor; print(arbor.__config__)’

  9. twine upload -r testpypi dist/* (have some testrepo)

  10. create another venv: python -m venv env && source env/bin/activate

  11. pip install numpy

  12. pip install -i arbor==0.5.1 –verbose

  13. python -c ’import arbor; print(arbor.__config__)’

Ciwheel/automated test (replaces manual test)

  1. Create/overwrite ciwheel branch with the above branch, and push to Github.

  2. Collect artifact from GA run.

  3. twine upload -r testpypi dist/*

  4. Ask users to test the above, e.g.:

python -m venv env && source env/bin/activate
pip install numpy pip install -i arbor==0.5.1
python -c ’import arbor; print(arbor.__config__)


  1. Make sure ciwheel passes tests, produced working wheels. Make sure tests on master also passed, and master == ciwheel

  2. Tag and release:

    • on cmdline: git tag -a TAGNAME

    • git push origin TAGNAME

    • Go to GH tags and click “…” and “Create release”

    • Go through merged PRs to come up with a changelog

  3. Create tarball with scripts/create_tarball ~/loc/of/arbor tagname outputfile

    • eg scripts/create_tarball /full/path/to/arbor v0.5.1 ~/arbor-v0.5.1-full.tar.gz

  4. [AUTOMATED] push to

  5. Download output of wheel action and extract (verify the wheels and source targz is in /dist)

  6. Verify wheel

    • create venv: python -m venv env && source env/bin/activate

    • pip install arbor-0.5.1-cp39-cp39-manylinux2014_x86_64.whl

    • python -c ’import arbor; print(arbor.__config__)’

  7. Upload to pypi

    • twine upload -r arborpypi dist/*

  8. Verify

    • create venv: python -m venv env && source env/bin/activate

    • pip install arbor==0.5.1 –verbose

    • python -c ’import arbor; print(arbor.__config__)’

Post release

  1. Update spack package

    • first, update spack/ The checksum of the targz is the sha256sum.

    • Then, use the file to make PR here