external-dns/scripts/go-version-consistency.sh
Ivan Ka 5dd8369d29
ci: validate Go version consistency across cloudbuild.yaml, go.mod, and go.tool.mod (#6323)
* ci: validate Go version consistency across cloudbuild.yaml, go.mod, and go.tool.mod

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* ci: validate Go version consistency across cloudbuild.yaml, go.mod, and go.tool.mod

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* ci: validate Go version consistency across cloudbuild.yaml, go.mod, and go.tool.mod

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

---------

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
2026-03-30 02:10:12 +05:30

53 lines
1.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# Compares Go major.minor version in cloudbuild.yaml against go.mod and go.tool.mod
set -euo pipefail
if ! command -v yq &>/dev/null; then
echo "ERROR: yq is not installed" >&2
exit 1
fi
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
extract_major_minor() {
[[ $1 =~ ([0-9]+\.[0-9]+) ]] && echo "${BASH_REMATCH[1]}"
}
image_name=$(yq '.steps[].name | select(. == "docker.io/library/golang*")' "$REPO_ROOT/cloudbuild.yaml" | head -1)
if [[ -z "$image_name" ]]; then
echo "ERROR: Go version not found in cloudbuild.yaml" >&2
exit 1
fi
cloudbuild_ver=$(extract_major_minor "${image_name##*:}")
gomod_ver=$(extract_major_minor "$(awk '/^go [0-9]/{print $2; exit}' "$REPO_ROOT/go.mod")")
gotoolmod_ver=$(extract_major_minor "$(awk '/^go [0-9]/{print $2; exit}' "$REPO_ROOT/go.tool.mod")")
echo "cloudbuild.yaml : $cloudbuild_ver"
echo "go.mod : $gomod_ver"
echo "go.tool.mod : $gotoolmod_ver"
ok=true
if [[ "$cloudbuild_ver" != "$gomod_ver" ]]; then
echo "Go version in cloudbuild.yaml ($cloudbuild_ver) doesn't match go.mod ($gomod_ver)"
ok=false
fi
if [[ "$cloudbuild_ver" != "$gotoolmod_ver" ]]; then
echo "Go version in cloudbuild.yaml ($cloudbuild_ver) doesn't match go.tool.mod ($gotoolmod_ver)"
ok=false
fi
if [[ "$gomod_ver" != "$gotoolmod_ver" ]]; then
echo "Go version in go.mod ($gomod_ver) doesn't match go.tool.mod ($gotoolmod_ver)"
ok=false
fi
if $ok; then
echo "OK: all versions match ($cloudbuild_ver)"
else
exit 1
fi