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.)

    • Add highlighted new features to

  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

    • Update highlighted new features to

  5. T-1: all reserve week for wrapping up PRs and review.

  6. T±0: Release Manager release!

    • Have a look at Python release schedule, and time Arbor release optimally with new Python minor version. It is nice to generate wheels for the new minor as soon as minor is released.

  7. 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. Check,,,

  2. Create new temp-branch ending in -rc. E.g. v0.6-rc

  3. Bump the VERSION file: Don’t append -rc here, but if you do, remove it before releasing.

  4. Run all tests. - ciwheel.yml triggers when you push a branch called v*rc, ON YOUR OWN REPO (so check$yourname/arbor/actions). Make sure the tests pass. - This should catch many problems. For a manual check: - Verify (required for PyPI sdist) - Check Python/pip/PyPi metadata and scripts, e.g. - Double check that all examples/tutorials/etc are covered by CI

Test the RC

  1. Collect artifact from the above GA run. In case you want to manually want to trigger ciwheel.yml GA, overwrite the ciwheel branch with the commit of your choosing and force push to Github.

  2. twine upload -r testpypi dist/*

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

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


  1. Make sure ciwheel.yml passes tests, produced working wheels, and nobody reported problems testing the RC. Make sure VERSION does not end with -rc or -dev

  2. 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

  3. Tag and release:

    • on cmdline: git tag -a TAGNAME

    • git push upstream TAGNAME

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

    • Go through merged PRs to come up with a changelog Or categorize/edit Github’s autogenerated release notes.

    • add tarball to release, created in previous step.

  4. [AUTOMATED] push to

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

    • Of course, the above action must have passed the tests successfully.

  6. Upload to TEST pypi & verify

twine upload -r arborpypi dist/*
python -m venv env && source env/bin/activate
pip install numpy
pip install -i arbor==0.6
python -c 'import arbor; print(arbor.__config__)'
  1. Upload to pypi & verify

twine upload -r arborpypi dist/*

python -m venv env && source env/bin/activate
pip install arbor
python -c 'import arbor; print(arbor.__config__)'
  1. Update spack package / Ebrains Lab

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

    • Then, use the file to make PR here

    • Make an MR here

  2. In the same PR with the update to spack/, bump VERSION file.

    • e.g. to 0.6.1-dev

  3. In the same PR with the update to spack/, add new Zenodo badge/link.

    • Start a new release on Zenodo, this allocated a DOI, but you don’t have to finish it right away. OTOH, you can already make and upload the tarball in step 1.

Post Release

  1. Update and submit Zenodo release if necessary.

  2. Announce on our website

  3. Announce on HBP newsletter, HBP Twitter/socials

  4. [AUTOMATED] Add tagged version of docs on ReadTheDocs

  5. HBP internal admin

  6. FZJ admin