|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- #!/usr/bin/env bash
-
- # Copyright 2014 The Kubernetes Authors.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
-
- # -----------------------------------------------------------------------------
- # CHANGELOG
- # KubeEdge Authors:
- # To Get Detail Version Info for KubeEdge Project
-
- set -o errexit
- set -o nounset
- set -o pipefail
-
- YES="y"
- NO="n"
-
- sedna::version::get_version_info() {
-
- GIT_COMMIT=$(git rev-parse "HEAD^{commit}" 2>/dev/null)
-
- if git_status=$(git status --porcelain 2>/dev/null) && [[ -z ${git_status} ]]; then
- GIT_TREE_STATE="clean"
- else
- GIT_TREE_STATE="dirty"
- fi
-
- GIT_VERSION=$(git describe --tags --abbrev=14 "${GIT_COMMIT}^{commit}" 2>/dev/null)
-
- # This translates the "git describe" to an actual semver.org
- # compatible semantic version that looks something like this:
- # v1.1.0-alpha.0.6+84c76d1142ea4d
- #
- # TODO: We continue calling this "git version" because so many
- # downstream consumers are expecting it there.
- #
- # These regexes are painful enough in sed...
- # We don't want to do them in pure shell, so disable SC2001
- # shellcheck disable=SC2001
- DASHES_IN_VERSION=$(echo "${GIT_VERSION}" | sed "s/[^-]//g")
- if [[ "${DASHES_IN_VERSION}" == "---" ]] ; then
- # shellcheck disable=SC2001
- # We have distance to subversion (v1.1.0-subversion-1-gCommitHash)
- GIT_VERSION=$(echo "${GIT_VERSION}" | sed "s/-\([0-9]\{1,\}\)-g\([0-9a-f]\{14\}\)$/.\1\+\2/")
- elif [[ "${DASHES_IN_VERSION}" == "--" ]] ; then
- # shellcheck disable=SC2001
- # We have distance to base tag (v1.1.0-1-gCommitHash)
- GIT_VERSION=$(echo "${GIT_VERSION}" | sed "s/-g\([0-9a-f]\{14\}\)$/+\1/")
- fi
-
- if [[ "${GIT_TREE_STATE}" == "dirty" ]]; then
- # git describe --dirty only considers changes to existing files, but
- # that is problematic since new untracked .go files affect the build,
- # so use our idea of "dirty" from git status instead.
- GIT_VERSION+="-dirty"
- fi
-
-
- # Try to match the "git describe" output to a regex to try to extract
- # the "major" and "minor" versions and whether this is the exact tagged
- # version or whether the tree is between two tagged versions.
- if [[ "${GIT_VERSION}" =~ ^v([0-9]+)\.([0-9]+)(\.[0-9]+)?([-].*)?([+].*)?$ ]]; then
- GIT_MAJOR=${BASH_REMATCH[1]}
- GIT_MINOR=${BASH_REMATCH[2]}
- if [[ -n "${BASH_REMATCH[4]}" ]]; then
- GIT_MINOR+="+"
- fi
- fi
-
- # uncomment until we have tags
- : <<EOF
- # If GIT_VERSION is not a valid Semantic Version, then refuse to build.
- if ! [[ "${GIT_VERSION}" =~ ^v([0-9]+)\.([0-9]+)(\.[0-9]+)?(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$ ]]; then
- echo "GIT_VERSION should be a valid Semantic Version. Current value: ${GIT_VERSION}" >&2
- echo "Please see more details here: https://semver.org" >&2
- exit 1
- fi
- EOF
- }
-
- # Get the value that needs to be passed to the -ldflags parameter of go build
- sedna::version::ldflags() {
- sedna::version::get_version_info > /dev/null
-
- local -a ldflags
- function add_ldflag() {
- local key=${1}
- local val=${2}
- # If you update these, also update the list pkg/version/def.bzl.
- ldflags+=(
- "-X ${SEDNA_GO_PACKAGE}/pkg/version.${key}=${val}"
- )
- }
-
- add_ldflag "buildDate" "$(date ${SOURCE_DATE_EPOCH:+"--date=@${SOURCE_DATE_EPOCH}"} -u +'%Y-%m-%dT%H:%M:%SZ')"
- if [[ -n ${GIT_COMMIT-} ]]; then
- add_ldflag "gitCommit" "${GIT_COMMIT}"
- add_ldflag "gitTreeState" "${GIT_TREE_STATE}"
- fi
-
- if [[ -n ${GIT_VERSION-} ]]; then
- add_ldflag "gitVersion" "${GIT_VERSION}"
- fi
-
- if [[ -n ${GIT_MAJOR-} && -n ${GIT_MINOR-} ]]; then
- add_ldflag "gitMajor" "${GIT_MAJOR}"
- add_ldflag "gitMinor" "${GIT_MINOR}"
- fi
-
- # The -ldflags parameter takes a single string, so join the output.
- echo "${ldflags[*]-}"
- }
-
-
- # sedna::binaries_from_targets take a list of build targets and return the
- # full go package to be built
- sedna::golang::binaries_from_targets() {
- local target
- for target in "$@"; do
- echo "${SEDNA_GO_PACKAGE}/${target}"
- done
- }
-
- sedna::check::env() {
- errors=()
- if [ -z "$GOPATH" ]; then
- errors+="GOPATH environment value not set"
- fi
-
- # check other env
-
- # check length of errors
- if [[ ${#errors[@]} -ne 0 ]] ; then
- local error
- for error in "${errors[@]}"; do
- echo "Error: "$error >&2
- done
- exit 1
- fi
- }
-
- ALL_BINARIES_AND_TARGETS=(
- gm:cmd/sedna-gm
- lc:cmd/sedna-lc
- )
-
- sedna::golang::get_target_by_binary() {
- local key=$1
- for bt in "${ALL_BINARIES_AND_TARGETS[@]}" ; do
- local binary="${bt%%:*}"
- if [ "${binary}" == "${key}" ]; then
- echo "${bt##*:}"
- return
- fi
- done
- echo "can not find binary: $key" >&2
- exit 1
- }
-
- sedna::golang::get_all_targets() {
- local -a targets
- for bt in "${ALL_BINARIES_AND_TARGETS[@]}" ; do
- targets+=("${bt##*:}")
- done
- echo ${targets[@]}
- }
-
- sedna::golang::get_all_binares() {
- local -a binares
- for bt in "${ALL_BINARIES_AND_TARGETS[@]}" ; do
- binares+=("${bt%%:*}")
- done
- echo ${binares[@]}
- }
-
- IFS=" " read -ra SEDNA_ALL_TARGETS <<< "$(sedna::golang::get_all_targets)"
- IFS=" " read -ra SEDNA_ALL_BINARIES<<< "$(sedna::golang::get_all_binares)"
-
- sedna::golang::build_binaries() {
- sedna::check::env
- local -a targets=()
- local binArg
- for binArg in "$@"; do
- targets+=("$(sedna::golang::get_target_by_binary $binArg)")
- done
-
- if [[ ${#targets[@]} -eq 0 ]]; then
- targets=("${SEDNA_ALL_TARGETS[@]}")
- fi
-
- local -a binaries
- while IFS="" read -r binary; do binaries+=("$binary"); done < <(sedna::golang::binaries_from_targets "${targets[@]}")
-
- local goldflags gogcflags
- # If GOLDFLAGS is unset, then set it to the a default of "-s -w".
- goldflags="${GOLDFLAGS=-s -w -buildid=} $(sedna::version::ldflags)"
- gogcflags="${GOGCFLAGS:-}"
-
- mkdir -p ${SEDNA_OUT_BINPATH}
- for bin in ${binaries[@]}; do
- echo "building $bin"
- local name="${bin##*/}"
- set -x
- go build -o ${SEDNA_OUT_BINPATH}/${name} -gcflags="${gogcflags:-}" -ldflags "${goldflags:-}" $bin
- set +x
- done
- }
|