Release checklist

This page provides a unified view of the release process. To determine if a step is needed, check the column of corresponding column for the sort of release you're making. The release script is make-release.py in the mediawiki/tools/release repository.

Glossary

 * WMF: Wikimedia Foundation
 * RMT: Release Management Team
 * Devs: Developers
 * R-X: Release date minus X weeks

Release process kickoff
{| class="wikitable" !|Status !|Timeline !|Major !|Patch !|Security !|Who !|Process step !|Outcome !|Comments
 * colspan="9"|
 * colspan="9"|

Decision
Example sources R-1 week
 * RMT, WMF
 * Set release date
 * Release date. Process starts
 * For major releases: coordinate with WMF
 * RMT
 * Set up release checklist
 * See Boilerplate
 * R-1 week
 * RMT
 * Check if release is neccessary
 * Decision
 * Are there any merged commits since the last release? This will be automated.
 * RMT
 * Set up release checklist
 * See Boilerplate
 * R-1 week
 * RMT
 * Check if release is neccessary
 * Decision
 * Are there any merged commits since the last release? This will be automated.
 * R-1 week
 * RMT
 * Check if release is neccessary
 * Decision
 * Are there any merged commits since the last release? This will be automated.
 * RMT
 * Check if release is neccessary
 * Decision
 * Are there any merged commits since the last release? This will be automated.
 * Are there any merged commits since the last release? This will be automated.
 * Unmerged open commits for REL1_24: https://gerrit.wikimedia.org/r/#/q/status:open+project:mediawiki/core+branch:REL1_24,n,z
 * Open issues for 1.23.x release: https://phabricator.wikimedia.org/tag/1.23.x_release/


 * RMT
 * Check if there are any security fixes
 * Decision
 * Check in Phabricator and ask Security team (Chris Steipp)
 * colspan="9"|
 * Decision
 * Check in Phabricator and ask Security team (Chris Steipp)
 * colspan="9"|
 * colspan="9"|

Setup and announcements

 * R-6 week
 * RMT
 * Announce creation of release branch on wikitech-l
 * one week prior to branching
 * R-5 week
 * RMT
 * Create release branch (REL1_XX) for core
 * R-5 week
 * RMT
 * Create release branch (REL1_XX) for extensions
 * make-extension-branches script
 * R-5 week
 * RMT
 * Update MediaWiki: Branch_points, Template:MWReleases, current release pages, e.g. MediaWiki 1.23
 * R-1 week
 * RMT
 * Announce upcoming release on wikitech-l
 * See announcement template
 * R-1 week
 * RMT
 * Announce end of lifetime for legacy and LTS releases
 * R-1 week
 * R-5 week
 * RMT
 * Create release branch (REL1_XX) for extensions
 * make-extension-branches script
 * R-5 week
 * RMT
 * Update MediaWiki: Branch_points, Template:MWReleases, current release pages, e.g. MediaWiki 1.23
 * R-1 week
 * RMT
 * Announce upcoming release on wikitech-l
 * See announcement template
 * R-1 week
 * RMT
 * Announce end of lifetime for legacy and LTS releases
 * R-1 week
 * Update MediaWiki: Branch_points, Template:MWReleases, current release pages, e.g. MediaWiki 1.23
 * R-1 week
 * RMT
 * Announce upcoming release on wikitech-l
 * See announcement template
 * R-1 week
 * RMT
 * Announce end of lifetime for legacy and LTS releases
 * R-1 week
 * RMT
 * Announce upcoming release on wikitech-l
 * See announcement template
 * R-1 week
 * RMT
 * Announce end of lifetime for legacy and LTS releases
 * R-1 week
 * RMT
 * Announce end of lifetime for legacy and LTS releases
 * R-1 week
 * RMT
 * Announce end of lifetime for legacy and LTS releases
 * R-1 week
 * R-1 week
 * R-1 week
 * R-1 week
 * R-1 week




 * RMT
 * Announce upcoming end of lifetime of this is the last maintenance version
 * colspan="9"|
 * colspan="9"|
 * colspan="9"|
 * colspan="9"|

Pre release checks and announcements

 * R-1 day
 * WMF
 * Cluster has been patched for every security fix that will be made public
 * R-1 day
 * RMT
 * send pre-release announcement to mediawiki-announce
 * See announcement template
 * R-1 day
 * R-1 day
 * RMT
 * send pre-release announcement to mediawiki-announce
 * See announcement template
 * R-1 day
 * RMT
 * send pre-release announcement to mediawiki-announce
 * See announcement template
 * R-1 day
 * send pre-release announcement to mediawiki-announce
 * See announcement template
 * R-1 day
 * R-1 day
 * R-1 day
 * R-1 day


 * RMT
 * give early access to security fixes
 * add them in cc in Phabricator (cf. T518)
 * List is tbd. currently wikia, debian and gamepedia wiki
 * }

