49 lines
1.3 KiB
Bash
Executable File
49 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
set -o nounset \
|
|
-o errexit \
|
|
-o pipefail
|
|
|
|
REGEX_TAG='v([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)'
|
|
|
|
function semver_tags()
|
|
{
|
|
{
|
|
# Sometimes several release tags point to the same commit (see v1.9.0 and
|
|
# v1.9.1). This iterates through each tag and ensures that it conforms to
|
|
# semantic versioning requirements. Afterwards, the tags are sorted from
|
|
# latest to earliest. This is so packages use the latest version tag.
|
|
for tag in $(git tag --points-at HEAD)
|
|
do
|
|
if [[ ${tag} =~ ^${REGEX_TAG}$ ]]
|
|
then
|
|
printf '%s\n' "${tag}"
|
|
fi
|
|
done
|
|
} | sort --version-sort --reverse
|
|
}
|
|
|
|
TAG=$(head -n 1 <<<"$(semver_tags)")
|
|
|
|
# If no tag could be found for the corresponding commit, assume that this
|
|
# is being built from an unversioned branch. In which case, this will
|
|
# construct a version that is compatible with Debian versioning:
|
|
# ${PREFIX}-<< short commit hash >>
|
|
if [[ ${TAG} =~ ^${REGEX_TAG}$ ]]
|
|
then
|
|
cat <<EOF >>"${BASH_ENV}"
|
|
export VERSION="${TAG:1}"
|
|
export MAJOR=${BASH_REMATCH[1]}
|
|
export MINOR=${BASH_REMATCH[2]}
|
|
export PATCH=${BASH_REMATCH[3]}
|
|
export RELEASE=1
|
|
EOF
|
|
else
|
|
cat <<EOF >>"${BASH_ENV}"
|
|
export VERSION="${PREFIX}-$(git rev-parse --short HEAD)"
|
|
export MAJOR=
|
|
export MINOR=
|
|
export PATCH=
|
|
export RELEASE=
|
|
EOF
|
|
fi
|