Zulip server release checklist
This document has reminders of things one might forget to do when preparing a new release.
A week before the release
For a major release (e.g. 4.0):
Upgrade all Python dependencies in
requirementsto latest upstream versions so they can burn in (use
pip list --outdated).
Merge draft updates to the changelog with changes since the last release. While doing so, take notes on things that might need follow-up work or documentation before we can happily advertise them in a release blog post.
TODO/compatibilitycomments for whether we can remove any backwards-compatibility code in this release.
Create a burn-down list of issues that need to be fixed before we can release, and make sure all of them are being worked on.
Draft the release blog post (a.k.a. the release notes) in Paper. In it, list the important changes in the release, from most to least notable.
Final release preparation
Update the Paper blog post draft with any new commits.
Except minor releases: Download updated translation strings from Transifex and commit them.
build-release-tarballto generate a release tarball.
Test the new tarball extensively, both new install and upgrade from last release, on both Bionic and Focal.
Repeat until release is ready.
Send around the Paper blog post draft for review.
Move the blog post draft to Ghost. (For a draft in Dropbox Paper, use “··· > Export > Markdown” to get a pretty good markup conversion.) Proofread the post, especially for formatting. Tag the post with “Release announcements” in Ghost.
Executing the release
Create the release commit, on
main(for major releases) or on the release branch (for minor releases):
Copy the Markdown release notes for the release into
Except minor releases: Adjust the
changelog.mdheading to have the stable release series boilerplate.
Except minor releases: Update
API_FEATURE_LEVELto a feature level for the final release, and document a reserved range.
Tag that commit with an unsigned Git tag named the release number.
build-release-tarballto generate a final release tarball.
Push the tag and release commit.
Upload the tarball using
Post the release by editing the latest tag on GitHub; use the text from
changelog.mdfor the release notes.
Note: This will trigger the GitHub action for updating DigitalOcean one-click app image. The action uses the latest release tarball published on
download.zulip.comfor creating the image.
Update the Docker image and do a release of that.
Update the image of DigitalOcean one click app using Fabric and publish it to DO marketplace.
Publish the blog post; check the box to “send by email.”
Following a major release (e.g. 4.0):
Create a release branch (e.g.
On the release branch, update
version.pyto the present release with a
ZULIP_VERSIONto the future major release with a
5.0-dev+git. Make a Git tag for this update commit with a
5.0-dev. Push the tag to both zulip.git and zulip-internal.git to get a correct version number for future Cloud deployments.
Consider removing a few old releases from ReadTheDocs; we keep about two years of back-versions.
Following a minor release (e.g. 3.2), on the release branch:
ZULIP_VERSIONto the present release with a
LATEST_RELEASE_VERSIONwith the released version.
Cherry-pick the changelog changes back to