Prepare release
{| class="wikitable" !|Status !|Timeline !|Major !|Patch !|Security !|Who !|Process step !|Outcome !|Comments
 * colspan="9"|
 * colspan="9"|

Publish Release Candidates

 * RMT
 * release initial RC
 * RMT
 * release RC1
 * RMT
 * release RC2
 * RMT
 * release RC-final
 * colspan="9"|
 * RMT
 * release RC1
 * RMT
 * release RC2
 * RMT
 * release RC-final
 * colspan="9"|
 * RMT
 * release RC1
 * RMT
 * release RC2
 * RMT
 * release RC-final
 * colspan="9"|
 * RMT
 * release RC2
 * RMT
 * release RC-final
 * colspan="9"|
 * RMT
 * release RC-final
 * colspan="9"|
 * RMT
 * release RC-final
 * colspan="9"|
 * RMT
 * release RC-final
 * colspan="9"|
 * release RC-final
 * colspan="9"|
 * colspan="9"|
 * colspan="9"|
 * colspan="9"|

Fix bugs and review changes

 * RMT, Bug wrangler
 * File blocking bugs in Phabricator with “MW-1.XX-release“ project associated
 * Devs
 * Fix blocking bugs
 * Make sure all commits also include updates to RELEASE-NOTES-1.XX
 * Reviewers
 * Review all changes tagged for that release
 * Reviewers
 * Merge changes in master, submit to REL 1_XX branch
 * RMT
 * Backport security fixes from Phabricator
 * RMT
 * Upload backports to Phabricator and seek confirmation
 * }
 * Devs
 * Fix blocking bugs
 * Make sure all commits also include updates to RELEASE-NOTES-1.XX
 * Reviewers
 * Review all changes tagged for that release
 * Reviewers
 * Merge changes in master, submit to REL 1_XX branch
 * RMT
 * Backport security fixes from Phabricator
 * RMT
 * Upload backports to Phabricator and seek confirmation
 * }
 * Reviewers
 * Review all changes tagged for that release
 * Reviewers
 * Merge changes in master, submit to REL 1_XX branch
 * RMT
 * Backport security fixes from Phabricator
 * RMT
 * Upload backports to Phabricator and seek confirmation
 * }
 * Reviewers
 * Merge changes in master, submit to REL 1_XX branch
 * RMT
 * Backport security fixes from Phabricator
 * RMT
 * Upload backports to Phabricator and seek confirmation
 * }
 * RMT
 * Backport security fixes from Phabricator
 * RMT
 * Upload backports to Phabricator and seek confirmation
 * }
 * Backport security fixes from Phabricator
 * RMT
 * Upload backports to Phabricator and seek confirmation
 * }
 * RMT
 * Upload backports to Phabricator and seek confirmation
 * }
 * RMT
 * Upload backports to Phabricator and seek confirmation
 * }
 * Upload backports to Phabricator and seek confirmation
 * }
 * }
 * }

Release
N.B. it's best to have one checkout for each release branch.

