Semantic Version Util is a tool to manage semantic versions at ease!
You can print the current version, increase patch/minor/major manually or just get the next tag based on your git log!
Based on the log between the latest tag and HEAD, prints the next tag.
aliases:
svu nextandsvu n
$ svu
v1.3.0| Commit message | Tag increase |
|---|---|
fix: fixed something |
Patch |
feat: added new button to do X |
Minor |
fix: fixed thing xyzBREAKING CHANGE: this will break users because of blah |
Major |
fix!: fixed something |
Major |
feat!: added blah |
Major |
chore: foo |
Nothing |
Prints the current tag with no changes.
alias:
svu c
Examples:
$ svu current
v1.2.3
$ svu current
v1.2.3-alpha.1+22Increases the major of the latest tag and prints it.
As per the Semver spec, it'll also clear the pre-release and build
identifiers are cleaned up.
Examples:
$ svu current
v1.2.3-alpha.2+123
$ svu major
v2.0.0
$ svu major --pre-release alpha.3 --build 243
v2.0.0-alpha.3+243Increases the minor of the latest tag and prints it.
As per the Semver spec, it'll also clear the pre-release and build
identifiers are cleaned up.
alias:
svu m
Examples:
$ svu current
v1.2.3-alpha.2+123
$ svu minor
v1.3.0
$ svu minor --pre-release alpha.3 --build 243
v1.3.0-alpha.3+243Increases the patch of the latest tag and prints it.
As per the Semver spec, if the version has a pre-release or build
identifier, they'll be cleaned up and no patch increment will be made.
You can force an increment by using --force-patch-increment.
alias:
svu p
Examples:
$ svu current
v1.2.3-alpha.2+123
$ svu patch
v1.2.3
$ svu patch --force-patch-increment
v1.2.4
$ svu patch --pre-release alpha.3 --build 243
v1.2.3-alpha.3+243By default svu will get the latest tag from the current branch. Using the --tag-mode flag this behaviour can be altered:
| Flag | Description | Git command used under the hood |
|---|---|---|
--tag-mode current-branch |
Get latest tag from current branch. | git describe --tags --abbrev=0 |
--tag-mode all-branches |
Get latest tag across all branches. | git describe --tags $(git rev-list --tags --max-count=1) |
--strip-prefix removes any prefix from the version output.
For example, v1.2.3 would be output as 1.2.3.
The default prefix is v, however a custom prefix can be supplied using --prefix.
So for --prefix=foo/v --strip-prefix and tag foo/v1.2.3, the output would be 1.2.3.
You can use --pre-release and --build to set the respective Semver
identifiers to the resulting version.
Setting the --force-patch-increment flag forces a patch version increment regardless of the commit message content.
The idea is that svu will just print things, so it's safe to run at any time.
You can create tags by wrapping it in an alias. For example, I have one like this:
alias gtn='git tag $(svu next)'So, whenever I want to create a tag, I just run gtn.
brew install caarlos0/tap/svuecho 'deb [trusted=yes] https://apt.fury.io/caarlos0/ /' | sudo tee /etc/apt/sources.list.d/caarlos0.list
sudo apt update
sudo apt install svuecho '[caarlos0]
name=caarlos0
baseurl=https://yum.fury.io/caarlos0/
enabled=1
gpgcheck=0' | sudo tee /etc/yum.repos.d/caarlos0.repo
sudo yum install svudocker run --rm -v $PWD:/tmp --workdir /tmp ghcr.io/caarlos0/svu --helpMake sure that $GOPATH/bin is in your $PATH, because that's where this gets
installed:
go install github.com/caarlos0/svu@latestOr download one from the releases tab and install manually.