1+ #! /bin/bash
2+ # Copyright 2020 The Kubernetes Authors.
3+ #
4+ # Licensed under the Apache License, Version 2.0 (the "License");
5+ # you may not use this file except in compliance with the License.
6+ # You may obtain a copy of the License at
7+ #
8+ # http://www.apache.org/licenses/LICENSE-2.0
9+ #
10+ # Unless required by applicable law or agreed to in writing, software
11+ # distributed under the License is distributed on an "AS IS" BASIS,
12+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ # See the License for the specific language governing permissions and
14+ # limitations under the License.
15+
16+ set -o errexit
17+ set -o nounset
18+ set -o pipefail
19+
20+ version::get_version_vars () {
21+ GIT_COMMIT=" $( git rev-parse HEAD^{commit}) "
22+
23+ if git_status=$( git status --porcelain 2> /dev/null) && [[ -z ${git_status} ]]; then
24+ GIT_TREE_STATE=" clean"
25+ else
26+ GIT_TREE_STATE=" dirty"
27+ fi
28+
29+ # borrowed from k8s.io/hack/lib/version.sh
30+ # Use git describe to find the version based on tags.
31+ if GIT_VERSION=$( git describe --tags --abbrev=14 2> /dev/null) ; then
32+ # This translates the "git describe" to an actual semver.org
33+ # compatible semantic version that looks something like this:
34+ # v1.1.0-alpha.0.6+84c76d1142ea4d
35+ DASHES_IN_VERSION=$( echo " ${GIT_VERSION} " | sed " s/[^-]//g" )
36+ if [[ " ${DASHES_IN_VERSION} " == " ---" ]] ; then
37+ # We have distance to subversion (v1.1.0-subversion-1-gCommitHash)
38+ GIT_VERSION=$( echo " ${GIT_VERSION} " | sed " s/-\([0-9]\{1,\}\)-g\([0-9a-f]\{14\}\)$/.\1\-\2/" )
39+ elif [[ " ${DASHES_IN_VERSION} " == " --" ]] ; then
40+ # We have distance to base tag (v1.1.0-1-gCommitHash)
41+ GIT_VERSION=$( echo " ${GIT_VERSION} " | sed " s/-g\([0-9a-f]\{14\}\)$/-\1/" )
42+ fi
43+ if [[ " ${GIT_TREE_STATE} " == " dirty" ]]; then
44+ # git describe --dirty only considers changes to existing files, but
45+ # that is problematic since new untracked .go files affect the build,
46+ # so use our idea of "dirty" from git status instead.
47+ GIT_VERSION+=" -dirty"
48+ fi
49+
50+
51+ # Try to match the "git describe" output to a regex to try to extract
52+ # the "major" and "minor" versions and whether this is the exact tagged
53+ # version or whether the tree is between two tagged versions.
54+ if [[ " ${GIT_VERSION} " =~ ^v([0-9]+)\. ([0-9]+)(\. [0-9]+)? ([-].* )? ([+].* )? $ ]]; then
55+ GIT_MAJOR=${BASH_REMATCH[1]}
56+ GIT_MINOR=${BASH_REMATCH[2]}
57+ fi
58+
59+ # If GIT_VERSION is not a valid Semantic Version, then refuse to build.
60+ if ! [[ " ${GIT_VERSION} " =~ ^v([0-9]+)\. ([0-9]+)(\. [0-9]+)? (-[0-9A-Za-z.-]+)? (\+ [0-9A-Za-z.-]+)? $ ]]; then
61+ echo " GIT_VERSION should be a valid Semantic Version. Current value: ${GIT_VERSION} "
62+ echo " Please see more details here: https://semver.org"
63+ exit 1
64+ fi
65+ fi
66+
67+ GIT_RELEASE_TAG=$( git describe --abbrev=0 --tags)
68+ }
69+
70+ # borrowed from k8s.io/hack/lib/version.sh and modified
71+ # Prints the value that needs to be passed to the -ldflags parameter of go build
72+ version::ldflags () {
73+ version::get_version_vars
74+
75+ local -a ldflags
76+ function add_ldflag() {
77+ local key=${1}
78+ local val=${2}
79+ ldflags+=(
80+ " -X 'sigs.k8s.io/cluster-api-provider-azure/version.${key} =${val} '"
81+ )
82+ }
83+
84+ add_ldflag " buildDate" " $( date ${SOURCE_DATE_EPOCH: +" --date=@${SOURCE_DATE_EPOCH} " } -u +' %Y-%m-%dT%H:%M:%SZ' ) "
85+ add_ldflag " gitCommit" " ${GIT_COMMIT} "
86+ add_ldflag " gitTreeState" " ${GIT_TREE_STATE} "
87+ add_ldflag " gitMajor" " ${GIT_MAJOR} "
88+ add_ldflag " gitMinor" " ${GIT_MINOR} "
89+ add_ldflag " gitVersion" " ${GIT_VERSION} "
90+
91+ # The -ldflags parameter takes a single string, so join the output.
92+ echo " ${ldflags[*]-} "
93+ }
94+
95+ version::ldflags
0 commit comments