Giter Club home page Giter Club logo

svu's Introduction

svu

Build Status

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!

example usage

svu

Based on the log between the latest tag and HEAD, prints the next tag.

aliases: svu next and svu n

$ svu
v1.3.0

commit messages vs what they do

Commit message Tag increase
fix: fixed something Patch
feat: added new button to do X Minor
fix: fixed thing xyz

BREAKING CHANGE: this will break users because of blah
Major
fix!: fixed something Major
feat!: added blah Major
chore: foo Nothing

svu current

Prints the current tag with no changes.

alias: svu c

Examples:

$ svu current
v1.2.3

$ svu current
v1.2.3-alpha.1+22

svu major

Increases 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+243

svu minor

Increases 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+243

svu patch

Increases 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 a patch increment by using svu next --force-patch-increment.

alias: svu p

Examples:

$ svu current
v1.2.3-alpha.2+123

$ svu patch
v1.2.3

$ svu patch --pre-release alpha.3 --build 243
v1.2.3-alpha.3+243

$ svu next --force-patch-increment
v1.2.4

svu prerelease

Increases the pre-release of the latest tag and prints it. If a pre-release identifier is passed in and it differs from the current pre-release tag that the identifier passed in will be used. If the current tag is not a pre-release tag then passing in --pre-release is required.

alias: svu pr

Examples:

$ svu current
v1.2.3-alpha.2+123

$ svu prerelease
v1.2.3-alpha.3

$ svu prerelease --pre-release alpha.33 --build 243
v1.2.3-alpha.33+243

tag mode

By 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)

stripping the tag prefix

--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.

adding a suffix

You can use --pre-release and --build to set the respective Semver identifiers to the resulting version.

force patch version increment

Setting the --force-patch-increment flag forces a patch version increment regardless of the commit message content.

Example:

svu next --force-patch-increment

creating tags

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.

install

Packaging status

macOS

brew install caarlos0/tap/svu

linux

apt

echo 'deb [trusted=yes] https://apt.fury.io/caarlos0/ /' | sudo tee /etc/apt/sources.list.d/caarlos0.list
sudo apt update
sudo apt install svu

yum

echo '[caarlos0]
name=caarlos0
baseurl=https://yum.fury.io/caarlos0/
enabled=1
gpgcheck=0' | sudo tee /etc/yum.repos.d/caarlos0.repo
sudo yum install svu

docker

docker run --rm -v $PWD:/tmp --workdir /tmp ghcr.io/caarlos0/svu --help

Using go install

Make sure that $GOPATH/bin is in your $PATH, because that's where this gets installed:

go install github.com/caarlos0/svu@latest

manually

Or download one from the releases tab and install manually.

use as library

You can use svu as a library without the need to install the binary. For example to use it from a magefile:

//go:build mage
// +build mage

package main

import (
	"github.com/caarlos0/svu/pkg/svu"
	"github.com/magefile/mage/sh"
	"strings"
)

// Tag the current commit with the proper next semver.
func Version() error {
	v, err := svu.Next()
	if err != nil {
		return err
	}
	return sh.RunV("git", "tag", "-a", v, "-m", strings.Replace(v, "v", "Version ", 1))
}

commands

All commands are available with a function named accordingly:

  • svu.Next()
  • svu.Current()
  • svu.Major()
  • svu.Minor()
  • svu.Patch()
  • svu.PreRelease()

options

All flags have a matching option function to configure the previous commands beyond their default bahavior:

  • svu.Current(svu.WithPattern("p*"))
  • svu.Next(svu.WithPrefix("ver"))
  • svu.Major(svu.StripPrefix())
  • svu.Minor(svu.WithPreRelease("pre"))
  • svu.Patch(svu.WithBuild("3"))
  • svu.Next(svu.WithDirectory("internal"))
  • svu.Next(svu.WithTagMode(svu.AllBranches)) or svu.Next(svu.ForAllBranches())
  • svu.Next(svu.WithTagMode(svu.CurrentBranch)) or svu.Next(svu.ForCurrentBranch())
  • svu.Next(svu.ForcePatchIncrement())

Or multiple options:

  • svu.Next(svu.WithPreRelease("pre"), svu.WithBuild("3"), svu.StripPrefix())
  • svu.PreRelease(svu.WithPreRelease("alpha.33"), svu.WithBuild("243"))

stargazers over time

Stargazers over time

svu's People

Contributors

0xbharath avatar abayer avatar ahaasler avatar alexandregv avatar bradleyjones avatar brewkode avatar caarlos0 avatar dependabot[bot] avatar dominiklessel avatar drewstinnett avatar gotson avatar hbk619 avatar jcrqr avatar jimmidyson avatar jsok avatar lunarpayload avatar nehemming avatar renovate[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.