3.2 KiB
Release process
Semi-automation
Serverless Framework relies on semantic commit messages which allow 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 members with a single semantic commit message.
PR's coming from branches have commit messages validated with commmitlint
Release flow
Releases are triggered manually by preparing a release PRs
Preparation steps:
-
Create the
releasebranch (should derive from the currentmainstate) -
Bump version ranges of all dependencies to the latest supported versions (e.g. if the latest version of a dependency is
2.3.5and the range in apackage.jsonis^2.2.4then it should be updated to^2.3.5)
Note: If can handle it with a tool like ncu (ncu --target minor --upgrade) or if you handle the installation of dependencies through npm-cross-link then--bump-depsoption will bump version ranges as expected -
Commit eventual dependency version updates with the following commit message:
chore: Bump dependencies -
Run
npm run prepare-releasecommand.
It'll automatically bump the version inpackage.jsonto the expected one (by inspecting changes since the previous release) and will generate a new changelog entry. -
Improve generated changelog entry in
CHANGELOG.md:- Ensure to remove eventual items that were already published with patch releases
- Improve formatting and messages if applicable (each entry should have an issue/pr, commit, and author associated with it)
- Ensure that updated
CHANGELOG.mdfollows prettier formatting
-
Commit
package.jsonandCHANGELOG.mdchanges with the following commit message:chore: Release
Note: For automation purpose, it must be the last commit in the PR -
Push branch upstream and create a PR.
-
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:
mainCI build detects that release PR was merged (by fact that it covers change ofversionfield inpackage.jsonfile). Having that (after successful tests pass) version tag is created and pushed to the repository.- Tag CI build publishes a new version to npm, also it retrieves release notes from CHANGELOG.md and publishes them to GitHub.
Updating release notes for already published versions
Improvements to release notes can be done at any time to any already published version:
- Update
CHANGELOG.mdwith desired changes (ensure they'd also end inmain) - Push updated release notes to GitHub by running:
npx github-release-from-cc-changelog <version>