This page describes the steps required to author a release of
the gwosc
Python client.
Notes:
-
gwosc
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.
1.0.0
rather than1.0
or just1
. -
The instructions below presume that you have cloned the
gwosc/client
gitlab project with https://git.ligo.org/gwosc/client.git configured as aremote
namedupstream
:git remote add upstream https://git.ligo.org/gwosc/client.git
All releases should be accompanied by a comprehensive set of release notes, written using GitLab Flavoured Markdown (GLFM) syntax. This normally takes the form of minimum summary information, then an itemised list of changes included in this release relative to the previous release, grouped by their API-compatibility:
- Backwards-incompatible changes,
- Backwards-compatible changes,
- Bug fixes and other changes.
The list of changes can just be a list of the merge requests associated with
the relevant gitlab milestone, including the !123
reference and a small
summary, e.g.:
- [!123] fix bug in
gwosc.timeline.get_segments
Include a link to the release itself at the bottom of the release notes.
Full example:
gwosc 3.0.0
New major release of the GWOSC Python client. This is the first release to formally support Python 4.0.0.
Backwards-incompatible changes:
- [!300] remove deprecated thing
- [!301] drop support for Python 3.10
Backwards-compatible changes:
- [!302] add
gwosc.magic.thing()
function to do magicBug fixes and other changes:
- [!303] fix bug in
gwosc.timeline.get_segments
- [!304] fix typo in docstring for
gwosc.datasets.find_datasets
For a full list of changes related to this release, please see
For a major (X.0.0
) or minor (X.Y.0
) release:
-
Fetch the latest commits for the
upstream/main
branch:git fetch upstream git checkout upstream/main
-
Choose the
X.Y
version number:export GWOSC_VERSION="X.Y"
e.g.
export GWOSC_VERSION="1.2"
-
Tag the release:
git tag --sign v${GWOSC_VERSION}.0
This will open an editor, into which you should insert the release notes.
-
Create a maintenance branch:
git branch release/${GWOSC_VERSION}.x
-
Publish the new tag and the maintenance branch:
git push --signed=if-asked upstream v${GWOSC_VERSION}.0 release/${GWOSC_VERSION}.x
Bug-fix (patch) releases are handled slightly differently, mainly due to the
use of a release/X.Y.x
maintenance branch.
-
Choose the
X.Y.Z
version number:export GWOSC_VERSION="X.Y.Z"
e.g.
export GWOSC_VERSION="1.2.3"
-
Fetch the latest commits for the
release/X.Y.x
maintenance branch:git fetch upstream git checkout upstream/release/${GWOSC_VERSION%.*}.x
-
Tag the release:
git tag --sign v${GWOSC_VERSION}
This will open an editor, into which you should insert the release notes.
-
Publish the new tag:
git push --signed=if-asked upstream v${GWOSC_VERSION}
-
Draft a release on GitLab
- Go to https://git.ligo.org/gwosc/client/-/releases/new.
- Select the new tag from the Tag name dropdown menu.
- Use
gwosc X.Y.Z
as the Release title. - Copy the release notes into the text box (omitting the title line).
Package distributions for PyPI, Conda, Debian, and RHEL are done manually:
To create a new release on PyPI:
# remove old distributions
git clean -dfX
# check out the release tag
git checkout vX.Y.Z
# generate the distributions
python -m build
# upload the distributions to pypi.org
python -m twine upload --sign dist/gwosc-X.Y.Z*
Once the PyPI upload has completed, the conda-forge bot will automatically open a pull request to conda-forge/gwosc-feedstock. Just double-check that the dependencies and tests are up-to-date, then merge.
To requests Debian/RHEL packages to be built and for this new version to be included in the IGWN software repositories, open an SCCB request.