#!/usr/bin/env bash
DIR="$(dirname "${BASH_SOURCE[0]}")"
DIR="$(realpath "${DIR}")"
ROOT_DIR="$(realpath "${DIR}/../..")"
source "${DIR}/suite.sh"
VERSION="test"
GOOS="$(go env GOOS)"
GOARCH="$(go env GOARCH)"
LOCAL_PATH="${ROOT_DIR}/bin/${GOOS}/${GOARCH}"
export KWOK_CONTROLLER_BINARY="${LOCAL_PATH}/kwok"
export KWOKCTL_CONTROLLER_BINARY="${LOCAL_PATH}/kwokctl"
if [[ "${GOOS}" == "windows" ]]; then
KWOK_CONTROLLER_BINARY="${KWOK_CONTROLLER_BINARY}.exe"
KWOKCTL_CONTROLLER_BINARY="${KWOKCTL_CONTROLLER_BINARY}.exe"
fi
export KWOK_CONTROLLER_IMAGE="localhost/kwok:${VERSION}"
export PATH="${LOCAL_PATH}:${ROOT_DIR}/bin:${PATH}"
export KWOK_WORKDIR="${ROOT_DIR}/workdir"
function test_all() {
local runtime="${1}"
local cases="${2}"
local releases=("${@:3}")
echo "Test ${cases} on ${runtime} for ${releases[*]}"
if KWOK_RUNTIME="${runtime}" "${DIR}/kwokctl_${cases}_test.sh" "${releases[@]}"; then
rm -rf "${KWOK_LOGS_DIR}"
else
return 1
fi
for name in $(kwokctl get clusters); do
echo "Clean up cluster '${name}' that have not been deleted."
delete_cluster "${name}"
return 1
done
}
LAST_RELEASE_SIZE="${LAST_RELEASE_SIZE:-1}"
function supported_releases() {
head <"${ROOT_DIR}/supported_releases.txt" -n "${LAST_RELEASE_SIZE}"
}
function build_kwokctl_config() {
"${ROOT_DIR}/hack/manifests.sh" --kustomize=kwokctl
if [[ -f "${ROOT_DIR}/workdir/kwok.yaml" ]]; then
if [[ "$(cat "${ROOT_DIR}/workdir/kwok.yaml")" == *"$(cat "${ROOT_DIR}/artifacts/kwokctl.yaml")"* ]]; then
cat "${ROOT_DIR}/artifacts/kwokctl.yaml" >>"${ROOT_DIR}/workdir/kwok.yaml"
fi
else
mkdir -p "${ROOT_DIR}/workdir"
cat "${ROOT_DIR}/artifacts/kwokctl.yaml" >"${ROOT_DIR}/workdir/kwok.yaml"
fi
}
function build_kwokctl() {
if [[ -f "${KWOKCTL_CONTROLLER_BINARY}" ]]; then
return
fi
"${ROOT_DIR}/hack/releases.sh" --bin kwokctl --version "${VERSION}" --platform "${GOOS}/${GOARCH}"
}
function build_kwok() {
if [[ -f "${KWOK_CONTROLLER_BINARY}" ]]; then
return
fi
"${ROOT_DIR}/hack/releases.sh" --bin kwok --version "${VERSION}" --platform "${GOOS}/${GOARCH}"
}
function build_image() {
builder=${1:-"docker"}
if ${builder} image inspect "${KWOK_CONTROLLER_IMAGE}" >/dev/null 2>&1; then
return
fi
"${ROOT_DIR}/hack/releases.sh" --bin kwok --version "${KWOK_CONTROLLER_IMAGE##*:}" --platform "linux/${GOARCH}"
"${ROOT_DIR}/images/kwok/build.sh" --image "${KWOK_CONTROLLER_IMAGE%%:*}" --version "${VERSION}" --builder "${builder}" --platform "linux/${GOARCH}"
}
function requirements() {
"${ROOT_DIR}/hack/requirements.sh" kubectl buildx
build_kwokctl
build_image
build_kwokctl_config
}
function requirements_for_podman() {
"${ROOT_DIR}/hack/requirements.sh" kubectl
build_kwokctl
build_image podman
build_kwokctl_config
}
function requirements_for_nerdctl() {
"${ROOT_DIR}/hack/requirements.sh" kubectl
build_kwokctl
build_image nerdctl
build_kwokctl_config
}
function requirements_for_binary() {
"${ROOT_DIR}/hack/requirements.sh" kubectl
build_kwokctl
build_kwok
build_kwokctl_config
}