This document outlines the release process for Livewire Calendar maintainers.
We follow Semantic Versioning (SemVer):
Version Format: MAJOR.MINOR.PATCH
- MAJOR: Breaking changes to the public API
- MINOR: New features, new framework version support (backward compatible)
- PATCH: Bug fixes, documentation updates (backward compatible)
4.1.0→4.1.1: Bug fix (PATCH)4.1.1→4.2.0: New Laravel version support (MINOR)4.2.0→5.0.0: Breaking API changes (MAJOR)
main: Production-ready releases (protected)dev: Active development (default branch for PRs)X.x: Long-term support branches (created when next major version starts)
- Feature branches →
dev(via Pull Request) dev→main(via Pull Request, triggers release)- Tag releases on
mainbranch
- All tests passing on
devbranch - All PRs merged and reviewed
- CHANGELOG.md updated with version and date
- README.md updated if needed
- Version bumped in any version files (if applicable)
- Documentation reviewed and updated
Edit CHANGELOG.md:
## [Unreleased]
## [X.Y.Z] - YYYY-MM-DD
### Added
- New feature description
### Fixed
- Bug fix description
### Changed
- Changes to existing functionalityCommit the CHANGELOG:
git add CHANGELOG.md
git commit -m "Update CHANGELOG for vX.Y.Z"Create a Pull Request from dev to main:
gh pr create --base main --head dev --title "Release vX.Y.Z" --body "Release version X.Y.Z
## Changes
[Summary of major changes]
## Checklist
- [x] CHANGELOG updated
- [x] Tests passing
- [x] Documentation updated
"Review and merge the PR.
After merging to main, create and push the tag:
git checkout main
git pull origin main
git tag -a X.Y.Z -m "Release vX.Y.Z"
git push origin X.Y.ZNote: Do NOT include a "v" prefix in the tag name. Use 4.1.0, not v4.1.0.
Create a GitHub release from the tag:
gh release create X.Y.Z \
--title "vX.Y.Z - Brief Description" \
--notes "$(cat <<'EOF'
## What's Changed
### Added
- Feature 1
- Feature 2
### Fixed
- Bug 1
- Bug 2
### Compatibility
- **PHP**: 7.4 - 8.4
- **Laravel**: 6 - 12
- **Livewire**: 2, 3, 4
**Full Changelog**: https://github.com/omnia-digital/livewire-calendar/compare/PREV_VERSION...X.Y.Z
EOF
)"Or use GitHub's UI to create the release and use the "Auto-generate release notes" feature as a starting point.
Within 5-10 minutes, verify the new version appears on Packagist:
- Visit https://packagist.org/packages/omnia-digital/livewire-calendar
- Confirm version X.Y.Z is listed
- Check that the package description is accurate
If it doesn't appear:
- Ensure the tag was pushed correctly:
git ls-remote --tags origin - Check Packagist webhook settings in GitHub repo settings
- Manually trigger update on Packagist if needed
- Verify installation works:
composer require omnia-digital/livewire-calendar:^X.Y - Announce release on relevant channels (if major version)
- Close any related GitHub issues or milestones
- Update any project boards or tracking systems
When: Bug fixes, documentation updates, minor improvements
Frequency: As needed when critical bugs are found
Example: 4.1.0 → 4.1.1
Process: Follow standard release checklist above
When:
- New framework version support (Laravel, Livewire, PHP)
- New features (backward compatible)
- Deprecations (with migration path)
Frequency: Quarterly or when new framework versions are released
Example: 4.1.0 → 4.2.0
Process:
- Follow standard release checklist
- Update compatibility matrix in README.md
- Consider blog post or announcement for significant features
When: Breaking changes to public API
Frequency: Rarely (only when absolutely necessary)
Example: 4.2.0 → 5.0.0
Process:
-
Create LTS branch for previous major version:
git checkout main git checkout -b 4.x git push origin 4.x
-
Update UPGRADE.md with detailed migration guide
-
Follow standard release checklist
-
Announce breaking changes prominently in release notes
-
Provide 12 months of bug fix support for previous major version
Always test the package with different framework versions before releasing:
Create test environments for:
| Test Case | PHP | Laravel | Livewire |
|---|---|---|---|
| Minimum | 7.4 | 6.0 | 2.0 |
| LTS | 8.2 | 10.0 | 3.0 |
| Latest | 8.4 | 12.0 | 4.0 |
composer testEnsure all tests pass before releasing.
- Full support: New features, bug fixes, security patches
- Duration: Until next major version is released
- Bug fixes: Critical bugs and security issues only
- Duration: 12 months after next major version release
- Branch: Maintained on
X.xbranch (e.g.,3.x)
- No support: Only security patches on request
- Recommendation: Upgrade to current version
For critical security issues or breaking bugs:
-
Create hotfix branch from
main:git checkout main git checkout -b hotfix/X.Y.Z+1
-
Fix the issue with tests
-
Update CHANGELOG with urgent notice:
## [X.Y.Z+1] - YYYY-MM-DD ### Security - Fixed critical security vulnerability (CVE-XXXX-XXXXX)
-
Create PR to
mainwith "HOTFIX" label -
Fast-track review and merge
-
Create tag and release immediately
-
Notify users via GitHub Security Advisory if security-related
Future automation to consider:
- GitHub Actions workflow to auto-create draft release on tag push
- Automated CHANGELOG generation from commit messages
- Version bump automation script
- Multi-version testing matrix in CI/CD
- Automatic Packagist webhook verification
For minor and major releases:
- GitHub Release with detailed notes
- Update package description on Packagist (if needed)
- Consider:
- GitHub Discussions announcement
- Twitter/social media (for major releases)
- Laravel News submission (for significant features)
For security releases:
- Create GitHub Security Advisory
- Assign CVE if applicable
- Notify users through appropriate channels
- Provide clear upgrade instructions
If a release has critical issues:
-
Do NOT delete the tag (Packagist and users may have already pulled it)
-
Create a new patch release fixing the issue:
# If 4.1.0 has issues, create 4.1.1 git revert <problematic-commit> # Follow normal release process for 4.1.1
-
Add notice to GitHub release:
## ⚠️ Known Issues This release has been superseded by vX.Y.Z+1 due to [issue description]. Please upgrade to vX.Y.Z+1 immediately.
-
Announce the issue and fixed version
If you're unsure about any part of the release process:
- Review previous releases for examples
- Check git history:
git log --oneline --graph main - Consult with other maintainers
- When in doubt, create a draft release for review first
# View all tags
git tag -l
# View tag details
git show X.Y.Z
# Compare versions
git diff 3.2.0..4.1.0
# View commits between versions
git log 3.2.0..4.1.0 --oneline
# Check current branch
git branch --show-current
# Verify tag was pushed
git ls-remote --tags origin
# List releases
gh release list