build-tools/basetag.sh
2025-02-05 19:21:17 +05:30

64 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
# #For a fresh repo / Creating new releases
# git add -A;
# git commit -m "<commit msg>"
# #Setting a tag
# git tag -a -m "<tag msg>" 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