mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-08-02 00:02:01 +00:00
rootfs: enforce minimum Go version when building locally
When building locally (without Docker), the Go version installed on the system, needed to build the agent, must satisfy the minimum Go version requirement specified in runtime/versions.yaml. Signed-off-by: Marco Vedovati <mvedovati@suse.com>
This commit is contained in:
parent
92b42c7f6d
commit
e770e2ad1b
@ -250,11 +250,46 @@ detect_go_version()
|
||||
typeset -r yq=$(command -v yq || command -v ${GOPATH}/bin/yq)
|
||||
[ -z "$yq" ] && die "'yq' application not found (needed to parsing minimum Go version required)"
|
||||
|
||||
typeset -r runtimeVersion="${AGENT_VERSION:-master}"
|
||||
typeset -r runtimeVersionsURL="https://raw.githubusercontent.com/kata-containers/runtime/${runtimeVersion}/versions.yaml"
|
||||
local runtimeRevision=
|
||||
|
||||
GO_VERSION=$(curl -sSL "${runtimeVersionsURL}" | $yq r - languages.golang.version)
|
||||
info "Detected Go version: $GO_VERSION"
|
||||
if [ "${AGENT_VERSION:-master}" == "master" ]; then
|
||||
# This matches both AGENT_VERSION == "" and AGENT_VERSION == "master"
|
||||
runtimeRevision="master"
|
||||
else
|
||||
# Detect runtime revision by fetching the agent's VERSION file
|
||||
runtimeRevision="$(curl -fsSL https://raw.githubusercontent.com/kata-containers/agent/${AGENT_VERSION:-master}/VERSION)"
|
||||
[ -z "$runtimeRevision" ] && die "Could not detect the agent version for the given AGENT_VERSION='${AGENT_VERSION:-master}'"
|
||||
fi
|
||||
|
||||
typeset -r runtimeVersionsURL="https://raw.githubusercontent.com/kata-containers/runtime/${runtimeRevision}/versions.yaml"
|
||||
GO_VERSION="$(curl -fsSL "$runtimeVersionsURL" | $yq r - "languages.golang.version")"
|
||||
|
||||
[ "$?" == "0" ] && [ "$GO_VERSION" != "null" ]
|
||||
}
|
||||
|
||||
# Compares two SEMVER-style versions passed as arguments, up to the MINOR version
|
||||
# number.
|
||||
# Returns a zero exit code if the version specified by the first argument is
|
||||
# older OR equal than / to the version in the second argument, non-zero exit
|
||||
# code otherwise.
|
||||
compare_versions()
|
||||
{
|
||||
typeset -i -a v1=($(echo "$1" | awk 'BEGIN {FS = "."} {print $1" "$2}'))
|
||||
typeset -i -a v2=($(echo "$2" | awk 'BEGIN {FS = "."} {print $1" "$2}'))
|
||||
|
||||
# Sanity check: first version can't be all zero
|
||||
[ "${v1[0]}" -eq "0" ] && \
|
||||
[ "${v1[1]}" -eq "0" ] && \
|
||||
die "Failed to parse version number"
|
||||
|
||||
# Major
|
||||
[ "${v1[0]}" -gt "${v2[0]}" ] && { false; return; }
|
||||
|
||||
# Minor
|
||||
[ "${v1[0]}" -eq "${v2[0]}" ] && \
|
||||
[ "${v1[1]}" -gt "${v2[1]}" ] && { false; return; }
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
while getopts a:hlo:r:t: opt
|
||||
@ -321,9 +356,18 @@ fi
|
||||
|
||||
mkdir -p ${ROOTFS_DIR}
|
||||
|
||||
detect_go_version
|
||||
detect_go_version ||
|
||||
die "Could not detect the required Go version for AGENT_VERSION='${AGENT_VERSION:-master}'."
|
||||
|
||||
if [ -n "${USE_DOCKER}" ] ; then
|
||||
echo "Required Go version: $GO_VERSION"
|
||||
|
||||
if [ -z "${USE_DOCKER}" ] ; then
|
||||
#Generate an error if the local Go version is too old
|
||||
foundVersion=$(go version | sed -E "s/^.+([0-9]+\.[0-9]+\.[0-9]+).*$/\1/g")
|
||||
|
||||
compare_versions "$GO_VERSION" $foundVersion || \
|
||||
die "Your Go version $foundVersion is older than the minimum expected Go version $GO_VERSION"
|
||||
else
|
||||
image_name="${distro}-rootfs-osbuilder"
|
||||
|
||||
generate_dockerfile "${distro_config_dir}"
|
||||
|
Loading…
Reference in New Issue
Block a user