There's no schedule here. Ship bug fixes whenever, features when they're ready, and breaking changes rarely.
AsyncMonitor is a Swift package and a release is just a git tag. SwiftPM resolves versions directly from tags.
Run the tests and make sure they pass.
swift testCheck that you're on main with a clean working tree, and that nothing looks weird in the recent history.
git status
git log -5 --onelineFind the [Unreleased] section in Changelog.md, rename it to the new version, stamp it with today's date, and add the diff link at the bottom of the section.
## [0.4.0] - 2026-05-17
### Removed
- Description of removals
### Changed
- Description of changes
### Fixed
- Description of fixes
### Added
- Description of additions
[0.4.0]: https://github.com/samsonjs/AsyncMonitor/compare/0.3.1...0.4.0Drop the "Your change here." placeholder if it's still there, and drop any of the Removed/Changed/Fixed/Added sections that don't actually have anything in them.
Commit and push.
git add Changelog.md
git commit -m "Prepare for release 0.4.0"
git push github mainTag it, push the tag, and cut the release. GitHub will generate notes from merged PRs and commits since the last tag:
git tag 0.4.0
git push github 0.4.0
gh release create 0.4.0 --verify-tag --generate-notesIf you'd rather use your changelog entry as the release body, this pulls just that section out:
gh release create 0.4.0 --verify-tag --notes "$(awk '/^## \[0\.4\.0\]/,/^## \[/' Changelog.md | sed '$d')"Drop a fresh [Unreleased] section at the top of Changelog.md so there's somewhere to write down the next round of changes.
## [Unreleased]
- Your change here.
[Unreleased]: https://github.com/samsonjs/AsyncMonitor/compare/0.4.0...HEADCommit and push and you're done.
git add Changelog.md
git commit -m "Start next changelog entry"
git push github main