.. _gwpy-dev-release: #################### Publishing a release #################### This page describes the steps required to author a release of GWpy. Notes: * gwpy uses the `stable mainline `_ branching model for releases * all release numbers must follow `Semantic Versioning 2 `_ and include major, minor, and patch numbers, e.g. ``X.Y.Z`` rather than ``1.0`` or just ``1`` ============ Step-by-step ============ #. **If this is a bug-fix release, just check out that branch**: .. code-block:: bash git checkout release/X.Y.x #. **Update the copyright**: .. code-block:: bash python -c "from setup_utils import update_all_copyright; update_all_copyright()" git commit -S -m "Updated copyright for release" . #. **Publish the release**, allowing CI to run, and others to see it: .. code-block:: bash git push -u origin main for major/minor releases, or .. code-block:: bash git push -u origin release/X.Y.x for bug-fix releases #. **Wait patiently for the continuous integration to finish** #. **Announce the release** and ask for final contributions #. **Tag the release**: .. code-block:: bash git tag --sign vX.Y.Z #. **Create a maintenance branch** (major/minor releases only): .. code-block:: bash git branch release/X.Y.x #. **Publish everything**: .. code-block:: bash # push maintenance branch git push --signed=if-asked origin release/X.Y.x # push main branch git push --signed=if-asked origin main # push new tag git push --signed=if-asked origin vX.Y.Z #. **Draft a release on GitHub** * Go to https://github.com/gwpy/gwpy/releases/new * Use ``vX.Y.Z`` as the *Tag version* * Use X.Y.Z as the *Release title* * Copy the tag message into the text box to serve as release notes #. **Publish the release documentation** This is done from the LDAS computing centre at Caltech: .. code-block:: bash cd /home/duncan.macleod/gwpy-nightly-build/ bash release-build.sh X.Y.Z Once that is complete (~20 minutes), a few manual updates must be made: .. code-block:: bash cd /home/duncan.macleod/gwpy-nightly-build/gwpy.github.io/docs unlink stable && ln -s X.Y.Z stable sed -i 's/0.9.9/X.Y.Z/g' index.html The final command should be modified to replace the previous release ID with the current one. Then: .. code-block:: bash git commit --gpg-sign --message="X.Y.Z: release docs" git push --signed=if-asked # <- this step needs an SSH key It should take ~5 minutes for the release documentation to actually appear on https://gwpy.github.io/docs/ ============== Linked updates ============== Zenodo ------ Creating a new release on GitHub will automatically trigger a new DOI on https://zenodo.org. ==================================== Distributing the new release package ==================================== Package distributions for PyPI, Conda, Debian, and RHEL are done manually: PyPI ---- To create a new release on PyPI: .. code-block:: bash rm -rf dist/ git checkout vX.Y.Z python setup.py sdist bdist_wheel gpg --armor --detach-sign dist/gwpy-*.tar.gz twine upload dist/gwpy-* Conda ----- Once the PyPI upload has completed, the conda-forge bot will automatically open a pull request to `conda-forge/gwpy-feedstock `_. Just double-check that the dependencies and tests are up-to-date, then merge. Debian/RHEL ----------- * Upload the source tarball to software.ligo.org * Open a new request to `sccb/requests `_ to announce the new release and request package build and deployment.