Managing Your Application Version with SemVer

Managing Your Application Version with SemVer

I’m in the midst of designing a CI/CD pipeline and was looking for a way to auto-increment the the application versions somewhere within there.

The first step was to try to track down some kind of web service or script that would do this for me. I ended up coming across a bash implementation of the Semantic Versioning specification which you’re probably already familiar with to some degree. It operates on the following format <major>.<minor>.<patch> i.e. 1.0.0.

It’s really easy to use. All you have to do is download the ZIP from GitHub and place the semver script in your path.

Version Bumping

So, we’ll go through a few examples of how to bump your application versions.

Bumping Patch Version

To see what a simple patch version bump would look like, just execute the following command:

semver bump patch 1.0.0

This will return:

1.0.1

Bumping Minor Version

Now for minor version, all you had to do is swap out minor for patch which looks like this:

semver bump minor 1.0.0

And that will spit out:

1.1.0

You’ll notice too that if you do a minor version bump and you have already made a few patches, it’ll reset the patch version to 0. Just enter the following into your terminal:

semver bump minor 1.0.3

And you’ll see the patch version reset with the minor version bump:

1.1.0

Bumping Major Version

Now for the major version bump. Not only will this increase the major version from 1 to 2, it will also reset the minor and patch values as well. Just issue this command:

semver bump major 1.2.3

And you’ll see that the major version increased and the minor and patch versions reset to 0.

2.0.0

Next Steps

Now that I have a tool for auto-incrementing my version numbers, the next thing will be fitting that into my CI/CD pipeline somewhere. Given I’m using Docker images and Kubernetes, I’ll want to find a way to set the image tag with this increased version and ensure that the Kubernetes manifests have this version set as a label as well.