This project relies on semantic commit messages which allows to streamline the release process (versioning and changelog generation is automated)
See proposed Commit Message Guidelines
In PR's as coming from forks (community contributions) while its welcome, we do not require to follow semantic commit messages. Yet, such PR is expected to be squash merged by project member with single semantic commit message.
PR's comming from branches have commit messages validated with commmitlint
Releases are triggered manually by preparing a release PR's as follows
- Create a
release
branch (should derive from currentmain
state) - Bump version ranges of all dependencies to latest supported versions (e.g. if latest version of a dependency is
2.3.5
and range in apackage.json
is^2.2.4
then it should be updated to^2.3.5
)
Note: Unfortunately there seems no reliable utility to automate that (there's a request atnpm-check-updates
)
If you handle installation of dependencies through npm-cross-link then--bump-deps
option will bump version ranges as expected - Commit eventual dependency version updates with following commit message:
chore: Bump dependencies
- Run
npm run prepare-release
command.
It'll automatically bump version inpackage.json
to expected one (by inspecting changes since previous release) and will generate new changelog entry. - If needed improve generated changelog entry in
CHANGELOG.md
- Commit
package.json
andCHANGELOG.md
changes with following commit message:chore: Release
- Push branch upstream and create a PR.
Release PR's are automatically detected in CI by fact ofversion
inpackage.json
file being changed in last commit. In context of that build, existence of new version changelog entry (inCHANGELOG.md
) is validated. - After PR is accepted by CI and one of the reviewers, merge it via "Rebase and merge" option
Further actions are automated in CI context:
main
CI build detects that release PR was merged (by fact that it covers change ofversion
field inpackage.json
file). Having that (after successful tests pass) version tag is created and pushed to the repository.- tag CI build, publishes new version to npm, also it retrieves release notes from CHANGELOG.md and publishes them to GitHub.
Improvements to release notes can be done at anytime to any already published version:
- Update
CHANGELOG.md
with desired changes (ensure they'd also end inmain
) - Push updated release notes to GitHub by running:
npx github-release-from-cc-changelog <version>