{| class="wikitable" !|Status !|Timeline !|Major !|Patch !|Security !|Who !|Process step !|Outcome !|Comments
 * colspan="9"|
 * colspan="9"|

Prepare local system

 * RMT
 * Reset local branches
 * git remote update and git reset --hard origin/master rsp. branch
 * RMT
 * Prepare security backports
 * RMT
 * Update HISTORY and CREDITS
 * With the release of a new major version, move all CHANGELOG entries that refer to the previous version to the HISTORY file.
 * RMT
 * Prepare release notes
 * RMT
 * Update version number
 * includes/DefaultSettings.php -> $wgVersion
 * RMT
 * Prepare announcement
 * RMT
 * "Load" local git master and alpha branch
 * RMT
 * "Load" local git release branches
 * RMT
 * Test changes
 * run unit tests locally
 * colspan="9"|
 * RMT
 * Update HISTORY and CREDITS
 * With the release of a new major version, move all CHANGELOG entries that refer to the previous version to the HISTORY file.
 * RMT
 * Prepare release notes
 * RMT
 * Update version number
 * includes/DefaultSettings.php -> $wgVersion
 * RMT
 * Prepare announcement
 * RMT
 * "Load" local git master and alpha branch
 * RMT
 * "Load" local git release branches
 * RMT
 * Test changes
 * run unit tests locally
 * colspan="9"|
 * RMT
 * Update version number
 * includes/DefaultSettings.php -> $wgVersion
 * RMT
 * Prepare announcement
 * RMT
 * "Load" local git master and alpha branch
 * RMT
 * "Load" local git release branches
 * RMT
 * Test changes
 * run unit tests locally
 * colspan="9"|
 * RMT
 * Prepare announcement
 * RMT
 * "Load" local git master and alpha branch
 * RMT
 * "Load" local git release branches
 * RMT
 * Test changes
 * run unit tests locally
 * colspan="9"|
 * RMT
 * "Load" local git master and alpha branch
 * RMT
 * "Load" local git release branches
 * RMT
 * Test changes
 * run unit tests locally
 * colspan="9"|
 * RMT
 * "Load" local git release branches
 * RMT
 * Test changes
 * run unit tests locally
 * colspan="9"|
 * RMT
 * Test changes
 * run unit tests locally
 * colspan="9"|
 * RMT
 * Test changes
 * run unit tests locally
 * colspan="9"|
 * RMT
 * Test changes
 * run unit tests locally
 * colspan="9"|
 * colspan="9"|
 * colspan="9"|

Produce tarball
git tag -a 1.19.20 -m "Security release 1.19.20" git push --tags
 * colspan="9"|(time critical when security fix is involved)
 * RMT
 * Push all release branches to gerrit
 * RMT
 * Merge all commits
 * Security fixes can be self-merged if they have been reviewed in Phabricator before. For RELEASE-NOTES-X.XX, get another RMT member to merge. Check if all blocking tests pass. If a test doesn't pass for an undetermined reason, write "recheck" as a comment in gerrit.
 * RMT
 * Pull merged commits
 * Wait for commits to pass through Jenkins.
 * RMT
 * Tag versions in branches
 * RMT
 * Merge all commits
 * Security fixes can be self-merged if they have been reviewed in Phabricator before. For RELEASE-NOTES-X.XX, get another RMT member to merge. Check if all blocking tests pass. If a test doesn't pass for an undetermined reason, write "recheck" as a comment in gerrit.
 * RMT
 * Pull merged commits
 * Wait for commits to pass through Jenkins.
 * RMT
 * Tag versions in branches
 * Merge all commits
 * Security fixes can be self-merged if they have been reviewed in Phabricator before. For RELEASE-NOTES-X.XX, get another RMT member to merge. Check if all blocking tests pass. If a test doesn't pass for an undetermined reason, write "recheck" as a comment in gerrit.
 * RMT
 * Pull merged commits
 * Wait for commits to pass through Jenkins.
 * RMT
 * Tag versions in branches
 * RMT
 * Pull merged commits
 * Wait for commits to pass through Jenkins.
 * RMT
 * Tag versions in branches
 * Wait for commits to pass through Jenkins.
 * RMT
 * Tag versions in branches
 * RMT
 * Tag versions in branches
 * RMT
 * Tag versions in branches
 * RMT
 * Tag versions in branches

When Jenkins sees the tags, it runs make-release and creates tarballs and other downloads (e.g. patches). https://integration.wikimedia.org/ci/view/MediaWiki/job/mediawiki-core-release/
 * RMT
 * Watch Jenkins
 * RMT
 * Watch Jenkins
 * RMT
 * Watch Jenkins
 * RMT
 * Watch Jenkins

Tarball script should be started for each tag


 * RMT
 * Download tarballs and patch files
 * RMT
 * Final manual checks
 * Extract all archives.
 * Install MW locally.
 * Test patch files to make sure the apply to a freshly extracted tarball of the old version.
 * Download tarballs and patch files
 * RMT
 * Final manual checks
 * Extract all archives.
 * Install MW locally.
 * Test patch files to make sure the apply to a freshly extracted tarball of the old version.
 * RMT
 * Final manual checks
 * Extract all archives.
 * Install MW locally.
 * Test patch files to make sure the apply to a freshly extracted tarball of the old version.
 * Extract all archives.
 * Install MW locally.
 * Test patch files to make sure the apply to a freshly extracted tarball of the old version.
 * Install MW locally.
 * Test patch files to make sure the apply to a freshly extracted tarball of the old version.


 * RMT
 * Sign tarballs and patch files
 * for i in *.gz; do gpg --detach-sign $i; done
 * RMT
 * Upload to DL server
 * caesium:/srv/org/wikimedia/releases/mediawiki/X.XX
 * RMT
 * Send out announcement (template)
 * mediawiki-announce, wikitech-l, mediawiki-l, mediawiki-enterprise-l
 * colspan="9"|(no longer time critical from here on)
 * }
 * RMT
 * Upload to DL server
 * caesium:/srv/org/wikimedia/releases/mediawiki/X.XX
 * RMT
 * Send out announcement (template)
 * mediawiki-announce, wikitech-l, mediawiki-l, mediawiki-enterprise-l
 * colspan="9"|(no longer time critical from here on)
 * }
 * caesium:/srv/org/wikimedia/releases/mediawiki/X.XX
 * RMT
 * Send out announcement (template)
 * mediawiki-announce, wikitech-l, mediawiki-l, mediawiki-enterprise-l
 * colspan="9"|(no longer time critical from here on)
 * }
 * RMT
 * Send out announcement (template)
 * mediawiki-announce, wikitech-l, mediawiki-l, mediawiki-enterprise-l
 * colspan="9"|(no longer time critical from here on)
 * }
 * colspan="9"|(no longer time critical from here on)
 * }
 * }

