101 lines
2.2 KiB
Bash
Executable File
101 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
set -o errexit
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
# For a tag to be considered suitable for release, it must start with
|
|
# the latter 'v' followed by a digit. Afterwards, any sequence of
|
|
# alphanumerics and '.', '+', '-', '~' are supported.
|
|
#
|
|
# Supported tag examples:
|
|
# v1.8-rc1
|
|
# v1.9~rc1
|
|
# v2
|
|
# v2.0
|
|
#
|
|
# Unsupported tag examples:
|
|
# 1.9
|
|
# 2.0
|
|
# release-test
|
|
TAG_REGEX='^v[[:digit:]][[:alnum:]\.\+\-\~]+$'
|
|
|
|
usage()
|
|
{
|
|
cat <<'EOF'
|
|
USAGE: get-version [OPTIONS]
|
|
|
|
DESCRIPTION:
|
|
|
|
OPTIONS:
|
|
-h Displays this help text.
|
|
-p PREFIX Modify the version string for use with packages. Both Debian and
|
|
Fedora packages have strict version requirements. If there exist
|
|
no tags that reference this commit or the tags are not suitable
|
|
for packages, use "$PREFIX-$GIT_SHORT_COMMIT" instead. The
|
|
prefix must start with a number.
|
|
-n (Only works when used with -p). Use the nightly version format.
|
|
This uses the format "$PREFIX-nightly-YYYYMMDD".
|
|
EOF
|
|
}
|
|
|
|
go_version()
|
|
{
|
|
# `git describe --exact` will fail when no tags match the HEAD commit.
|
|
# This is a supported scenario. So, this discards the return value.
|
|
TAG=$(git describe --exact --tag HEAD 2>/dev/null || true)
|
|
|
|
if [[ ${TAG} =~ ${TAG_REGEX} ]]
|
|
then
|
|
printf '%s\n' "${TAG}"
|
|
return
|
|
fi
|
|
|
|
printf 'unknown\n'
|
|
}
|
|
|
|
package_version()
|
|
{
|
|
# `git describe --exact` will fail when no tags match the HEAD commit.
|
|
# This is a supported scenario. So, this discards the return value.
|
|
TAG=$(git describe --exact --tag HEAD 2>/dev/null || true)
|
|
|
|
if [[ ${TAG} =~ ${TAG_REGEX} ]]
|
|
then
|
|
# Debian package versions must start with a number; therefore, the
|
|
# 'v' must be stripped from the tag.
|
|
printf '%s\n' "${TAG:1}"
|
|
return
|
|
fi
|
|
|
|
if [[ ${PACKAGE_VERSION_NIGHTLY:-} ]]
|
|
then
|
|
printf '%s-nightly-%s\n' "${PACKAGE_VERSION_PREFIX}" "$(date '+%Y%m%d')"
|
|
return
|
|
fi
|
|
|
|
printf '%s-%s\n' "${PACKAGE_VERSION_PREFIX}" "$(git rev-parse --verify --short HEAD)"
|
|
}
|
|
|
|
while getopts 'hp:n' option
|
|
do
|
|
case $option
|
|
in
|
|
n)
|
|
PACKAGE_VERSION_NIGHTLY=1
|
|
;;
|
|
p)
|
|
PACKAGE_VERSION_PREFIX=${OPTARG}
|
|
;;
|
|
h)
|
|
usage && exit 0
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ ${PACKAGE_VERSION_PREFIX:-} ]]
|
|
then
|
|
package_version
|
|
else
|
|
go_version
|
|
fi
|