This document outlines the process for releasing new versions of GiveWP.
Releases are prepared continuously as features and fixes are merged:
- Changelog entries — every PR adds an entry with
composer run changelog:add, which drops a YAML file into./changelog. These are compiled intoreadme.txtandchangelog.txtat release time. WordPress recommends keeping the latest version's changelog inreadme.txtand the full history inchangelog.txt. For Give, this means we reset thereadme.txtchangelog during major version releases. - Docblocks — new or changed code uses
@since TBD, which is replaced with the real version number at release time.
Normal releases follow a gitflow pattern: features and fixes land in develop, and releases are cut from there.
-
Make sure everything intended for the release is merged into
developand CI is green. -
Create a release branch off
develop(release/x.y.z). -
Run the release prep command with the new version number:
composer run release:prep 4.16.0
This runs the full version-bump pipeline:
- Updates all version strings —
GIVE_VERSIONand theVersion:plugin header ingive.php, andStable tag:inreadme.txt - Replaces all
@since TBD/@deprecated TBDplaceholders with the new version - Compiles the pending entries in
./changeloginto thereadme.txtandchangelog.txtchangelog
Options:
--date <date>sets the changelog date (defaults to today);--dry-runpreviews without writing. - Updates all version strings —
-
Check the plugin requirements —
release:prepdoes not update these:Requires at least:andRequires PHP:in thegive.phpplugin headerRequires at least:,Tested up to:, andRequires PHP:inreadme.txt(especiallyTested up to:when a new WordPress version has shipped)- The
= Minimum Requirements =section inreadme.txt
-
Review the diff carefully — version strings, replaced TBD tags, and the new changelog entry.
-
Validate
readme.txtwith the WordPress readme validator and preview it on WPReadme.com. -
Run the test suite (
composer test) and let CI pass on the release branch. -
Build a release candidate ZIP for QA by running the Generate Plugin Zip GitHub Action against the release branch. Attach the ZIP to the release ticket and wait for QA approval.
-
Open a PR for the release branch against
masterand get it reviewed.
- Merge the release branch into
master. - Manually merge the release branch back into
develop— this keepsdevelopin sync with the version bumps, compiled changelog, and replaced TBD tags from the release. If there are merge conflicts, resolve them and send a fresh release candidate back through QA. - Draft a new GitHub release using the version as the tag and title, with the target branch set to
master. Generate release notes, double-check everything, and publish. - Monitor the release GitHub Action and the Slack notifications — publishing the release kicks off the deploy to WordPress.org and pushes the pot file to the translations server.
For urgent fixes that can't wait for the normal release cycle, branch off master instead of develop (hotfix/x.y.z). The rest of the process is the same — run composer run release:prep, review, merge to master, and publish. Afterwards, merge master back into develop so the fix isn't lost in the next release.
- Verify the new version is available on WordPress.org and installs cleanly.
- Confirm automatic updates work from the previous version.
- Monitor the support forums and error tracking for new issues over the next 24–48 hours.
- The release tooling lives in
bin/and is built on stellarwp/pup and @stellarwp/changelogger. Its own tests can be run withcomposer run release:test. - Patch releases follow the same process — the only difference is scope and testing focus (regressions around the fix).