Version Management 🔢
Version management is an important part of software development and IT operations. It helps track changes made to code, configurations, and other system components over time.
Versioning
Software versions are usually denoted with a sequence of numbers separated by dots, like $MAJOR.$MINOR.$PATCH.
This is known as semantic versioning, where the numbers have specific meanings:

- Major version indicates major (breaking) changes.
- Minor version adds new features in a backwards-compatible manner for this same major digit.
- Patch version implies bug fixes. backwards-compatible bug fixes are made, no new features are added, just fixes to correct issues.
Automating the Process
The versioning process should be automated, and requires establishing conventions to bump the right digit and generate a standardized release note - the steps are:
- Identify the release type and new version based on the commit message.
- Generate a release note - the release note being generated from your git history, it's recommended to exclusively git rebase instead of git merge to avoid merge commits.
- Tag and release
- (Optional) Publish your application artifact, cross-platform binary, etc...
You can enforce a few rules from your remote git repository:
- requiring a commit message to match an expected format
- rejecting any git merge or tag deletion