mirror of
https://github.com/zulip/zulip.git
synced 2025-10-22 20:42:14 +00:00
6.6 KiB
6.6 KiB
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
- Major releases only (e.g., 4.0):
- Upgrade all Python dependencies in
requirementsto latest upstream versions so they can burn in (usepip list --outdated). - Upgrade all puppet dependencies in
puppet/deps.yaml - Upgrade all puppet-installed dependencies (e.g., Smokescreen, go,
etc) in
puppet/zulip/manifests/common.pp - Post a message to Weblate inviting translators to translate new strings.
- 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.
- Upgrade all Python dependencies in
- 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.
- Merge updated translations from Weblate (using the appropriate branch for the release).
- Use
build-release-tarballto generate a pre-release tarball. - Test the new tarball extensively, both new install and upgrade from last release, on Ubuntu 22.04.
- Repeat until release is ready.
- Send around the Paper blog post draft for review.
- Move the blog post draft to Astro:
- Use "··· > Export > Markdown" to get a pretty good Markdown
conversion, and save it in
src/postswith a filename appropriate for a URL slug. - Add the needed YAML frontmatter.
- Move any images into
publicand update their references. - Proofread, especially for formatting.
- If the draft post should remain secret until release, avoid using a guessable Git branch name for the pull request (the deployment preview URL is based on the branch name).
- Use "··· > Export > Markdown" to get a pretty good Markdown
conversion, and save it in
- Major releases only (e.g., 4.0): Schedule team members to provide extra responsive #production help support following the release.
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
docs/overview/changelog.md. - Verify the changelog passes lint, and has the right release date.
- Major releases only: Adjust the
changelog.mdheading to have the stable release series boilerplate. - Update
ZULIP_VERSIONandLATEST_RELEASE_VERSIONinversion.py. - Major releases only: Update
API_FEATURE_LEVELto a feature level for the final release, and document a reserved range.
- Copy the Markdown release notes for the release into
- Run
tools/releasewith the release version. - Update the Docker image:
- Commit the Docker updates:
- Update
ZULIP_GIT_REFinDockerfile - Update
README.md - Update the image in
docker-compose.yml, as well as theZULIP_GIT_REF
- Update
- Commit the Helm updates:
- Add a new entry to
kubernetes/chart/zulip/CHANGELOG.md - Update the
appVersioninkubernetes/chart/zulip/Chart.yaml - Update the
taginkubernetes/chart/zulip/values.yaml - Update the docs by running
helm-docs - Update the
imageinkubernetes/manual/zulip-rc.yml
- Add a new entry to
- Build the image:
docker build --pull . -t zulip/docker-zulip:4.11-0 --no-cache - Also tag it with
latest:docker build . -t zulip/docker-zulip:latest - Push those tags:
docker push zulip/docker-zulip:4.11-0; docker push zulip/docker-zulip:latest - Push the commits to
main.
- Commit the Docker updates:
- Merge the blog post PR.
- Announce the release, pointing to the blog post, via:
- Email to zulip-announce
- Email to zulip-blog-announce
- Message in #announce
- Tweet from @zulip.
- Toot from fosstodon.org/@zulip
Post-release
- The DigitalOcean one-click image will report in an internal channel once it is built, and how to test it. Verify it, then publish it to DigitalOcean marketplace.
- Major releases only:
- Create a release branch (e.g.,
4.x). - On the release branch, update
ZULIP_VERSIONinversion.pyto the present release with a+gitsuffix, e.g.,4.0+git. - On
main, updateZULIP_VERSIONto the future major release with a-dev+gitsuffix, e.g.,5.0-dev+git. Make a Git tag for this update commit with a-devsuffix, e.g.,5.0-dev. Push the tag to both zulip.git and zulip-internal.git to get a correct version number for future Cloud deployments. - Add the new release to
.github/ISSUE_TEMPLATE/2_bug_report.md. - Consider removing a few old releases from the issue template and ReadTheDocs; we keep about two years of back-versions.
- Update Weblate to add a component on the release branch for Django; then add a parallel Frontend component by using "Duplicate this component" on the Django release branch component.
- In Weblate, remove the previous stable components.
- Add a new CI production upgrade target:
- Build a docker image:
cd tools/ci && docker build --pull . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:bookworm --build-arg=VERSION=7.0 --tag=zulip/ci:bookworm-7.0 && docker push zulip/ci:bookworm-7.0 - Add a new line to the
production_upgradematrix in.github/workflows/production-suite.yml.
- Build a docker image:
- Update /history page in
templates/corporate/history.md. - Inspect all
TODO/compatibilitycomments for whether we can remove any backwards-compatibility code following this release.
- Create a release branch (e.g.,
- Minor releases only (e.g., 3.2):
- On the release branch, update
ZULIP_VERSIONto the present release with a+gitsuffix, e.g.,3.2+git. - On main, update
LATEST_RELEASE_VERSIONwith the released version, as well as the changelog changes from the release branch.
- On the release branch, update
- Prereleases only (e.g., 7.0-beta3):
- Atop the prerelease commit (e.g.,
7.0-beta3), make a commit updatingZULIP_VERSIONto the prerelease version with a+gitsuffix, e.g.,7.0-beta3+git. Push this tomain. (Ifmainhas already diverged from the prerelease, a merge commit will be needed here.) - Delete the prerelease branch (e.g.,
7.0-beta3-branch); it's now an ancestor ofmainand thus unnecessary.
- Atop the prerelease commit (e.g.,