Semi-automate minor/patch version tagging
This commit is contained in:
parent
f813ac2642
commit
7d976e5271
12
Makefile
12
Makefile
|
|
@ -61,3 +61,15 @@ tools:
|
|||
TAG = $(shell git describe --tags --abbrev=0 HEAD)
|
||||
LAST = $(shell git describe --tags --abbrev=0 HEAD^)
|
||||
BODY = "`git log ${LAST}..HEAD --oneline --decorate` `printf '\n\#\#\# [Build Info](${BUILD_URL})'`"
|
||||
|
||||
release/minor:
|
||||
git fetch origin master
|
||||
bash -c 'if git branch | grep autorelease; then git branch -D autorelease; else echo no branch to be cleaned; fi'
|
||||
git checkout -b autorelease origin/master
|
||||
hack/semtag final -s minor
|
||||
|
||||
release/patch:
|
||||
git fetch origin master
|
||||
bash -c 'if git branch | grep autorelease; then git branch -D autorelease; else echo no branch to be cleaned; fi'
|
||||
git checkout -b autorelease origin/master
|
||||
hack/semtag final -s patch
|
||||
|
|
|
|||
|
|
@ -754,3 +754,9 @@ See #155 for more information on this topic.
|
|||
## Examples
|
||||
|
||||
For more examples, see the [examples/README.md](https://github.com/roboll/helmfile/blob/master/examples/README.md) or the [`helmfile.d`](https://github.com/cloudposse/helmfiles/tree/master/helmfile.d) distribution of helmfiles by [Cloud Posse](https://github.com/cloudposse/).
|
||||
|
||||
# Attribution
|
||||
|
||||
We use:
|
||||
|
||||
- [semtag](https://github.com/pnikosis/semtag) for automated semver tagging. I greatly appreciate the author(pnikosis)'s effort on creating it and their kindness to share it!
|
||||
|
|
|
|||
|
|
@ -0,0 +1,623 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
PROG=semtag
|
||||
PROG_VERSION="v0.1.0"
|
||||
|
||||
SEMVER_REGEX="^v?(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(\-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$"
|
||||
IDENTIFIER_REGEX="^\-([0-9A-Za-z-]+)\.([0-9A-Za-z-]+)*$"
|
||||
|
||||
# Global variables
|
||||
FIRST_VERSION="v0.0.0"
|
||||
finalversion=$FIRST_VERSION
|
||||
lastversion=$FIRST_VERSION
|
||||
hasversiontag="false"
|
||||
scope="patch"
|
||||
displayonly="false"
|
||||
forcetag="false"
|
||||
forcedversion=
|
||||
versionname=
|
||||
identifier=
|
||||
|
||||
HELP="\
|
||||
Usage:
|
||||
$PROG
|
||||
$PROG getlast
|
||||
$PROG getfinal
|
||||
$PROG (final|alpha|beta|candidate) [-s <scope> (major|minor|patch|auto) | -o]
|
||||
$PROG --help
|
||||
$PROG --version
|
||||
Options:
|
||||
-s The scope that must be increased, can be major, minor or patch.
|
||||
The resulting version will match X.Y.Z(-PRERELEASE)(+BUILD)
|
||||
where X, Y and Z are positive integers, PRERELEASE is an optionnal
|
||||
string composed of alphanumeric characters describing if the build is
|
||||
a release candidate, alpha or beta version, with a number.
|
||||
BUILD is also an optional string composed of alphanumeric
|
||||
characters and hyphens.
|
||||
Setting the scope as 'auto', the script will chose the scope between
|
||||
'minor' and 'patch', depending on the amount of lines added (<10% will
|
||||
choose patch).
|
||||
-v Specifies manually the version to be tagged, must be a valid semantic version
|
||||
in the format X.Y.Z where X, Y and Z are positive integers.
|
||||
-o Output the version only, shows the bumped version, but doesn't tag.
|
||||
-f Forces to tag, even if there are unstaged or uncommited changes.
|
||||
Commands:
|
||||
--help Print this help message.
|
||||
--version Prints the program's version.
|
||||
get Returns both current final version and last tagged version.
|
||||
getlast Returns the latest tagged version.
|
||||
getfinal Returns the latest tagged final version.
|
||||
getcurrent Returns the current version, based on the latest one, if there are uncommited or
|
||||
unstaged changes, they will be reflected in the version, adding the number of
|
||||
pending commits, current branch and commit hash.
|
||||
final Tags the current build as a final version, this only can be done on the master branch.
|
||||
candidate Tags the current build as a release candidate, the tag will contain all
|
||||
the commits from the last final version.
|
||||
alpha Tags the current build as an alpha version, the tag will contain all
|
||||
the commits from the last final version.
|
||||
beta Tags the current build as a beta version, the tag will contain all
|
||||
the commits from the last final version."
|
||||
|
||||
# Commands and options
|
||||
ACTION="getlast"
|
||||
ACTION="$1"
|
||||
shift
|
||||
|
||||
# We get the parameters
|
||||
while getopts "v:s:of" opt; do
|
||||
case $opt in
|
||||
v)
|
||||
forcedversion="$OPTARG"
|
||||
;;
|
||||
s)
|
||||
scope="$OPTARG"
|
||||
;;
|
||||
o)
|
||||
displayonly="true"
|
||||
;;
|
||||
f)
|
||||
forcetag="true"
|
||||
;;
|
||||
\?)
|
||||
echo "Invalid option: -$OPTARG" >&2
|
||||
exit 1
|
||||
;;
|
||||
:)
|
||||
echo "Option -$OPTARG requires an argument." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Gets a string with the version and returns an array of maximum size of 5 with all the parts of the sematinc version
|
||||
# $1 The string containing the version in semantic format
|
||||
# $2 The variable to store the result array:
|
||||
# position 0: major number
|
||||
# position 1: minor number
|
||||
# position 2: patch number
|
||||
# position 3: identifier (or prerelease identifier)
|
||||
# position 4: build info
|
||||
function explode_version {
|
||||
local __version=$1
|
||||
local __result=$2
|
||||
if [[ $__version =~ $SEMVER_REGEX ]] ; then
|
||||
local __major=${BASH_REMATCH[1]}
|
||||
local __minor=${BASH_REMATCH[2]}
|
||||
local __patch=${BASH_REMATCH[3]}
|
||||
local __prere=${BASH_REMATCH[4]}
|
||||
local __build=${BASH_REMATCH[5]}
|
||||
eval "$__result=(\"$__major\" \"$__minor\" \"$__patch\" \"$__prere\" \"$__build\")"
|
||||
else
|
||||
eval "$__result="
|
||||
fi
|
||||
}
|
||||
|
||||
# Compare two versions and returns -1, 0 or 1
|
||||
# $1 The first version to compare
|
||||
# $2 The second version to compare
|
||||
# $3 The variable where to store the result
|
||||
function compare_versions {
|
||||
local __first
|
||||
local __second
|
||||
explode_version $1 __first
|
||||
explode_version $2 __second
|
||||
local lv=$3
|
||||
|
||||
# Compares MAJOR, MINOR and PATCH
|
||||
for i in 0 1 2; do
|
||||
local __numberfirst=${__first[$i]}
|
||||
local __numbersecond=${__second[$i]}
|
||||
case $(($__numberfirst - $__numbersecond)) in
|
||||
0)
|
||||
;;
|
||||
-[0-9]*)
|
||||
eval "$lv=-1"
|
||||
return 0
|
||||
;;
|
||||
[0-9]*)
|
||||
eval "$lv=1"
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Identifiers should compare with the ASCII order.
|
||||
local __identifierfirst=${__first[3]}
|
||||
local __identifiersecond=${__second[3]}
|
||||
if [[ -n "$__identifierfirst" ]] && [[ -n "$__identifiersecond" ]]; then
|
||||
if [[ "$__identifierfirst" > "$__identifiersecond" ]]; then
|
||||
eval "$lv=1"
|
||||
return 0
|
||||
elif [[ "$__identifierfirst" < "$__identifiersecond" ]]; then
|
||||
eval "$lv=-1"
|
||||
return 0
|
||||
fi
|
||||
elif [[ -z "$__identifierfirst" ]] && [[ -n "$__identifiersecond" ]]; then
|
||||
eval "$lv=1"
|
||||
return 0
|
||||
elif [[ -n "$__identifierfirst" ]] && [[ -z "$__identifiersecond" ]]; then
|
||||
eval "$lv=-1"
|
||||
return 0
|
||||
fi
|
||||
|
||||
eval "$lv=0"
|
||||
}
|
||||
|
||||
# Returns the last version of two
|
||||
# $1 The first version to compare
|
||||
# $2 The second version to compare
|
||||
# $3 The variable where to store the last one
|
||||
function get_latest_of_two {
|
||||
local __first=$1
|
||||
local __second=$2
|
||||
local __result
|
||||
local __latest=$3
|
||||
compare_versions $__first $__second __result
|
||||
case $__result in
|
||||
0)
|
||||
eval "$__latest=$__second"
|
||||
;;
|
||||
-1)
|
||||
eval "$__latest=$__second"
|
||||
;;
|
||||
1)
|
||||
eval "$__latest=$__first"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Assigns a 2 size array with the identifier, having the identifier at pos 0, and the number in pos 1
|
||||
# $1 The identifier in the format -id.#
|
||||
# $2 The vferiable where to store the 2 size array
|
||||
function explode_identifier {
|
||||
local __identifier=$1
|
||||
local __result=$2
|
||||
if [[ $__identifier =~ $IDENTIFIER_REGEX ]] ; then
|
||||
local __id=${BASH_REMATCH[1]}
|
||||
local __number=${BASH_REMATCH[2]}
|
||||
if [[ -z "$__number" ]]; then
|
||||
__number=1
|
||||
fi
|
||||
eval "$__result=(\"$__id\" \"$__number\")"
|
||||
else
|
||||
eval "$__result="
|
||||
fi
|
||||
}
|
||||
|
||||
# Gets a list of tags and assigns the base and latest versions
|
||||
# Receives an array with the tags containing the versions
|
||||
# Assigns to the global variables finalversion and lastversion the final version and the latest version
|
||||
function get_latest {
|
||||
local __taglist=("$@")
|
||||
local __tagsnumber=${#__taglist[@]}
|
||||
local __current
|
||||
case $__tagsnumber in
|
||||
0)
|
||||
finalversion=$FIRST_VERSION
|
||||
lastversion=$FIRST_VERSION
|
||||
;;
|
||||
1)
|
||||
__current=${__taglist[0]}
|
||||
explode_version $__current ver
|
||||
if [ -n "$ver" ]; then
|
||||
if [ -n "${ver[3]}" ]; then
|
||||
finalversion=$FIRST_VERSION
|
||||
else
|
||||
finalversion=$__current
|
||||
fi
|
||||
lastversion=$__current
|
||||
else
|
||||
finalversion=$FIRST_VERSION
|
||||
lastversion=$FIRST_VERSION
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
local __lastpos=$(($__tagsnumber-1))
|
||||
for i in $(seq 0 $__lastpos)
|
||||
do
|
||||
__current=${__taglist[i]}
|
||||
explode_version ${__taglist[i]} ver
|
||||
if [ -n "$ver" ]; then
|
||||
if [ -z "${ver[3]}" ]; then
|
||||
get_latest_of_two $finalversion $__current finalversion
|
||||
get_latest_of_two $lastversion $finalversion lastversion
|
||||
else
|
||||
get_latest_of_two $lastversion $__current lastversion
|
||||
fi
|
||||
fi
|
||||
done
|
||||
;;
|
||||
esac
|
||||
|
||||
if git rev-parse -q --verify "refs/tags/$lastversion" >/dev/null; then
|
||||
hasversiontag="true"
|
||||
else
|
||||
hasversiontag="false"
|
||||
fi
|
||||
}
|
||||
|
||||
# Gets the next version given the provided scope
|
||||
# $1 The version that is going to be bumped
|
||||
# $2 The scope to bump
|
||||
# $3 The variable where to stoer the result
|
||||
function get_next_version {
|
||||
local __exploded
|
||||
local __fromversion=$1
|
||||
local __scope=$2
|
||||
local __result=$3
|
||||
explode_version $__fromversion __exploded
|
||||
case $__scope in
|
||||
major)
|
||||
__exploded[0]=$((${__exploded[0]}+1))
|
||||
__exploded[1]=0
|
||||
__exploded[2]=0
|
||||
;;
|
||||
minor)
|
||||
__exploded[1]=$((${__exploded[1]}+1))
|
||||
__exploded[2]=0
|
||||
;;
|
||||
patch)
|
||||
__exploded[2]=$((${__exploded[2]}+1))
|
||||
;;
|
||||
esac
|
||||
|
||||
eval "$__result=v${__exploded[0]}.${__exploded[1]}.${__exploded[2]}"
|
||||
}
|
||||
|
||||
function bump_version {
|
||||
## First we try to get the next version based on the existing last one
|
||||
if [ "$scope" == "auto" ]; then
|
||||
get_scope_auto scope
|
||||
fi
|
||||
|
||||
local __candidatefromlast=$FIRST_VERSION
|
||||
local __explodedlast
|
||||
explode_version $lastversion __explodedlast
|
||||
if [[ -n "${__explodedlast[3]}" ]]; then
|
||||
# Last version is not final
|
||||
local __idlast
|
||||
explode_identifier ${__explodedlast[3]} __idlast
|
||||
|
||||
# We get the last, given the desired id based on the scope
|
||||
__candidatefromlast="v${__explodedlast[0]}.${__explodedlast[1]}.${__explodedlast[2]}"
|
||||
if [[ -n "$identifier" ]]; then
|
||||
local __nextid="$identifier.1"
|
||||
if [ "$identifier" == "${__idlast[0]}" ]; then
|
||||
# We target the same identifier as the last so we increase one
|
||||
__nextid="$identifier.$(( ${__idlast[1]}+1 ))"
|
||||
__candidatefromlast="$__candidatefromlast-$__nextid"
|
||||
else
|
||||
# Different identifiers, we make sure we are assigning a higher identifier, if not, we increase the version
|
||||
__candidatefromlast="$__candidatefromlast-$__nextid"
|
||||
local __comparedwithlast
|
||||
compare_versions $__candidatefromlast $lastversion __comparedwithlast
|
||||
if [ "$__comparedwithlast" == -1 ]; then
|
||||
get_next_version $__candidatefromlast $scope __candidatefromlast
|
||||
__candidatefromlast="$__candidatefromlast-$__nextid"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Then we try to get the version based on the latest final one
|
||||
local __candidatefromfinal=$FIRST_VERSION
|
||||
get_next_version $finalversion $scope __candidatefromfinal
|
||||
if [[ -n "$identifier" ]]; then
|
||||
__candidatefromfinal="$__candidatefromfinal-$identifier.1"
|
||||
fi
|
||||
|
||||
# Finally we compare both candidates
|
||||
local __resultversion
|
||||
local __result
|
||||
compare_versions $__candidatefromlast $__candidatefromfinal __result
|
||||
case $__result in
|
||||
0)
|
||||
__resultversion=$__candidatefromlast
|
||||
;;
|
||||
-1)
|
||||
__resultversion="$__candidatefromfinal"
|
||||
;;
|
||||
1)
|
||||
__resultversion=$__candidatefromlast
|
||||
;;
|
||||
esac
|
||||
|
||||
eval "$1=$__resultversion"
|
||||
}
|
||||
|
||||
function increase_version {
|
||||
local __version=
|
||||
|
||||
if [ -z $forcedversion ]; then
|
||||
bump_version __version
|
||||
else
|
||||
if [[ $forcedversion =~ $SEMVER_REGEX ]] ; then
|
||||
compare_versions $forcedversion $lastversion __result
|
||||
if [ $__result -le 0 ]; then
|
||||
echo "Version can't be lower than last version: $lastversion"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "Non valid version to bump"
|
||||
exit 1
|
||||
fi
|
||||
__version=$forcedversion
|
||||
fi
|
||||
|
||||
if [ "$displayonly" == "true" ]; then
|
||||
echo "$__version"
|
||||
else
|
||||
if [ "$forcetag" == "false" ]; then
|
||||
check_git_dirty_status
|
||||
fi
|
||||
local __commitlist
|
||||
if [ "$finalversion" == "$FIRST_VERSION" ] || [ "$hasversiontag" != "true" ]; then
|
||||
__commitlist="$(git log --pretty=oneline | cat)"
|
||||
else
|
||||
__commitlist="$(git log --pretty=oneline $finalversion... | cat)"
|
||||
fi
|
||||
|
||||
# If we are forcing a bump, we add bump to the commit list
|
||||
if [[ -z $__commitlist && "$forcetag" == "true" ]]; then
|
||||
__commitlist="bump"
|
||||
fi
|
||||
|
||||
if [[ -z $__commitlist ]]; then
|
||||
echo "No commits since the last final version, not bumping version"
|
||||
else
|
||||
if [[ -z $versionname ]]; then
|
||||
versionname=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
fi
|
||||
local __message="$versionname
|
||||
$__commitlist"
|
||||
|
||||
# We check we have info on the user
|
||||
local __username=$(git config user.name)
|
||||
if [ -z "$__username" ]; then
|
||||
__username=$(id -u -n)
|
||||
git config user.name $__username
|
||||
fi
|
||||
local __useremail=$(git config user.email)
|
||||
if [ -z "$__useremail" ]; then
|
||||
__useremail=$(hostname)
|
||||
git config user.email "$__username@$__useremail"
|
||||
fi
|
||||
|
||||
git tag -a $__version -m "$__message"
|
||||
|
||||
# If we have a remote, we push there
|
||||
local __remote=$(git remote)
|
||||
if [[ -n $__remote ]]; then
|
||||
git push $__remote $__version > /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "$__version"
|
||||
else
|
||||
echo "Error pushing the tag $__version to $__remote"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "$__version"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function check_git_dirty_status {
|
||||
local __repostatus=
|
||||
get_work_tree_status __repostatus
|
||||
|
||||
if [ "$__repostatus" == "uncommitted" ]; then
|
||||
echo "ERROR: You have uncommitted changes"
|
||||
git status --porcelain
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$__repostatus" == "unstaged" ]; then
|
||||
echo "ERROR: You have unstaged changes"
|
||||
git status --porcelain
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Get the total amount of lines of code in the repo
|
||||
function get_total_lines {
|
||||
local __empty_id="$(git hash-object -t tree /dev/null)"
|
||||
local __changes="$(git diff --numstat $__empty_id | cat)"
|
||||
local __added_deleted=$1
|
||||
get_changed_lines "$__changes" $__added_deleted
|
||||
}
|
||||
|
||||
# Get the total amount of lines of code since the provided tag
|
||||
function get_sincetag_lines {
|
||||
local __sincetag=$1
|
||||
local __changes="$(git diff --numstat $__sincetag | cat)"
|
||||
local __added_deleted=$2
|
||||
get_changed_lines "$__changes" $__added_deleted
|
||||
}
|
||||
|
||||
function get_changed_lines {
|
||||
local __changes_numstat=$1
|
||||
local __result=$2
|
||||
IFS=$'\n' read -rd '' -a __changes_array <<<"$__changes_numstat"
|
||||
local __diff_regex="^([0-9]+)[[:space:]]+([0-9]+)[[:space:]]+.+$"
|
||||
|
||||
local __total_added=0
|
||||
local __total_deleted=0
|
||||
for i in "${__changes_array[@]}"
|
||||
do
|
||||
if [[ $i =~ $__diff_regex ]] ; then
|
||||
local __added=${BASH_REMATCH[1]}
|
||||
local __deleted=${BASH_REMATCH[2]}
|
||||
__total_added=$(( $__total_added+$__added ))
|
||||
__total_deleted=$(( $__total_deleted+$__deleted ))
|
||||
fi
|
||||
done
|
||||
eval "$2=( $__total_added $__total_deleted )"
|
||||
}
|
||||
|
||||
function get_scope_auto {
|
||||
local __verbose=$2
|
||||
local __total=0
|
||||
local __since=0
|
||||
local __scope=
|
||||
|
||||
get_total_lines __total
|
||||
get_sincetag_lines $finalversion __since
|
||||
|
||||
local __percentage=0
|
||||
if [ "$__total" != "0" ]; then
|
||||
local __percentage=$(( 100*$__since/$__total ))
|
||||
if [ $__percentage -gt "10" ]; then
|
||||
__scope="minor"
|
||||
else
|
||||
__scope="patch"
|
||||
fi
|
||||
fi
|
||||
|
||||
eval "$1=$__scope"
|
||||
if [[ -n "$__verbose" ]]; then
|
||||
echo "[Auto Scope] Percentage of lines changed: $__percentage"
|
||||
echo "[Auto Scope] : $__scope"
|
||||
fi
|
||||
}
|
||||
|
||||
function get_work_tree_status {
|
||||
# Update the index
|
||||
git update-index -q --ignore-submodules --refresh > /dev/null
|
||||
eval "$1="
|
||||
|
||||
if ! git diff-files --quiet --ignore-submodules -- > /dev/null
|
||||
then
|
||||
eval "$1=unstaged"
|
||||
fi
|
||||
|
||||
if ! git diff-index --cached --quiet HEAD --ignore-submodules -- > /dev/null
|
||||
then
|
||||
eval "$1=uncommitted"
|
||||
fi
|
||||
}
|
||||
|
||||
function get_current {
|
||||
if [ "$hasversiontag" == "true" ]; then
|
||||
local __commitcount="$(git rev-list $lastversion.. --count)"
|
||||
else
|
||||
local __commitcount="$(git rev-list --count HEAD)"
|
||||
fi
|
||||
local __status=
|
||||
get_work_tree_status __status
|
||||
|
||||
if [ "$__commitcount" == "0" ] && [ -z "$__status" ]; then
|
||||
eval "$1=$lastversion"
|
||||
else
|
||||
local __buildinfo="$(git rev-parse --short HEAD)"
|
||||
local __currentbranch="$(git rev-parse --abbrev-ref HEAD)"
|
||||
if [ "$__currentbranch" != "master" ]; then
|
||||
__buildinfo="$__currentbranch.$__buildinfo"
|
||||
fi
|
||||
|
||||
local __suffix=
|
||||
if [ "$__commitcount" != "0" ]; then
|
||||
if [ -n "$__suffix" ]; then
|
||||
__suffix="$__suffix."
|
||||
fi
|
||||
__suffix="$__suffix$__commitcount"
|
||||
fi
|
||||
if [ -n "$__status" ]; then
|
||||
if [ -n "$__suffix" ]; then
|
||||
__suffix="$__suffix."
|
||||
fi
|
||||
__suffix="$__suffix$__status"
|
||||
fi
|
||||
|
||||
__suffix="$__suffix+$__buildinfo"
|
||||
if [ "$lastversion" == "$finalversion" ]; then
|
||||
scope="patch"
|
||||
identifier=
|
||||
local __bumped=
|
||||
bump_version __bumped
|
||||
eval "$1=$__bumped-dev.$__suffix"
|
||||
else
|
||||
eval "$1=$lastversion.$__suffix"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function init {
|
||||
git fetch > /dev/null
|
||||
TAGS="$(git tag)"
|
||||
IFS=$'\n' read -rd '' -a TAG_ARRAY <<<"$TAGS"
|
||||
|
||||
get_latest ${TAG_ARRAY[@]}
|
||||
currentbranch="$(git rev-parse --abbrev-ref HEAD)"
|
||||
}
|
||||
|
||||
case $ACTION in
|
||||
--help)
|
||||
echo -e "$HELP"
|
||||
;;
|
||||
--version)
|
||||
echo -e "${PROG}: $PROG_VERSION"
|
||||
;;
|
||||
final)
|
||||
init
|
||||
diff=$(git diff master | cat)
|
||||
if [ "$forcetag" == "false" ]; then
|
||||
if [ -n "$diff" ]; then
|
||||
echo "ERROR: Branch must be updated with master for final versions"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
increase_version
|
||||
;;
|
||||
alpha|beta)
|
||||
init
|
||||
identifier="$ACTION"
|
||||
increase_version
|
||||
;;
|
||||
candidate)
|
||||
init
|
||||
identifier="rc"
|
||||
increase_version
|
||||
;;
|
||||
getlast)
|
||||
init
|
||||
echo "$lastversion"
|
||||
;;
|
||||
getfinal)
|
||||
init
|
||||
echo "$finalversion"
|
||||
;;
|
||||
getcurrent)
|
||||
init
|
||||
get_current current
|
||||
echo "$current"
|
||||
;;
|
||||
get)
|
||||
init
|
||||
echo "Current final version: $finalversion"
|
||||
echo "Last tagged version: $lastversion"
|
||||
;;
|
||||
*)
|
||||
echo "'$ACTION' is not a valid command, see --help for available commands."
|
||||
;;
|
||||
esac
|
||||
Loading…
Reference in New Issue