We create releases to bundle and deliver iterations of a project;
they are based on Gittags, which mark a specific point in the repository’s history.
When the code on develop branch is stable and ready for a new release:
CHANGELOG.md and package.json(if any, otherwise go to step 3):
package.json only the version number changes (see Versioning)changelog is filled by the list of all PR’s from the latest release till now, grouped by scope (fix, change, new feature)Push this small update with no business logic directly to develop branch, without any PR (usually with a commit message like: Bump version to v0.0.1). The dev CI/CD pipeline won’t be triggered by this merge.develop to master branch, naming it as Release <tag name> (Release v0.0.1 for example).master branch, create a git tag locally:
master branch and pull changesannotated tag with git tag -a v0.0.1 -m "Release v0.0.1"git push origin v0.0.1develop and master local branches are updated. (see the note below)develop branch make git merge master and then git push to realign both branches at the same commit (local and remote). (see the note below)manual tests pass and no other bugfix are needed, from GitHub Releases page Create a new release:
Auto generate release notes to generate the release changelog from the list of PR’sPublish the releaseNote: points 5 and 6 are needed only if in the repo develop is set as the main branch while master is only the release branch)
At this moment the
release(the tag),masteranddeveloppoint exactly at the same commit in the history
We use Semantic Versioning
Given a version number MAJOR.MINOR.PATCH, increment the:
MAJOR version when you make incompatible API changesMINOR version when you add functionality in a backwards compatible mannerPATCH version when you make backwards compatible bug fixes