From 695369e1344679ae52b1c02bda857b7cf7df6448 Mon Sep 17 00:00:00 2001 From: AvineshTripathi Date: Tue, 12 Mar 2024 23:48:50 +0530 Subject: [PATCH] added go directive test --- Makefile | 7 +++- hack/verify-go-directive.sh | 71 +++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100755 hack/verify-go-directive.sh diff --git a/Makefile b/Makefile index 60c0f3aeeca3..67777974741b 100644 --- a/Makefile +++ b/Makefile @@ -24,6 +24,7 @@ SHELL:=/usr/bin/env bash # Go. # GO_VERSION ?= 1.21.8 +GO_DIRECTIVE_VERSION ?= 1.20 GO_CONTAINER_IMAGE ?= docker.io/library/golang:$(GO_VERSION) # Use GOPROXY environment variable if set @@ -617,11 +618,15 @@ APIDIFF_OLD_COMMIT ?= $(shell git rev-parse origin/main) apidiff: $(GO_APIDIFF) ## Check for API differences $(GO_APIDIFF) $(APIDIFF_OLD_COMMIT) --print-compatible -ALL_VERIFY_CHECKS = doctoc boilerplate shellcheck tiltfile modules gen conversions capi-book-summary +ALL_VERIFY_CHECKS = doctoc boilerplate shellcheck tiltfile modules gen conversions capi-book-summary go-directive .PHONY: verify verify: $(addprefix verify-,$(ALL_VERIFY_CHECKS)) lint-dockerfiles ## Run all verify-* targets +.PHONY: verify-go-directive +verify-go-directive: + TRACE=$(TRACE) ./hack/verify-go-directive.sh -g $(GO_DIRECTIVE_VERSION) + .PHONY: verify-modules verify-modules: generate-modules ## Verify go modules are up to date @if !(git diff --quiet HEAD -- go.sum go.mod $(TOOLS_DIR)/go.mod $(TOOLS_DIR)/go.sum $(TEST_DIR)/go.mod $(TEST_DIR)/go.sum); then \ diff --git a/hack/verify-go-directive.sh b/hack/verify-go-directive.sh new file mode 100755 index 000000000000..90583a85aee0 --- /dev/null +++ b/hack/verify-go-directive.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash + +# Copyright 2024 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. + +set -o errexit +set -o nounset +set -o pipefail + +if [[ "${TRACE-0}" == "1" ]]; then + set -o xtrace +fi + +function usage { + local script + script="$(basename "$0")" + cat >&2 <] +This script should be run at the root of a module. +-g + Compare the go directive in the local working copy's go.mod + to the specified maximum version it can be. Versions provided + here are of the form 1.x.y, without the 'go' prefix. +Examples: + ${script} -g 1.20 + ${script} -g 1.21.6 +EOF + exit 1 +} + +directory="" +max="" +while getopts g: opt; do + case "$opt" in + g) max="$OPTARG";; + *) usage;; + esac +done + +if [[ -z "${max}" || "${max}" == go* ]]; then + usage +fi + +if [[ -z "${directory}" ]]; then + directory="." +fi + +# Recursive search for go.mod files +find "${directory}" -name "go.mod" -type f -print0 | while IFS= read -r -d '' file; do + echo "Running go directive verify test for ${file}" + if ! current=$(awk '$1 == "go" {print $2; exit}' "$file"); then + echo >&2 "FAIL: could not get value of go directive from ${file}" + exit 1 + fi + + if ! printf '%s\n' "${current}" "${max}" | sort --check=silent --version-sort; then + echo >&2 "FAIL: current Go directive ${current} in ${file} is greater than ${max}" + exit 1 + fi +done \ No newline at end of file