mirror of https://github.com/linkerd/linkerd2.git
76 lines
1.6 KiB
Bash
76 lines
1.6 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -eu
|
|
|
|
git_sha_head() {
|
|
git rev-parse --short=8 HEAD
|
|
}
|
|
|
|
go_deps_sha() {
|
|
bindir=$( cd "${BASH_SOURCE[0]%/*}" && pwd )
|
|
rootdir=$( cd "$bindir"/.. && pwd )
|
|
cat "$rootdir/go.mod" "$rootdir/Dockerfile-go-deps" | shasum - | awk '{print $1}' |cut -c 1-8
|
|
}
|
|
|
|
clean_head() {
|
|
[ -n "${CI_FORCE_CLEAN:-}" ] || git diff-index --quiet HEAD --
|
|
}
|
|
|
|
named_tag() {
|
|
tag="$(git name-rev --tags --name-only "$(git_sha_head)")"
|
|
tag=${tag%"^0"}
|
|
echo "${tag}"
|
|
}
|
|
|
|
head_root_tag() {
|
|
if clean_head ; then
|
|
clean_head_root_tag
|
|
else
|
|
name=${USER//[^[:alnum:].-]/}
|
|
echo "dev-$(git_sha_head)-$name"
|
|
fi
|
|
}
|
|
|
|
clean_head_root_tag() {
|
|
if clean_head ; then
|
|
if [ "$(named_tag)" != undefined ]; then
|
|
named_tag
|
|
else
|
|
echo "git-$(git_sha_head)"
|
|
fi
|
|
else
|
|
echo 'Commit unstaged changes.' >&2
|
|
exit 3
|
|
fi
|
|
}
|
|
|
|
validate_tag() {
|
|
file=$1
|
|
shift
|
|
|
|
image=$1
|
|
shift
|
|
|
|
sha=$1
|
|
shift
|
|
|
|
dockerfile_tag=$(grep -oe "$image"':[^ ]*' "$file") || true
|
|
deps_tag="$image:$sha"
|
|
if [ -n "$dockerfile_tag" ] && [ "$dockerfile_tag" != "$deps_tag" ]; then
|
|
echo "Tag in \"$file\" does not match source tree:
|
|
$dockerfile_tag (\"$file\")
|
|
$deps_tag (source)"
|
|
return 3
|
|
fi
|
|
}
|
|
|
|
# This function should be called by any docker-build-* script that relies on Go
|
|
# dependencies. To confirm the set of scripts that should call this function,
|
|
# run:
|
|
# $ grep -ER 'docker-build-go-deps' .
|
|
|
|
validate_go_deps_tag() {
|
|
file=$1
|
|
validate_tag "$file" gcr.io/linkerd-io/go-deps "$(go_deps_sha)"
|
|
}
|