This repository uses a changelog-first release flow. CHANGELOG.md is finalized before the tag and GitHub release are created.
- On every push to
main,.github/workflows/auto-update-changelog.ymlrefreshes## [Unreleased]inCHANGELOG.mdfrom commit subjects since the latest release tag. - Review the generated
## [Unreleased]notes (adjust wording/grouping if needed). - Run the release script from a clean local checkout on
main:
scripts/create-release.sh 0.1.2The script performs the release in this order:
- Validates the requested version (
X.Y.Z) and repo state (ghauth, clean tree, branch, remote sync). - Updates
plugin.phpVersion. - Updates
readme.txtStable tag. - Moves the
CHANGELOG.mdUnreleasedentries into## [X.Y.Z] - YYYY-MM-DD. - Commits and pushes the release-prep changes.
- Creates and pushes the Git tag (
X.Y.Z). - Creates the GitHub release using the committed
CHANGELOG.mdversion section as release notes.
- The script supports a safe resume path if the release-prep commit already exists but the GitHub release creation failed.
- The GitHub release body must match the committed
CHANGELOG.mdsection for the same version.
.github/workflows/release-metadata.yml- On
pull_request/branchpush: verifiesplugin.phpversion matchesreadme.txtStable tag. - On tag
push: also verifies the tag matches the latest versionedCHANGELOG.mdsection.
- On
.github/workflows/changelog.yml- On GitHub
releasepublish: verifies the release body matches the committedCHANGELOG.mdsection for that tag.
- On GitHub