who_need_help/scripts/bootstrap-kubernetes-tools.sh

70 lines
1.8 KiB
Bash
Executable File

#!/bin/sh
set -eu
ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
TOOLS="$ROOT/.tools/bin"
mkdir -p "$TOOLS"
KUBECTL_VERSION=v1.36.2
HELM_VERSION=v4.2.3
KIND_VERSION=v0.32.0
case "$(uname -m)" in
x86_64) ARCH=amd64 ;;
aarch64|arm64) ARCH=arm64 ;;
*) echo "Unsupported architecture: $(uname -m)" >&2; exit 1 ;;
esac
verified_download() {
url=$1
checksum_url=$2
destination=$3
archive=$4
temp="${destination}.download"
checksum="${temp}.sha256"
curl --fail --location --silent --show-error "$url" --output "$temp"
curl --fail --location --silent --show-error "$checksum_url" --output "$checksum"
expected=$(awk '{print $1}' "$checksum")
actual=$(sha256sum "$temp" | awk '{print $1}')
if [ "$expected" != "$actual" ]; then
echo "Checksum mismatch for $url" >&2
exit 1
fi
if [ "$archive" = "tar" ]; then
directory="${temp}.dir"
mkdir -p "$directory"
tar -xzf "$temp" -C "$directory"
install -m 0755 "$directory/linux-${ARCH}/helm" "$destination"
else
install -m 0755 "$temp" "$destination"
fi
}
if [ ! -x "$TOOLS/kubectl" ]; then
verified_download \
"https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/${ARCH}/kubectl" \
"https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/${ARCH}/kubectl.sha256" \
"$TOOLS/kubectl" binary
fi
if [ ! -x "$TOOLS/kind" ]; then
verified_download \
"https://kind.sigs.k8s.io/dl/${KIND_VERSION}/kind-linux-${ARCH}" \
"https://kind.sigs.k8s.io/dl/${KIND_VERSION}/kind-linux-${ARCH}.sha256sum" \
"$TOOLS/kind" binary
fi
if [ ! -x "$TOOLS/helm" ]; then
verified_download \
"https://get.helm.sh/helm-${HELM_VERSION}-linux-${ARCH}.tar.gz" \
"https://get.helm.sh/helm-${HELM_VERSION}-linux-${ARCH}.tar.gz.sha256sum" \
"$TOOLS/helm" tar
fi
"$TOOLS/kubectl" version --client
"$TOOLS/kind" version
"$TOOLS/helm" version