Post release
{| class="wikitable" !|Status !|Timeline !|Major !|Patch !|Security !|Who !|Process step !|How / Where !|Comments
 * RMT
 * Make security tasks public
 * Edit tasks to change security dropdown to none, change visibility policy to public, change edit policy to all users
 * colspan="9"|
 * RMT
 * Make security tasks public
 * Edit tasks to change security dropdown to none, change visibility policy to public, change edit policy to all users
 * colspan="9"|
 * Edit tasks to change security dropdown to none, change visibility policy to public, change edit policy to all users
 * colspan="9"|
 * colspan="9"|
 * colspan="9"|

Update MediaWiki.org
Template:MediaWiki News
 * RMT
 * Announce new version
 * RMT
 * Announce new version
 * RMT
 * Announce new version
 * RMT
 * Announce new version


 * RMT
 * Update current version
 * Module:Version
 * RMT
 * Update legacy version
 * Module:Version
 * RMT
 * Update LTS version
 * Module:Version
 * RMT
 * Update branches
 * Module:Version, Template:DownloadMediaWiki ("To MediaWiki x.yy users" part)
 * RMT
 * Update legacy version
 * Module:Version
 * RMT
 * Update LTS version
 * Module:Version
 * RMT
 * Update branches
 * Module:Version, Template:DownloadMediaWiki ("To MediaWiki x.yy users" part)
 * RMT
 * Update LTS version
 * Module:Version
 * RMT
 * Update branches
 * Module:Version, Template:DownloadMediaWiki ("To MediaWiki x.yy users" part)
 * RMT
 * Update LTS version
 * Module:Version
 * RMT
 * Update branches
 * Module:Version, Template:DownloadMediaWiki ("To MediaWiki x.yy users" part)
 * RMT
 * Update branches
 * Module:Version, Template:DownloadMediaWiki ("To MediaWiki x.yy users" part)
 * RMT
 * Update branches
 * Module:Version, Template:DownloadMediaWiki ("To MediaWiki x.yy users" part)
 * Module:Version, Template:DownloadMediaWiki ("To MediaWiki x.yy users" part)


 * RMT
 * Check automatically generated content
 * Template:MWReleases, Template:MW_release_status, Template:MW_version/status
 * RMT
 * Check automatically generated content
 * Template:MWReleases, Template:MW_release_status, Template:MW_version/status
 * RMT
 * Check automatically generated content
 * Template:MWReleases, Template:MW_release_status, Template:MW_version/status
 * Template:MWReleases, Template:MW_release_status, Template:MW_version/status
 * Template:MWReleases, Template:MW_release_status, Template:MW_version/status

Remove all  from pages that are in Category:Due in v1.XX and delete that category.
 * RMT
 * Update release notes
 * Update Release notes of all affected versions
 * Need to be wikified, e.g. bug 234 becomes
 * RMT
 * Update release notes
 * Update Release notes of all affected versions
 * Need to be wikified, e.g. bug 234 becomes
 * Update release notes
 * Update Release notes of all affected versions
 * Need to be wikified, e.g. bug 234 becomes
 * RMT
 * Remove outdated future tags
 * RMT
 * Remove outdated future tags
 * RMT
 * Remove outdated future tags
 * RMT
 * Remove outdated future tags


 * colspan="9"|
 * colspan="9"|
 * colspan="9"|

Update other platforms

 * RMT
 * Update versions on Wikidata
 * update wikidata:Q83
 * Tim
 * Update wikimatrix
 * http://www.wikimatrix.org/show/MediaWiki
 * Tim has to do this
 * Update IRC
 * irc://irc.freenode.net/mediawiki
 * colspan="9"|
 * Tim
 * Update wikimatrix
 * http://www.wikimatrix.org/show/MediaWiki
 * Tim has to do this
 * Update IRC
 * irc://irc.freenode.net/mediawiki
 * colspan="9"|
 * Update wikimatrix
 * http://www.wikimatrix.org/show/MediaWiki
 * Tim has to do this
 * Update IRC
 * irc://irc.freenode.net/mediawiki
 * colspan="9"|
 * Update IRC
 * irc://irc.freenode.net/mediawiki
 * colspan="9"|
 * Update IRC
 * irc://irc.freenode.net/mediawiki
 * colspan="9"|
 * colspan="9"|
 * colspan="9"|
 * colspan="9"|

Extension distributor



 * Update extension distributor
 * Update $wgExtDistSnapshotRefs in CommonSettings.php
 * Update relevant 'extdist-branch-' keys in WikimediaMessages.i18n.php
 * Create branches in each extensions for the new release (this should already be done)
 * Update extension distributor
 * Update $wgExtDistSnapshotRefs in CommonSettings.php
 * Update relevant 'extdist-branch-' keys in WikimediaMessages.i18n.php
 * Create branches in each extensions for the new release (this should already be done)
 * Update relevant 'extdist-branch-' keys in WikimediaMessages.i18n.php
 * Create branches in each extensions for the new release (this should already be done)


 * Process unclear
 * colspan="9"|
 * colspan="9"|

Marketing



 * RMT
 * Release a Tech Blog entry
 * https://blog.wikimedia.org/c/technology/
 * }
 * RMT
 * Release a Tech Blog entry
 * https://blog.wikimedia.org/c/technology/
 * }
 * }

Ongoing development and planning
(after the release is before the release)

Security Release (minor version release)
As an example of how to use the checklist on this page, the steps between the announcment of an impending release and final release announcement for a security release are manually reproduced below.


 * Announce upcoming release on wikitech-l.
 * Announce any end of support if this is the last maintenance release for a version.
 * Cluster has been patched for every security fix that will be made public.
 * Send pre-release announcement to mediawiki-announce.
 * Give early access to security fixes.
 * Backport security fixes from Phabricator.
 * Upload backports to Phabricator and seek confirmation.
 * Reset local branches.
 * Prepare security backports.
 * Prepare release notes.
 * Update version number.
 * Prepare announcement.
 * "Load" local git master and alpha branch.
 * Check for vulnerabilities.
 * Push all release branches to gerrit.
 * Merge all commits.
 * Wait for commits to pass tests on Jenkins.
 * Tag versions in branches.
 * Watch Jenkins.
 * Download tarballs and patch files.
 * Final manual checks.
 * Sign tarballs and patch files.
 * Upload to download server.
 * Send out announcement.