Repository navigation
Description
Regular Release Checklist - v3.x.x
Preparation
-
Mention on Slack that a release is being prepared
People should wait with updating until the announcement. Before that, things are still in motion.
-
Verify all tests pass in the automated test suite
-
Regenerate command and internal API docs
Command and internal API docs need to be regenerated before every major release, because they're meant to correlate with the release.
git clone git@github.com:wp-cli/handbook.git cd handbook WP_CLI_PACKAGES_DIR=bin/packages ../wp-cli-bundle/vendor/bin/wp handbook gen-allTo be confirmed: this should be automated now via https://github.com/wp-cli/wp-cli/blob/1c06435200bcaeafd493d9492340309885e565fb/.github/workflows/trigger-handbook-regeneration.yml
-
Fetch the list of contributors (from within the
wp-cli/wp-cli-devproject repo)From within the
wp-cli/wp-cli-devproject repo, usewp maintenance contrib-listto generate a list of release contributors:GITHUB_TOKEN=<token> wp maintenance contrib-list --format=markdownThis script identifies pull request creators from
wp-cli/wp-cli-bundle,wp-cli/wp-cli,wp-cli/handbook, and all bundled WP-CLI commands (e.g.wp-cli/*-command).For
wp-cli/wp-cli-bundle,wp-cli/wp-cliandwp-cli/handbook, the script uses the currently open release milestone.For all bundled WP-CLI commands, the script uses all closed milestones since the last WP-CLI release (as identified by the version present in the
composer.lockfile). If a command was newly bundled since last release, contributors to that command will need to be manually added to the list.The script will also produce a total contributor and pull request count you can use in the release post.
-
Generate release notes for all packages (from within the
wp-cli/wp-cli-devproject repo)From within the
wp-cli/wp-cli-devproject repo, usewp maintenance release-notesto generate the release notes:GITHUB_TOKEN=<token> wp maintenance release-notes -
Draft release post on the make.wordpress.org CLI blog
Use previous release blog posts as inspiration.
Use the contributor list and changelog from the previous steps in the blog post.
Note down the permalink already now, as it will be needed in later steps.
Updating WP-CLI
In wp-cli/wp-cli
-
Create a branch called
prepare-x-x-xto prepare the version bump. -
Update the WP-CLI version mention in
wp-cli/wp-cli'sREADME.md(ref). -
Lock
php-cli-toolsversion (if needed)
php-cli-toolsis sometimes set todev-mainduring the development cycle. During the WP-CLI release process,composer.jsonshould be locked to a specific version.php-cli-toolsmay need a new version tagged as well. -
Ensure that the contents of VERSION in
wp-cli/wp-cliare changed to latest. -
Submit the PR and merge it once all checks are green.
-
Create a Git tag for the new version. Do not create a GitHub release just yet.
In wp-cli/wp-cli-bundle
-
Create a branch called
release-x-x-xto prepare the release PR. Branch name is very important here! -
Lock the framework version in
composer.jsonThe version constraint of the
wp-cli/wp-cliframework requirement is usually set to"dev-main". Set it to the stable tagged release that represents the version to be published.As an example, if releasing version 2.1.0 of WP-CLI, the
wp-cli/wp-cli-bundleshould require"wp-cli/wp-cli": "^2.1.0".composer require wp-cli/wp-cli:^2.1.0
Updating the Phar build
-
Create a PR from the
release-x-x-xbranch inwp-cli/wp-cli-bundleand merge it. This will trigger thewp-cli-release.*builds. -
Create a Git tag and push it. Do not create a GitHub release just yet.
-
Create a stable Phar build:
cd wp-cli/builds/phar cp wp-cli-release.phar wp-cli.phar cp wp-cli-release.manifest.json wp-cli.manifest.json md5 -q wp-cli.phar > wp-cli.phar.md5 shasum -a 256 wp-cli.phar | cut -d ' ' -f 1 > wp-cli.phar.sha256 shasum -a 512 wp-cli.phar | cut -d ' ' -f 1 > wp-cli.phar.sha512 -
Sign the release with GPG (see Sign releases via GPG #2121):
gpg --output wp-cli.phar.gpg --default-key releases@wp-cli.org --sign wp-cli.phar gpg --output wp-cli.phar.asc --default-key releases@wp-cli.org --detach-sig --armor wp-cli.pharNote: The GPG key for
releases@wp-cli.orghas to be shared amongst maintainers. -
Verify the signature with
gpg --verify wp-cli.phar.asc wp-cli.phar -
Perform one last sanity check on the Phar by ensuring it displays its information
php wp-cli.phar --info -
Commit the Phar and its hashes to the
buildsrepogit status git add . git commit -m "Update stable to v2.x.0" -
Create actual releases on GitHub: Make sure to upload the previously generated Phar from the
buildsrepo.cp wp-cli.phar wp-cli-2.x.0.phar cp wp-cli.phar.gpg wp-cli-2.x.0.phar.gpg cp wp-cli.phar.asc wp-cli-2.x.0.phar.asc cp wp-cli.phar.md5 wp-cli-2.x.0.phar.md5 cp wp-cli.phar.sha512 wp-cli-2.x.0.phar.sha256 cp wp-cli.phar.sha512 wp-cli-2.x.0.phar.sha512 cp wp-cli.manifest.json wp-cli-2.x.0.manifest.jsonDo this for both
wp-cli/wp-cliandwp-cli/wp-cli-bundle -
Verify Phar release artifact
$ wp cli update You are currently using WP-CLI version 2.12.0-alpha-d2bfea9. Would you like to update to 2.12.0? [y/n] y Downloading from https://github.com/wp-cli/wp-cli/releases/download/v2.12.0/wp-cli-2.12.0.phar... sha512 hash verified: fe19025cc113142492a3ca68dd93d20ba4164e5ecb3c0a0d86a9db7e06b917201120763fa2b8256addeaa9cb745b2b8bef8e8d74a697230e30ef681f13e09186 New version works. Proceeding to replace. Success: Updated WP-CLI to 2.12.0. $ wp cli version WP-CLI 2.12.0 $wp eval 'echo \WP_CLI\Utils\http_request( "GET", "https://api.wordpress.org/core/version-check/1.6/" )->body;' --skip-wordpress <PHP serialized string with version numbers>
Verify the Debian and RPM builds
-
In the
wp-cli/buildsrepository, verify that the Debian and RPM builds existNote: Right now, they are actually already generated automatically before all the tagging happened.
-
Change symlink of
deb/php-wpcli_latest_all.debto point to the new stable version.
Updating the Homebrew formula (should happen automatically)
- Follow this example PR to update version numbers and sha256 for both
wp-cliandwp-cli-completion
Updating the website
-
Verify https://github.com/wp-cli/wp-cli.github.com#readme is up-to-date
-
Update all version references on the homepage (and localized homepages).
Can be mostly done by using search and replace for the version number and the blog post URL.
-
Update the roadmap to mention the current stable version
-
Tag a release of the website
Announcing
-
Publish the blog post
-
Announce release on the WP-CLI Twitter account
-
Optional: Announce using the
/announceslash command in the#cliSlack room.This pings a lot of people, so it's not always desired. Plus, the blog post will pop up on Slack anyway.
Bumping WP-CLI version again
-
Bump VERSION in
wp-cli/wp-cliagain.For instance, if the release version was
2.8.0, the version should be bumped to2.9.0-alpha.Doing so ensures
wp cli update --nightlyworks as expected. -
Change the version constraint on
"wp-cli/wp-cli"inwp-cli/wp-cli-bundle'scomposer.jsonfile back to"dev-main".composer require wp-cli/wp-cli:dev-main -
Adapt the branch alias in
wp-cli/wp-cli'scomposer.jsonfile to match the new alpha version.
Activity
szepeviktor commentedon Jun 7, 2026
@swissspidy Today the last release is 1 year + 1 month old.
How can I help to get the next one?
swissspidy commentedon Jun 8, 2026
Ah yes this was on my todo list for WCEU but forgot... @schlessera let's discuss this :)
swissspidy commentedon Jul 9, 2026
@schlessera Do you have capacity in the near future to assist with the release?
Happy to do it myself, but a second pair of eyes can't hurt :)
One thing we need to decide is whether to call it v2.13.0 or indeed v3.0.0.
For the latter, we'd probably need to first update the branch alias and release new versions of all the packages.
I think I would generally actually be OK with keeping v2.13.0. It's a feature- and bugfix-packed release. Some of the changes are a bit bigger than others (e.g. WP & PHP version bump), but that's not unusual for a 2.x release.
Edit: confirmed that we'll stick with v3.0.0
schlessera commentedon Jul 21, 2026
Just recording this here for reference:
Last week, @swissspidy and I agreed on going with the v3.0.0 milestone. This will allow us to get quite a few breaking changes in we've been postponing for a while, and do a bit of additional maintenance.
Work has started on wrapping everything up for this v3.0.0 release.
chriscroome commentedon Aug 3, 2026
I'm very happy to see that a new release is planned :-)
I've been using the nightly version for as while due to various issues.
If a resolution to the false positives for detecting VCS checkups of plugins and themes would be possible first that would be amazing, thanks for all the work you are all doing and sorry if I'm abusing this issues by mentioning another :-)
drzraf commentedon Aug 30, 2026
Don't you think that a non-breaking 2.x release conveying the (many) features/bugfixes accumulated the past year (in core but also multiple wp-cli/* packages) would be useful, before releasing a clean-up/API-breaking release later on?