From be30ac3d010f0eadce7b014475ba98132b2849e2 Mon Sep 17 00:00:00 2001 From: AvineshTripathi Date: Tue, 12 Mar 2024 23:48:50 +0530 Subject: [PATCH] added go directive test --- .github/workflows/pr-verify.yaml | 22 +++++++--- Makefile | 6 ++- hack/verify-go-directive.sh | 71 ++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 6 deletions(-) create mode 100755 hack/verify-go-directive.sh diff --git a/.github/workflows/pr-verify.yaml b/.github/workflows/pr-verify.yaml index 464888e6a5d2..865c1379d6fa 100644 --- a/.github/workflows/pr-verify.yaml +++ b/.github/workflows/pr-verify.yaml @@ -12,8 +12,20 @@ jobs: runs-on: ubuntu-latest name: verify PR contents steps: - - name: Verifier action - id: verifier - uses: kubernetes-sigs/kubebuilder-release-tools@012269a88fa4c034a0acf1ba84c26b195c0dbab4 # tag=v0.4.3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} + - name: Verifier action + id: verifier + uses: kubernetes-sigs/kubebuilder-release-tools@012269a88fa4c034a0acf1ba84c26b195c0dbab4 # tag=v0.4.3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + + - name: Install Go + uses: actions/setup-go@v3 + with: + go-version: 1.21 + + - name: Checkout code + uses: actions/checkout@v2 + + - name: Verify Go directive + run: | + make verify-go-directive diff --git a/Makefile b/Makefile index b3a63b577d98..74783476695c 100644 --- a/Makefile +++ b/Makefile @@ -681,11 +681,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 = licenses boilerplate shellcheck tiltfile modules gen conversions doctoc capi-book-summary diagrams import-restrictions +ALL_VERIFY_CHECKS = licenses boilerplate shellcheck tiltfile modules gen conversions doctoc capi-book-summary diagrams import-restrictions 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 1.21 + .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..5dbfece64578 --- /dev/null +++ b/hack/verify-go-directive.sh @@ -0,0 +1,71 @@ +#!/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. + +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