#!/bin/bash # #For a fresh repo / Creating new releases # git add -A; # git commit -m "" # #Setting a tag # git tag -a -m "" v1.0.0 # git push --follow-tags # #Moving a tag (eg: for major version retagging) # git tag -fa v1 # git push --tags -f # Based on https://gist.github.com/CSTDev/08c127680e3b5fae38c051da3e489351 # Commit with a log containing #minor or #major to increment the respective version number #get highest tag number containing at least 2 dots VERSION=`git describe --abbrev=0 --tags --match="v[0-9]*\.[0-9]*\.[0-9]*"` #replace . with space so can split into an array VERSION_BITS=(${VERSION//./ }) #get number parts and increase last one by 1 VNUM1=${VERSION_BITS[0]} VNUM2=${VERSION_BITS[1]} VNUM3=${VERSION_BITS[2]} VNUM1=`echo $VNUM1 | sed 's/v//'` # Check for #major or #minor in commit message and increment the relevant version number MAJOR=`git log --format=%B -n 1 HEAD | grep '#major'` MINOR=`git log --format=%B -n 1 HEAD | grep '#minor'` if [ "$MAJOR" ]; then echo "Update major version" VNUM1=$((VNUM1+1)) VNUM2=0 VNUM3=0 elif [ "$MINOR" ]; then echo "Update minor version" VNUM2=$((VNUM2+1)) VNUM3=0 else echo "Update patch version" VNUM3=$((VNUM3+1)) fi #create new tag NEW_TAG="v$VNUM1.$VNUM2.$VNUM3" echo "Updating $VERSION to $NEW_TAG" #get current hash and see if it already has a tag GIT_COMMIT=`git rev-parse HEAD` NEEDS_TAG=`git describe --contains $GIT_COMMIT` #only tag if no tag already (would be better if the git describe command above could have a silent option) if [ -z "$NEEDS_TAG" ]; then echo "Tagged with $NEW_TAG (Ignoring fatal:cannot describe - this means commit is untagged) " git tag $NEW_TAG git push --tags else echo "Already a tag on this commit" fi