Release Checklist
One change, one branch, one PR. This is the path every change to a
laravel-rebel-*package takes from a
green local loop to a tagged release — nothing ships until each gate is green.
Stay in the 0.1.x line. Dependents pin with Composer ^0.1, which excludes 0.2.0. Cutting 0.2.0
silently breaks every package that depends on this one. Bump the patch (0.1.x), not the minor, unless the
whole suite is moving together.
The Definition of Done
Red → green with Pest — write the failing test first, then make it pass. Cover the happy path,
auth/fail-closed, tenant-scoping and the empty state.Static analysis and style — both must be clean:
composer phpstan composer pint -- --testPHPStan runs at level max. Fix the root cause; do not silence errors with
@phpstan-ignore, baseline
entries or inline@var.One feature branch, one PR — branch from
main, open a single pull request back tomain. Keep the
scope tight.Green CI matrix — CI runs PHP 8.3 / 8.4 / 8.5 × Laravel 12 / 13. Every cell must pass before
merge.Update
README.mdandCHANGELOG.md— and, if any user-facing surface changed, the centralized docs
underdocs-site/docs/**(see Docs Maintenance).Squash-merge — one PR collapses to one commit on
main.Tag and release — cut the version tag and publish the GitHub release:
git tag vX.Y.Z git push origin vX.Y.Z gh release create vX.Y.Z
Gate summary
| Gate | Command / action | Must be |
|---|---|---|
| Tests | composer test (Pest) |
green |
| Static analysis | composer phpstan (level max) |
green |
| Style | composer pint -- --test |
clean |
| Pull request | one branch → one PR to main |
open |
| CI matrix | PHP 8.3/8.4/8.5 × Laravel 12/13 | all green |
| Docs | README.md, CHANGELOG.md, central docs |
updated |
| Merge | squash-merge | one commit |
| Release | tag vX.Y.Z + gh release create |
published |
Config-level drift fails the build fast: php artisan rebel:validate-config is the fail-fast guard you can
run in CI and locally. See the Runbooks for the operational side of releases.