Releasing
Here at Uptech Studio given that we use semantic versioning as our standard for versioning we can talk instead about the process of doing a release.
Normal release
Cutting a release consists of the following steps.
- identify the commit in the Git history that is to be the release - generally this is
HEAD
- tag the commit with the new release version number, e.g.
1.2.3
orv1.2.3
- push tags up to the remote, e.g.
git push --tags
- update the
CHANGELOG.md
if not automatically handled by CI, e.g.git cl full > CHANGELOG.md
- Note: if this was an app with build numbers in the version you would usegit cl full -p > CHANGELOG.md
.- commit and push the update
CHANGELOG.md
commit for that version release
- commit and push the update
Avoid Hot-fix release
We avoid "hot-fix" releases if we can. What this means in practice is that if we have a version that is released and we identify an issue with it. Instead of prepping a hot-fix release we just add the fix to the top of the tree and cut a new release including that fix as well as the other changes integrated into mainline.
This works because our Branching Strategy is based on Continous Integration and Trunk Based Development which keeps our mainline in a build & releasable state.
Hot-fix release
If for some reason we had to do a hot-fix release. There is nothing stopping us from being able to do it. We would have to simply perform the following steps.
- identify the tagged release that the issue is found on in our Git tree
- create a new hot-fix branch based on that tagged commit
- add a commit to that hot-fix branch to resolve the issue
- tag that commit with the new release version number
- backport that commit to mainline so the next release will also include it
Automated Releases
We do not setup automated releases for libraries. Apps and Services on the other hand we do generally in the lower environments. But with some projects even in the production environment.
In the App case the automated releases are only used for internal release, bumping build numbers, and getting feedback from stakeholders. We generally use MS AppCenter for this.
In the Services case the automated releases are fine as build numbers as the interfaces are versioned within the code base.
Marketing Releases
When we are doing a public Marketing Release of an application we go through the normal release process with tags and changelog, etc.