Release procedure

Test phase

  • Decide whether it’s a minor or major increment, and set version number in CMakeLists.txt
  • Decide and set recommended_python_minor in hugo/hugo.toml
  • Declare feature freeze
  • Release new versions of library dependencies (heinz, ff) if they have changed
  • Start release branch
  • Update CHANGELOG
  • Build packages, and test them
    • installation procedures according to webdocs
    • run Python scripts
  • Start new branch in ba-www, and write release letter (content/news/release-*.md)

Finalize release

  • Finalize bornagain (MRs against release branch):
    • Finalize CHANGELOG
    • In hugo/hugo.toml, update baseURL, release_number, version_name, url_blob
  • After merger into release branch, set git tag vx.y

Finalize ba-www (in fresh release branch):

  • Finalize release letter
  • Update content/documentation.md
  • Update static/js/version_switch
  • In hugo.toml, update version_mm
  • Hold back MR until everything else is ready

Upload wheels

Wheels are built automatically by CI when the git tag is pushed. They are produced for Linux (manylinux), Windows, and macOS, across all supported Python versions.

To download the artifacts and push them to PyPI, run from the BornAgain source directory:

export TWINE_TOKEN=<PyPI API token>
./scripts/pypi-push

The script fetches all wheel artifacts from the CI pipeline for the latest tag, lists them with sizes, and asks for confirmation before uploading. This creates a new version on PyPI and is irreversible.

Zenodo deposit

Run zenodo-push from the scg-intern repository:

export ZENODO_TOKEN=<Zenodo API token>
zenodo-push

The script archives the latest tagged commit, uploads it to Zenodo, and publishes the record.

Publish

  • Create release in Jugit

  • As www on @scg3

    cd ~/ba
    cp -pr <old_version>/repo <new_version>/repo; # for hotfix, use extant directory
    git fetch --all --prune
    git checkout <release_branch>
    git pull --all
    cd build
    cmake .. -GNinja
    cmake --build . --parallel
    ctest
    cmake --build . --target figures
    cd ../hugo
    hugo
    cd ../..
    ln -si repo/hugo/public hugo-public
    cd ~/www/ba/public
    ln -si /home/www/ba/VERSION/hugo-public VERSION
    rm latest
    ln -si VERSION latest
    
  • Merge release branch to ba-www => Docs will automatically be updated

  • Inform users

    • Mail to BornAgain mailing list
    • For major milestones, mail to external mailing lists (neutron, sa_scat [unsigned mails only!])
    • Update “Latest” section on computing.mlz-garching.de

Continue development

  • Merge changes back into main
    • fork new feature branch from main
    • merge release branch
    • restore “git-develop” in hugo/hugo.toml
    • update version number in CMakeLists.txt
    • create MR against main