--- name: release description: Version management and release processes using Jetpack Changelogger. Use when creating releases, managing changelogs, bumping versions, or preparing patch releases. --- # ActivityPub Release Process Quick reference for managing releases and changelogs for the WordPress ActivityPub plugin. ## Quick Reference ### Release Commands ```bash npm run release # Create major/minor release PR. ``` ### Version File Locations When updating versions manually, change these files (these are the files `bin/release.js` touches): - `activitypub.php` - Plugin header (`Version: X.Y.Z`) **and** the `ACTIVITYPUB_PLUGIN_VERSION` constant. Both must change. - `readme.txt` - WordPress.org readme (`Stable tag: X.Y.Z`). - `includes/class-migration.php` - Version references in the DB-migration `version_compare()` checks. - `CHANGELOG.md` - Changelog file (auto-updated by release script). Note: `package.json` has no `version` field and is not part of the release bump. ## Comprehensive Release Guide See [Release Process](docs/release-process.md) for complete release workflow and detailed steps. ## Release Workflow ### Major/Minor Releases **Quick workflow:** ```bash # 1. Run release script from plugin root. npm run release # Script automatically: # - Determines version from changelog entries. # - Updates version numbers in all files. # - Updates CHANGELOG.md. # - Creates PR for review. # 2. Review and merge the release PR. # 3. Create GitHub release from trunk using the new tag. ``` See [Release Process - Major/Minor](docs/release-process.md) for detailed steps. ### Patch Releases **Quick workflow:** ```bash # 1. Create branch from the tag to patch. git fetch --tags git checkout -b tags/5.3.1 5.3.0 # Patch 5.3.0 -> 5.3.1 # 2. Cherry-pick merge commits from trunk (note -m 1 flag). git cherry-pick -m 1 # 3. Update changelog and versions. composer changelog:write # Manually update versions in (see Version File Locations above): # - activitypub.php (Version header AND ACTIVITYPUB_PLUGIN_VERSION constant) # - readme.txt # - includes/class-migration.php # 4. Push branch and create GitHub release. git push -u origin tags/5.3.1 ``` **Important:** Use `-m 1` flag when cherry-picking merge commits to select the mainline parent. See [Release Process - Patch Releases](docs/release-process.md#patch-releases) for detailed steps. ## Changelog Management ### How It Works Changelogs are managed automatically through the PR workflow: 1. **PR Template** (`.github/PULL_REQUEST_TEMPLATE.md`): - Check "Automatically create a changelog entry" checkbox. - Select significance: Patch/Minor/Major. - Select type: Added/Fixed/Changed/Deprecated/Removed/Security. - Write message **ending with punctuation!** 2. **GitHub Action** (`.github/workflows/changelog.yml`): - Creates changelog file from PR description. - Validates proper punctuation. - Saves to `.github/changelog/` directory. 3. **Release Process**: - `npm run release` aggregates all entries. - Updates `CHANGELOG.md` and `readme.txt` automatically. ### Critical Requirements **Always end changelog messages with punctuation:** ``` ✅ Add support for custom post types. ✅ Fix signature verification bug. ❌ Add support for custom post types ❌ Fix signature verification bug ``` **Write end-user friendly messages:** - Focus on user benefit, not implementation details. - Avoid technical jargon where possible. - Describe what users can now do, not how it works internally. ``` ✅ Add pre-built block patterns for easy profile and sidebar setup. ✅ Fix follow button not appearing on author pages. ❌ Add register_patterns() method to class-blocks.php. ❌ Refactor User class to use Actors collection. ``` **Pick the significance by what breaks for a real install:** - `major` bumps the plugin to the next whole version, so it has to be worth that: a user who keeps doing what they did before gets a materially worse or destructive result on a surface real installs depend on. Removing a public constant or breaking an opt-in experiment is not `major`. Raising the minimum WordPress or PHP version always is. - Check that the break actually broke something before claiming it. **One entry per user-visible change.** Split unrelated fixes into separate files, but several fixes to the same visible thing are one entry, however many issues they close. **No entry for a bug that never shipped.** A fix for something introduced on the same unreleased branch is net zero for users. **Release PR bodies stay neutral.** Use the release script's plain text; never enumerate or spotlight security fixes in a release PR or its notes. **Never mention AI tools or coding assistants in changelog messages.** See [PR Workflow - Changelog](../pr/SKILL.md#changelog-management) for complete changelog requirements. ## Version Numbering **Semantic versioning:** - **Major (X.0.0)** - Breaking changes. - **Minor (0.X.0)** - New features, backward compatible. - **Patch (0.0.X)** - Bug fixes only. The release script determines version automatically from changelog entry significance levels.