...

Text file src/k8s.io/utils/hack/verify-go-directive.sh

Documentation: k8s.io/utils/hack

     1#!/usr/bin/env bash
     2
     3# Copyright 2024 The Kubernetes Authors.
     4#
     5# Licensed under the Apache License, Version 2.0 (the "License");
     6# you may not use this file except in compliance with the License.
     7# You may obtain a copy of the License at
     8#
     9#     http://www.apache.org/licenses/LICENSE-2.0
    10#
    11# Unless required by applicable law or agreed to in writing, software
    12# distributed under the License is distributed on an "AS IS" BASIS,
    13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14# See the License for the specific language governing permissions and
    15# limitations under the License.
    16
    17set -o errexit
    18set -o nounset
    19set -o pipefail
    20
    21function usage {
    22  local script="$(basename $0)"
    23
    24  echo >&2 "Usage: ${script} [-g <maximum go directive>]
    25
    26This script should be run at the root of a module.
    27
    28-g <maximum go directive>
    29  Compare the go directive in the local working copy's go.mod
    30  to the specified maximum version it can be. Versions provided
    31  here are of the form 1.x.y, without the 'go' prefix.
    32
    33Examples:
    34  ${script} -g 1.20
    35  ${script} -g 1.21.6
    36"
    37  exit 1
    38}
    39
    40max=""
    41while getopts g: o
    42do case "$o" in
    43  g)    max="$OPTARG";;
    44  [?])  usage;;
    45  esac
    46done
    47
    48# If max is empty, print usage and error
    49if [[ -z "${max}" ]]; then
    50  usage;
    51fi
    52
    53# Don't specify the version with the go prefix, just 1.x.y will do.
    54if ! printf '%s\n' "${max}" | grep -v -q "^go"; then
    55  usage;
    56fi
    57
    58current=$(grep '^go [1-9]*' go.mod | cut -d ' ' -f2)
    59if [[ -z "${current}" ]]; then
    60  echo >&2 "FAIL: could not get value of go directive from go.mod"
    61  exit 1
    62fi
    63
    64if ! printf '%s\n' "${current}" "${max}" | sort --check=silent --version-sort; then
    65    echo >&2 "FAIL: current Go directive ${current} is greater than ${max}"
    66    exit 1
    67fi

View as plain text