GWCelery is automatically deployed using GitLab’s continuous deployment features, configured through the project’s .gitlab-ci.yml file. Deployment can be managed through the GitLab project’s Environments page.
Python dependencies in the deployment environment are managed automatically using poetry.
There are two instances of GWCelery that are running on the LIGO-Caltech computing cluster and that are managed in this manner:
Playground: The playground instance is re-deployed on every push to main that passes the unit tests. It uses the
Production: The production instance is re-deployed only when manually triggered through GitLab. It uses the
When we observe that the Playground instance shows correct end-to-end behavior, we have the option of triggering a re-deployment to Production. Deployment to production should preferably occur at a release. The procedure for performing a release is described below.
It is possible to start an interactive session inside the GWCelery production environment by logging in to the LIGO-Caltech cluster, but this measure should be reserved for emergencies only.
Any manual changes to the environment may disrupt the logging and monitoring subsystems. Any files that are manually changed, added to, or removed from the deployment environment will not be captured in version control and may be rolled back without warning the next time that the continuous deployment is triggered.
Making a new release¶
We always prepare releases from the tip of the
main branch. GitLab is
configured through the project’s .gitlab-ci.yml file to automatically build
and push any tagged release to the Python Package Index (PyPI). Follow these
steps when issuing a release in order to maintain a consistent and orderly
Pick a release codename. GWCelery releases are named after cryptids. The release codename is at the discretion of the librarian doing the release. Pick the name of a cryptid for the release (see these lists of cryptids for inspiration).
Check the pipeline status. Before you begin, first make sure that the unit tests, documentation, and packaging jobs are passing. Consult the project’s GitLab pipeline status to make sure that all of the continuous integration jobs are passing on
If necessary, fix any bugs that are preventing the pipeline from passing, push the changes to main, and repeat until all jobs pass.
Update the change log. The first subsection of the change log file, CHANGES.rst, should have the title
MAJOR.MINOR.PATCH (unreleased), where
MAJOR.MINOR.PATCHwill be the version number of the new release. Review the git commit log.
Make any necessary changes to CHANGES.rst so that this subsection of the change log accurately summarizes all of the significant changes since the last release and is free of spelling, grammatical, or reStructuredText formatting errors.
Review the list of changes and make sure that the new version number is appropriate. We follow SemVer very loosely, and also generally bump at least the minor version number at the start of a new LSC/Virgo engineering or observing run.
Commit and push any corrections to CHANGES.rst to
Complete the acceptance tests. Our acceptance tests consist of a manual checklist for verifying that the pipeline satisfies certain requirements on the playground environment. The checklist is maintained as a GitLab issue template and is under version control in the special directory .gitlab/issue_templates.
Create a new issue in GitLab. Set the title to
Release version MAJOR.MINOR.PATCH. In the
Choose a templatedropdown menu, select
Create a Release. The description field will be automatically populated with the checklist. Submit the issue.
Complete the items in the checklist and check them off one by one on the release issue before proceeding to the next step. On occasion, an external service like GCN might not be available. If so, cross out the checklist item and note the reason.
Tag the release. Change the title of the first section of CHANGES.rst to
MAJOR.MINOR.PATCH "Codename" (YYYY-MM-DD)where
YYYY-MM-DDis today’s date and
Codenameis the release codename. Commit with the message
Update changelog for version MAJOR.MINOR.PATCH "Codename"; closes #N, where
Nis the release issue’s number.
Create a git tag to mark the release by running the following command:
$ git tag vMAJOR.MINOR.PATCH -m "Version MAJOR.MINOR.PATCH"
Create a change log section for the next release. Add a new section to CHANGES.rst with the title
NEXT_MAJOR.NEXT_MINOR.NEXT_PATCH (unreleased), where
NEXT_MAJOR.NEXT_MINOR.NEXT_PATCHis a provisional version number for the next release. Add a single list item with the text
No changes yet.Commit with the message
Back to development.
Push the new tag and updated change log. Push the new tag and updated change log:
git push && git push --tags
You will need the appropriate permission to push the new tag. If required, contact one of the maintainers.
Wait a couple minutes, and then verify that the new release has been published on our PyPI project page, https://pypi.org/project/gwcelery/.
If desired, navigate to the GitLab project’s Environments page and trigger a deployment to production.
Each pipeline has an interface which enables deployment to the available environments.