mirror of
https://github.com/prometheus/prometheus.git
synced 2026-02-18 18:25:24 -05:00
71 lines
2.1 KiB
Bash
Executable file
71 lines
2.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#
|
|
# Description: Validate `go` directive in various Go mod files.
|
|
|
|
set -u -o pipefail
|
|
|
|
echo "Checking version support"
|
|
|
|
version_url='https://go.dev/dl/?mode=json'
|
|
get_supported_version() {
|
|
curl -s -f "${version_url}" \
|
|
| jq -r '.[].version' \
|
|
| sed 's/^go//' \
|
|
| cut -f2 -d'.' \
|
|
| sort -V \
|
|
| head -n1
|
|
}
|
|
|
|
get_current_version() {
|
|
awk '$1 == "go" {print $2}' go.mod \
|
|
| cut -f2 -d'.'
|
|
}
|
|
|
|
supported_version="$(get_supported_version)"
|
|
if [[ "${supported_version}" -le 0 ]]; then
|
|
echo "Error getting supported version from '${version_url}'"
|
|
exit 1
|
|
fi
|
|
current_version="$(get_current_version)"
|
|
if [[ "${current_version}" -le 0 ]]; then
|
|
echo "Error getting current version from go.mod"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "${current_version}" -gt "${supported_version}" ]] ; then
|
|
echo "Go mod version (1.${current_version}) is newer than upstream supported version (1.${supported_version})"
|
|
exit 1
|
|
fi
|
|
|
|
readarray -t mod_files < <(git ls-files go.mod go.work '*/go.mod' || find . -type f -name go.mod -or -name go.work)
|
|
|
|
echo "Checking files ${mod_files[@]}"
|
|
|
|
matches=$(awk '$1 == "go" {print $2}' "${mod_files[@]}" | sort -u | wc -l)
|
|
|
|
if [[ "${matches}" -ne 1 ]]; then
|
|
echo 'Not all go.mod/go.work files have matching go versions'
|
|
exit 1
|
|
fi
|
|
|
|
ci_workflow=".github/workflows/ci.yml"
|
|
if [[ -f "${ci_workflow}" ]] && yq -e '.jobs.test_go_oldest' "${ci_workflow}" > /dev/null 2>&1; then
|
|
echo "Checking CI workflow test_go_oldest uses N-1 Go version"
|
|
|
|
# Extract Go version from test_go_oldest job.
|
|
get_test_go_oldest_version() {
|
|
yq '.jobs.test_go_oldest.container.image' "${ci_workflow}" \
|
|
| grep -oP 'golang-builder:1\.\K[0-9]+'
|
|
}
|
|
|
|
test_go_oldest_version="$(get_test_go_oldest_version)"
|
|
if [[ -z "${test_go_oldest_version}" || "${test_go_oldest_version}" -le 0 ]]; then
|
|
echo "Error: Could not extract Go version from test_go_oldest job in ${ci_workflow}"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "${test_go_oldest_version}" -ne "${supported_version}" ]]; then
|
|
echo "Error: test_go_oldest uses Go 1.${test_go_oldest_version}, but should use Go 1.${supported_version} (oldest supported version)"
|
|
exit 1
|
|
fi
|
|
fi
|