Releasing
Changes are written under ## Unreleased at the top of CHANGELOG.md as they land.
To release, run the Release workflow from the Actions tab, on main, with a version: an explicit X.Y.Z, or patch, minor or major to bump the latest tag. It then:
- runs the checks a release must pass: validation, formatting, lint, static analysis and the test suite;
- turns the
## Unreleasedsection into## X.Y.Z — YYYY-MM-DD(tools/release-prepare.php), commits it asRelease vX.Y.Zand pushes an annotatedvX.Y.Ztag; - publishes the GitHub release, its notes that changelog section;
- tells Packagist, when the
PACKAGIST_USERNAMEandPACKAGIST_TOKENsecrets are set (Packagist's GitHub hook picks the tag up anyway); - rebuilds this documentation, so its version and changelog are current.
A dry run prepares everything and publishes nothing. A failed publish can be retried with "Re-run failed jobs", without cutting the release again.
To publish the release notes of a tag cut before, write them with php tools/release-prepare.php --notes-for X.Y.Z --notes notes.md and pass them to gh release create.
