blob: c2a56b451bef4ffbce8261aaa9127e0bed99f0c8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
#!/bin/sh
if [ ! -z "${BUILDER_VERSION}" ]; then
printf ${BUILDER_VERSION}
exit 0
fi
VERSION="unknown"
DIRTY=""
git status | grep -q clean || DIRTY='.dirty'
# Special environment variable to signal that we are building a release, as this
# has consequenses for the version number.
if [ "${IS_RELEASE}" = "YES" ]; then
TAG="$(git describe --tags --exact-match 2> /dev/null | cut -d- -f 2-)"
if [ -n "${TAG}" ]; then
# We're on a tag
echo "${TAG}${DIRTY}" > .version
printf "${TAG}${DIRTY}"
exit 0
fi
echo 'This is not a tag, either tag this commit or do not set $IS_RELEASE' >&2
exit 1
fi
#
# Generate the version number based on the branch
#
if [ ! -z "$(git rev-parse --abbrev-ref HEAD 2> /dev/null)" ]; then
if [ -n "${BUILDER_MODULES}" ]; then
match=${BUILDER_MODULES}
[ $match = "authoritative" ] && match='auth'
[ $match = "recursor" ] && match='rec'
GIT_VERSION="$(git describe --match=${match}-* --tags | cut -d- -f2-)"
if [ $(echo ${GIT_VERSION} | awk -F"-" '{print NF-1}') = '3' ]; then
# A prerelease happened before
LAST_TAG="$(echo ${GIT_VERSION} | cut -d- -f1-2)"
COMMITS_SINCE_TAG="$(echo ${GIT_VERSION} | cut -d- -f3)"
GIT_HASH="$(echo ${GIT_VERSION} | cut -d- -f4)"
elif [ $(echo ${GIT_VERSION} | awk -F"-" '{print NF-1}') = '1' ]; then
# Exactly on a pre-release
LAST_TAG="$(echo ${GIT_VERSION} | cut -d- -f1-2)"
else
LAST_TAG="$(echo ${GIT_VERSION} | cut -d- -f1)"
COMMITS_SINCE_TAG="$(echo ${GIT_VERSION} | cut -d- -f2)"
GIT_HASH="$(echo ${GIT_VERSION} | cut -d- -f3)"
fi
fi
if [ -z "${GIT_VERSION}" ]; then
# BUILDER_SUPPORT has more than one product listed, fall back to the 0.0.0 logic
# We used 0.0.XXXXgHASH for master in the previous incarnation of our build pipeline.
# This now becomes 0.0.XXXX.0.gHASH, as 0.0.0.XXXX.gHASH (which is more correct)
# would break upgrades for those running master
# This _should_ be ok for forever is we stick to X.Y.Z for version numbers
LAST_TAG=0.0
COMMITS_SINCE_TAG="$(git rev-list --count 12c868770afc20b6cc0da439d881105151d557dd..HEAD 2> /dev/null).0"
[ "${COMMITS_SINCE_TAG}" = ".0" ] && COMMITS_SINCE_TAG=0.0
GIT_HASH="g$(git rev-parse HEAD | cut -c1-10 2> /dev/null)"
fi
BRANCH=".$(git rev-parse --abbrev-ref HEAD | perl -p -e 's/[^[:alnum:]]//g;')"
TAG="$(git describe --tags --exact-match 2> /dev/null | cut -d- -f 2-)"
if [ -n "${TAG}" ]; then # We're exactly on a tag
COMMITS_SINCE_TAG="0"
GIT_HASH="g$(git show --no-patch --format=format:%h HEAD 2>/dev/null)"
if [ -z "$GIT_HASH" ]; then
GIT_HASH="g$(git show --format=format:%h HEAD | head -n1)"
fi
fi
VERSION="${LAST_TAG}.${COMMITS_SINCE_TAG}${BRANCH}.${GIT_HASH}${DIRTY}"
fi
printf $VERSION
|