diff --git a/devel/cluster/create-kind.sh b/devel/cluster/create-kind.sh index 3c694f1bc..5e3c28729 100755 --- a/devel/cluster/create-kind.sh +++ b/devel/cluster/create-kind.sh @@ -30,36 +30,30 @@ check_tool kubectl # Specifies which Kind binary to use, allows to override for older version KIND_BIN="${KIND}" -# Compute the details of the kind image to use -export KIND_IMAGE_SHA="" +export KIND_IMAGE="" -# NB: Kind cluster image digests are autogenerated by hack/update-kind-images.sh +# NB: Kind image digests are autogenerated by hack/update-kind-images.sh if [[ "$K8S_VERSION" =~ 1\.18 ]] ; then - KIND_IMAGE_SHA=$KIND_IMAGE_SHA_K8S_118 + KIND_IMAGE=$KIND_IMAGE_K8S_118 elif [[ "$K8S_VERSION" =~ 1\.19 ]] ; then - KIND_IMAGE_SHA=$KIND_IMAGE_SHA_K8S_119 + KIND_IMAGE=$KIND_IMAGE_K8S_119 elif [[ "$K8S_VERSION" =~ 1\.20 ]] ; then - KIND_IMAGE_SHA=$KIND_IMAGE_SHA_K8S_120 + KIND_IMAGE=$KIND_IMAGE_K8S_120 elif [[ "$K8S_VERSION" =~ 1\.21 ]] ; then - KIND_IMAGE_SHA=$KIND_IMAGE_SHA_K8S_121 + KIND_IMAGE=$KIND_IMAGE_K8S_121 elif [[ "$K8S_VERSION" =~ 1\.22 ]] ; then - KIND_IMAGE_SHA=$KIND_IMAGE_SHA_K8S_122 + KIND_IMAGE=$KIND_IMAGE_K8S_122 elif [[ "$K8S_VERSION" =~ 1\.23 ]]; then - KIND_IMAGE_SHA=$KIND_IMAGE_SHA_K8S_123 + KIND_IMAGE=$KIND_IMAGE_K8S_123 elif [[ "$K8S_VERSION" =~ 1\.24 ]]; then - KIND_IMAGE_SHA=$KIND_IMAGE_SHA_K8S_124 - KIND_IMAGE_REPO="eu.gcr.io/jetstack-build-infra-images/kind" + KIND_IMAGE=$KIND_IMAGE_K8S_124 else echo "Unrecognised/unsupported Kubernetes version '${K8S_VERSION}'! Aborting..." exit 1 fi -export KIND_IMAGE="${KIND_IMAGE_REPO}@${KIND_IMAGE_SHA}" -echo "kind image details:" -echo " repo: ${KIND_IMAGE_REPO}" -echo " sha256: ${KIND_IMAGE_SHA}" -echo " version: ${K8S_VERSION}" +echo "kind image details: ${KIND_IMAGE} (k8s ${K8S_VERSION})" if $KIND_BIN get clusters | grep "^$KIND_CLUSTER_NAME\$" &>/dev/null; then echo "Existing cluster '$KIND_CLUSTER_NAME' found, skipping creating cluster..." diff --git a/devel/cluster/kind_cluster_node_versions.sh b/devel/cluster/kind_cluster_node_versions.sh index 0e7c4d382..18262566d 100644 --- a/devel/cluster/kind_cluster_node_versions.sh +++ b/devel/cluster/kind_cluster_node_versions.sh @@ -1,4 +1,4 @@ -# Copyright 2021 The cert-manager Authors. +# Copyright 2022 The cert-manager Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -14,10 +14,42 @@ # generated by ./hack/latest-kind-images.sh -KIND_IMAGE_SHA_K8S_118=sha256:e3dca5e16116d11363e31639640042a9b1bd2c90f85717a7fc66be34089a8169 -KIND_IMAGE_SHA_K8S_119=sha256:81f552397c1e6c1f293f967ecb1344d8857613fb978f963c30e907c32f598467 -KIND_IMAGE_SHA_K8S_120=sha256:393bb9096c6c4d723bb17bceb0896407d7db581532d11ea2839c80b28e5d8deb -KIND_IMAGE_SHA_K8S_121=sha256:84709f09756ba4f863769bdcabe5edafc2ada72d3c8c44d6515fc581b66b029c -KIND_IMAGE_SHA_K8S_122=sha256:1dfd72d193bf7da64765fd2f2898f78663b9ba366c2aa74be1fd7498a1873166 -KIND_IMAGE_SHA_K8S_123=sha256:0e34f0d0fd448aa2f2819cfd74e99fe5793a6e4938b328f657c8e3f81ee0dfb9 -KIND_IMAGE_SHA_K8S_124=sha256:2f170bf60cfad9d961711f96c34349d789a56b5783c9a5dbc0a29cb5a25ec729 \ No newline at end of file +KIND_IMAGE_K8S_118=docker.io/kindest/node@sha256:38a8726ece5d7867fb0ede63d718d27ce2d41af519ce68be5ae7fcca563537ed +KIND_IMAGE_K8S_119=docker.io/kindest/node@sha256:dec41184d10deca01a08ea548197b77dc99eeacb56ff3e371af3193c86ca99f4 +KIND_IMAGE_K8S_120=docker.io/kindest/node@sha256:a6ce604504db064c5e25921c6c0fffea64507109a1f2a512b1b562ac37d652f3 +KIND_IMAGE_K8S_121=docker.io/kindest/node@sha256:ae05d44cc636ee961068399ea5123ae421790f472c309900c151a44ee35c3e3e +KIND_IMAGE_K8S_122=docker.io/kindest/node@sha256:6e57a6b0c493c7d7183a1151acff0bfa44bf37eb668826bf00da5637c55b6d5e +KIND_IMAGE_K8S_123=docker.io/kindest/node@sha256:1af0f1bee4c3c0fe9b07de5e5d3fafeb2eec7b4e1b268ae89fcab96ec67e8355 + +# docker.io/kindest/node:v1.18.20 +KIND_IMAGE_SHA_K8S_118=sha256:38a8726ece5d7867fb0ede63d718d27ce2d41af519ce68be5ae7fcca563537ed + +# docker.io/kindest/node:v1.19.16 +KIND_IMAGE_SHA_K8S_119=sha256:dec41184d10deca01a08ea548197b77dc99eeacb56ff3e371af3193c86ca99f4 + +# docker.io/kindest/node:v1.20.15 +KIND_IMAGE_SHA_K8S_120=sha256:a6ce604504db064c5e25921c6c0fffea64507109a1f2a512b1b562ac37d652f3 + +# docker.io/kindest/node:v1.21.12 +KIND_IMAGE_SHA_K8S_121=sha256:ae05d44cc636ee961068399ea5123ae421790f472c309900c151a44ee35c3e3e + +# docker.io/kindest/node:v1.22.9 +KIND_IMAGE_SHA_K8S_122=sha256:6e57a6b0c493c7d7183a1151acff0bfa44bf37eb668826bf00da5637c55b6d5e + +# docker.io/kindest/node:v1.23.6 +KIND_IMAGE_SHA_K8S_123=sha256:1af0f1bee4c3c0fe9b07de5e5d3fafeb2eec7b4e1b268ae89fcab96ec67e8355 + +# note that these 'full' digests should be avoided since not all tools support them +# prefer KIND_IMAGE_K8S_*** instead +KIND_IMAGE_FULL_K8S_118=docker.io/kindest/node:v1.18.20@sha256:38a8726ece5d7867fb0ede63d718d27ce2d41af519ce68be5ae7fcca563537ed +KIND_IMAGE_FULL_K8S_119=docker.io/kindest/node:v1.19.16@sha256:dec41184d10deca01a08ea548197b77dc99eeacb56ff3e371af3193c86ca99f4 +KIND_IMAGE_FULL_K8S_120=docker.io/kindest/node:v1.20.15@sha256:a6ce604504db064c5e25921c6c0fffea64507109a1f2a512b1b562ac37d652f3 +KIND_IMAGE_FULL_K8S_121=docker.io/kindest/node:v1.21.12@sha256:ae05d44cc636ee961068399ea5123ae421790f472c309900c151a44ee35c3e3e +KIND_IMAGE_FULL_K8S_122=docker.io/kindest/node:v1.22.9@sha256:6e57a6b0c493c7d7183a1151acff0bfa44bf37eb668826bf00da5637c55b6d5e +KIND_IMAGE_FULL_K8S_123=docker.io/kindest/node:v1.23.6@sha256:1af0f1bee4c3c0fe9b07de5e5d3fafeb2eec7b4e1b268ae89fcab96ec67e8355 + +# 1.24 is a special case for now since there's no official upstream image +# eu.gcr.io/jetstack-build-infra-images/kind:v1.24.0 +KIND_IMAGE_SHA_K8S_124=sha256:2f170bf60cfad9d961711f96c34349d789a56b5783c9a5dbc0a29cb5a25ec729 +KIND_IMAGE_K8S_124=eu.gcr.io/jetstack-build-infra-images/kind@sha256:2f170bf60cfad9d961711f96c34349d789a56b5783c9a5dbc0a29cb5a25ec729 +KIND_IMAGE_FULL_K8S_124=eu.gcr.io/jetstack-build-infra-images/kind:v1.24.0@sha256:2f170bf60cfad9d961711f96c34349d789a56b5783c9a5dbc0a29cb5a25ec729 diff --git a/devel/lib/lib.sh b/devel/lib/lib.sh index 70010ebf1..ae4f3c1a7 100644 --- a/devel/lib/lib.sh +++ b/devel/lib/lib.sh @@ -23,7 +23,6 @@ export REPO_ROOT="$LIB_ROOT/../.." export SKIP_BUILD_ADDON_IMAGES="${SKIP_BUILD_ADDON_IMAGES:-}" export KIND_CLUSTER_NAME="${KIND_CLUSTER_NAME:-kind}" -export KIND_IMAGE_REPO="docker.io/kindest/node" # Default Kubernetes version to use to 1.23 export K8S_VERSION=${K8S_VERSION:-1.23} # Default OpenShift version to use to 3.11 diff --git a/hack/latest-kind-images.sh b/hack/latest-kind-images.sh index 9a921789c..af97ad138 100755 --- a/hack/latest-kind-images.sh +++ b/hack/latest-kind-images.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# Copyright 2021 The cert-manager Authors. +# Copyright 2022 The cert-manager Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,23 +17,20 @@ set -eu -o pipefail -# source this lib for KIND_IMAGE_REPO -source "devel/lib/lib.sh" +export KIND_IMAGE_REPO="docker.io/kindest/node" CRANE=crane TAGS=$(mktemp) trap 'rm -f -- "$TAGS"' EXIT -if ! which $CRANE >/dev/null 2>&1; then +if ! command -v $CRANE >/dev/null 2>&1; then echo -e "Couldn't find crane. Try running:\ngo install github.com/google/go-containerregistry/cmd/crane@latest" >&2 exit 1 fi function latest_kind_tag () { - # TODO (irbekrm): fix this so it sorts semver tags properly. 'sort' - # seems to consider vX.Y.2 bigger than vX.Y.12 - grep -E "^v$1" $TAGS | sort | tail -1 + grep -E "^v$1" $TAGS | sort --version-sort | tail -1 } $CRANE ls $KIND_IMAGE_REPO > $TAGS @@ -61,8 +58,14 @@ LATEST_121_DIGEST=$(crane digest $KIND_IMAGE_REPO:$LATEST_121_TAG) LATEST_122_DIGEST=$(crane digest $KIND_IMAGE_REPO:$LATEST_122_TAG) LATEST_123_DIGEST=$(crane digest $KIND_IMAGE_REPO:$LATEST_123_TAG) -cat << EOF -# Copyright 2021 The cert-manager Authors. +# v1.24 is a special hardcoded case for now, pending an official upstream 1.24 image + +TEMP_124_IMAGE_REPO=eu.gcr.io/jetstack-build-infra-images/kind +LATEST_124_TAG=v1.24.0 +LATEST_124_DIGEST=sha256:2f170bf60cfad9d961711f96c34349d789a56b5783c9a5dbc0a29cb5a25ec729 + +cat << EOF | tee ./devel/cluster/kind_cluster_node_versions.sh > ./make/kind_images.sh +# Copyright 2022 The cert-manager Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -78,10 +81,43 @@ cat << EOF # generated by $0 +KIND_IMAGE_K8S_118=$KIND_IMAGE_REPO@$LATEST_118_DIGEST +KIND_IMAGE_K8S_119=$KIND_IMAGE_REPO@$LATEST_119_DIGEST +KIND_IMAGE_K8S_120=$KIND_IMAGE_REPO@$LATEST_120_DIGEST +KIND_IMAGE_K8S_121=$KIND_IMAGE_REPO@$LATEST_121_DIGEST +KIND_IMAGE_K8S_122=$KIND_IMAGE_REPO@$LATEST_122_DIGEST +KIND_IMAGE_K8S_123=$KIND_IMAGE_REPO@$LATEST_123_DIGEST + +# $KIND_IMAGE_REPO:$LATEST_118_TAG KIND_IMAGE_SHA_K8S_118=$LATEST_118_DIGEST + +# $KIND_IMAGE_REPO:$LATEST_119_TAG KIND_IMAGE_SHA_K8S_119=$LATEST_119_DIGEST + +# $KIND_IMAGE_REPO:$LATEST_120_TAG KIND_IMAGE_SHA_K8S_120=$LATEST_120_DIGEST + +# $KIND_IMAGE_REPO:$LATEST_121_TAG KIND_IMAGE_SHA_K8S_121=$LATEST_121_DIGEST + +# $KIND_IMAGE_REPO:$LATEST_122_TAG KIND_IMAGE_SHA_K8S_122=$LATEST_122_DIGEST + +# $KIND_IMAGE_REPO:$LATEST_123_TAG KIND_IMAGE_SHA_K8S_123=$LATEST_123_DIGEST + +# note that these 'full' digests should be avoided since not all tools support them +# prefer KIND_IMAGE_K8S_*** instead +KIND_IMAGE_FULL_K8S_118=$KIND_IMAGE_REPO:$LATEST_118_TAG@$LATEST_118_DIGEST +KIND_IMAGE_FULL_K8S_119=$KIND_IMAGE_REPO:$LATEST_119_TAG@$LATEST_119_DIGEST +KIND_IMAGE_FULL_K8S_120=$KIND_IMAGE_REPO:$LATEST_120_TAG@$LATEST_120_DIGEST +KIND_IMAGE_FULL_K8S_121=$KIND_IMAGE_REPO:$LATEST_121_TAG@$LATEST_121_DIGEST +KIND_IMAGE_FULL_K8S_122=$KIND_IMAGE_REPO:$LATEST_122_TAG@$LATEST_122_DIGEST +KIND_IMAGE_FULL_K8S_123=$KIND_IMAGE_REPO:$LATEST_123_TAG@$LATEST_123_DIGEST + +# 1.24 is a special case for now since there's no official upstream image +# $TEMP_124_IMAGE_REPO:$LATEST_124_TAG +KIND_IMAGE_SHA_K8S_124=$LATEST_124_DIGEST +KIND_IMAGE_K8S_124=$TEMP_124_IMAGE_REPO@$LATEST_124_DIGEST +KIND_IMAGE_FULL_K8S_124=$TEMP_124_IMAGE_REPO:$LATEST_124_TAG@$LATEST_124_DIGEST EOF diff --git a/make/cluster.sh b/make/cluster.sh index a67370afa..8a093ec2d 100755 --- a/make/cluster.sh +++ b/make/cluster.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# Copyright 2020 The cert-manager Authors. +# Copyright 2022 The cert-manager Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -19,8 +19,11 @@ here=$(dirname "${BASH_SOURCE[0]}") source "$here/config/lib.sh" cd "$here/../" + set -e +source ./make/kind_images.sh + mode=kind k8s_version=1.23 kind_cluster_name=kind @@ -44,8 +47,6 @@ Flags: --show-image Show the image that will be used for the cluster and exit with 0. The image will be of the form docker.io/kindest/node:1.23@sha256:498...81ac. - --update-images - Update the kind images to the latest version. Environment variables: ${green}K8S_VERSION${end} @@ -54,21 +55,7 @@ EOF exit } -# The below image digests can be refreshed with the command: -# make/cluster.sh --update-images -images=$( - cat <&2 @@ -112,33 +96,15 @@ if printenv K8S_VERSION >/dev/null && [ -n "$K8S_VERSION" ]; then k8s_version="$K8S_VERSION" fi -# TODO (irbekrm): replace this with functionality that can get latest patch for -# the given minor Kubernetes release (perhaps just use -# ./hack/latest-kind-images.sh that already does that) -if [ -n "$update_images" ]; then - for img in $images; do - sha=$(crane digest "$(cut -d@ -f1 <<<"$img")") - if [ "$(cut -d@ -f2 <<<"$img")" != "$sha" ]; then - trace sed -i.bak "s|^$img$|$(cut -d@ -f1 <<<"$img")@$sha|" "$0" - else - printf "${green}${greencheck}Info${end}: $img already uses the latest digest\n" >&2 - fi - done - exit 0 -fi - -# TODO(irbekrm): change this functionality so that images from -# eu.gcr.io/jetstack-build-infra-images/kind can be retrieved in the same way as -# those from docker.io/kindest/node case "$k8s_version" in -1.18*) image=$(grep -F 1.18 <<<"$images") ;; -1.19*) image=$(grep -F 1.19 <<<"$images") ;; -1.20*) image=$(grep -F 1.20 <<<"$images") ;; -1.21*) image=$(grep -F 1.21 <<<"$images") ;; -1.22*) image=$(grep -F 1.22 <<<"$images") ;; -1.23*) image=$(grep -F 1.23 <<<"$images") ;; -1.24*) image="eu.gcr.io/jetstack-build-infra-images/kind:v1.24.0@sha256:2f170bf60cfad9d961711f96c34349d789a56b5783c9a5dbc0a29cb5a25ec729" ;; -v*) printf "${red}${redcross}Error${end}: the Kubernetes version must be given without the leading 'v'\n" >&2 && exit 1 ;; +1.18*) image=$KIND_IMAGE_FULL_K8S_118 ;; +1.19*) image=$KIND_IMAGE_FULL_K8S_119 ;; +1.20*) image=$KIND_IMAGE_FULL_K8S_120 ;; +1.21*) image=$KIND_IMAGE_FULL_K8S_121 ;; +1.22*) image=$KIND_IMAGE_FULL_K8S_122 ;; +1.23*) image=$KIND_IMAGE_FULL_K8S_123 ;; +1.24*) image=$KIND_IMAGE_FULL_K8S_124 ;; +v*) printf "${red}${redcross}Error${end}: Kubernetes version must be given without the leading 'v'\n" >&2 && exit 1 ;; *) printf "${red}${redcross}Error${end}: unsupported Kubernetes version ${yel}${k8s_version}${end}\n" >&2 && exit 1 ;; esac diff --git a/make/kind_images.sh b/make/kind_images.sh new file mode 100644 index 000000000..18262566d --- /dev/null +++ b/make/kind_images.sh @@ -0,0 +1,55 @@ +# Copyright 2022 The cert-manager 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. + +# generated by ./hack/latest-kind-images.sh + +KIND_IMAGE_K8S_118=docker.io/kindest/node@sha256:38a8726ece5d7867fb0ede63d718d27ce2d41af519ce68be5ae7fcca563537ed +KIND_IMAGE_K8S_119=docker.io/kindest/node@sha256:dec41184d10deca01a08ea548197b77dc99eeacb56ff3e371af3193c86ca99f4 +KIND_IMAGE_K8S_120=docker.io/kindest/node@sha256:a6ce604504db064c5e25921c6c0fffea64507109a1f2a512b1b562ac37d652f3 +KIND_IMAGE_K8S_121=docker.io/kindest/node@sha256:ae05d44cc636ee961068399ea5123ae421790f472c309900c151a44ee35c3e3e +KIND_IMAGE_K8S_122=docker.io/kindest/node@sha256:6e57a6b0c493c7d7183a1151acff0bfa44bf37eb668826bf00da5637c55b6d5e +KIND_IMAGE_K8S_123=docker.io/kindest/node@sha256:1af0f1bee4c3c0fe9b07de5e5d3fafeb2eec7b4e1b268ae89fcab96ec67e8355 + +# docker.io/kindest/node:v1.18.20 +KIND_IMAGE_SHA_K8S_118=sha256:38a8726ece5d7867fb0ede63d718d27ce2d41af519ce68be5ae7fcca563537ed + +# docker.io/kindest/node:v1.19.16 +KIND_IMAGE_SHA_K8S_119=sha256:dec41184d10deca01a08ea548197b77dc99eeacb56ff3e371af3193c86ca99f4 + +# docker.io/kindest/node:v1.20.15 +KIND_IMAGE_SHA_K8S_120=sha256:a6ce604504db064c5e25921c6c0fffea64507109a1f2a512b1b562ac37d652f3 + +# docker.io/kindest/node:v1.21.12 +KIND_IMAGE_SHA_K8S_121=sha256:ae05d44cc636ee961068399ea5123ae421790f472c309900c151a44ee35c3e3e + +# docker.io/kindest/node:v1.22.9 +KIND_IMAGE_SHA_K8S_122=sha256:6e57a6b0c493c7d7183a1151acff0bfa44bf37eb668826bf00da5637c55b6d5e + +# docker.io/kindest/node:v1.23.6 +KIND_IMAGE_SHA_K8S_123=sha256:1af0f1bee4c3c0fe9b07de5e5d3fafeb2eec7b4e1b268ae89fcab96ec67e8355 + +# note that these 'full' digests should be avoided since not all tools support them +# prefer KIND_IMAGE_K8S_*** instead +KIND_IMAGE_FULL_K8S_118=docker.io/kindest/node:v1.18.20@sha256:38a8726ece5d7867fb0ede63d718d27ce2d41af519ce68be5ae7fcca563537ed +KIND_IMAGE_FULL_K8S_119=docker.io/kindest/node:v1.19.16@sha256:dec41184d10deca01a08ea548197b77dc99eeacb56ff3e371af3193c86ca99f4 +KIND_IMAGE_FULL_K8S_120=docker.io/kindest/node:v1.20.15@sha256:a6ce604504db064c5e25921c6c0fffea64507109a1f2a512b1b562ac37d652f3 +KIND_IMAGE_FULL_K8S_121=docker.io/kindest/node:v1.21.12@sha256:ae05d44cc636ee961068399ea5123ae421790f472c309900c151a44ee35c3e3e +KIND_IMAGE_FULL_K8S_122=docker.io/kindest/node:v1.22.9@sha256:6e57a6b0c493c7d7183a1151acff0bfa44bf37eb668826bf00da5637c55b6d5e +KIND_IMAGE_FULL_K8S_123=docker.io/kindest/node:v1.23.6@sha256:1af0f1bee4c3c0fe9b07de5e5d3fafeb2eec7b4e1b268ae89fcab96ec67e8355 + +# 1.24 is a special case for now since there's no official upstream image +# eu.gcr.io/jetstack-build-infra-images/kind:v1.24.0 +KIND_IMAGE_SHA_K8S_124=sha256:2f170bf60cfad9d961711f96c34349d789a56b5783c9a5dbc0a29cb5a25ec729 +KIND_IMAGE_K8S_124=eu.gcr.io/jetstack-build-infra-images/kind@sha256:2f170bf60cfad9d961711f96c34349d789a56b5783c9a5dbc0a29cb5a25ec729 +KIND_IMAGE_FULL_K8S_124=eu.gcr.io/jetstack-build-infra-images/kind:v1.24.0@sha256:2f170bf60cfad9d961711f96c34349d789a56b5783c9a5dbc0a29cb5a25ec729 diff --git a/make/tools.mk b/make/tools.mk index b706f880f..fe8c24fac 100644 --- a/make/tools.mk +++ b/make/tools.mk @@ -424,6 +424,6 @@ $(error Missing required tools: $(MISSING)) endif endif -.PHONY: e2e-setup-kind-update-images -e2e-setup-kind-update-images: make/cluster.sh bin/tools/crane - make/cluster.sh --update-images +.PHONY: update-kind-images +update-kind-images: bin/tools/crane + CRANE=./bin/tools/crane ./hack/latest-kind-images.sh