#!/usr/bin/env bash set -euo pipefail ROOT="$(cd "$(dirname "$0")/../.." && pwd)" source "$ROOT/tests/kind/lib.sh" mkdir -p "$RUNTIME" rm -rf "$RUNTIME/image-archives" mkdir -p "$RUNTIME/image-archives" USER_KUBECONFIG_BEFORE="$(user_kubeconfig_digest)" SUCCEEDED=false cleanup() { local status=$? trap - EXIT INT TERM if [[ "${REMORA_TESTBED_RETAIN:-0}" = 1 ]] && [[ "$SUCCEEDED" != true ]]; then printf 'retained kubeconfig: %s\n' "$KUBECONFIG_PATH" printf 'retained context: %s\n' "$CONTEXT" exit "$status" fi if [[ -n "${REMORA_REAL_NERDCTL:-}" ]]; then delete_cluster || status=1 remove_runtime_namespace || status=1 fi rm -rf "$RUNTIME/image-archives" || status=1 rm -f "$KUBECONFIG_PATH" "$RUNTIME/dependencies.yaml" "$RUNTIME/probe.yaml" || status=1 if [[ "$(user_kubeconfig_digest)" != "$USER_KUBECONFIG_BEFORE" ]]; then printf 'user kubeconfig changed unexpectedly\n' >&2 status=1 fi if [[ "$status" = 0 ]] && [[ "$SUCCEEDED" = true ]]; then printf 'WP-02 hermetic dependency testbed passed\n' fi exit "$status" } trap cleanup EXIT INT TERM prepare_tools prepare_provider "$BIN/kind" create cluster \ --name "$CLUSTER" \ --image "$NODE_IMAGE" \ --config "$TESTBED/cluster.yaml" \ --kubeconfig "$KUBECONFIG_PATH" \ --wait 180s POSTGRES_LOCAL_IMAGE="$(load_external_image postgres "$POSTGRES_IMAGE")" REDIS_LOCAL_IMAGE="$(load_external_image redis "$REDIS_IMAGE")" DRAGONFLY_LOCAL_IMAGE="$(load_external_image dragonfly "$DRAGONFLY_IMAGE")" VAULT_LOCAL_IMAGE="$(load_external_image vault "$VAULT_IMAGE")" KEYCLOAK_LOCAL_IMAGE="$(load_external_image keycloak "$KEYCLOAK_IMAGE")" ZITADEL_LOCAL_IMAGE="$(load_external_image zitadel "$ZITADEL_IMAGE")" GARAGE_LOCAL_IMAGE="$(load_external_image garage "$GARAGE_IMAGE")" VERSITYGW_LOCAL_IMAGE="$(load_external_image versitygw "$VERSITYGW_IMAGE")" COREDNS_LOCAL_IMAGE="$(load_external_image coredns "$COREDNS_IMAGE")" CURL_LOCAL_IMAGE="$(load_external_image curl "$CURL_IMAGE")" AWS_CLI_LOCAL_IMAGE="$(load_external_image aws-cli "$AWS_CLI_IMAGE")" render_manifests \ "$POSTGRES_LOCAL_IMAGE" \ "$REDIS_LOCAL_IMAGE" \ "$DRAGONFLY_LOCAL_IMAGE" \ "$VAULT_LOCAL_IMAGE" \ "$KEYCLOAK_LOCAL_IMAGE" \ "$ZITADEL_LOCAL_IMAGE" \ "$GARAGE_LOCAL_IMAGE" \ "$VERSITYGW_LOCAL_IMAGE" \ "$COREDNS_LOCAL_IMAGE" \ "$CURL_LOCAL_IMAGE" \ "$AWS_CLI_LOCAL_IMAGE" kube apply --filename "$RUNTIME/dependencies.yaml" for deployment in postgres redis dragonfly vault keycloak zitadel garage versitygw controlled-dns; do kube --namespace remora-testbed rollout status "deployment/$deployment" --timeout 240s done kube apply --filename "$RUNTIME/probe.yaml" for job in state-probe oidc-probe garage-probe versitygw-probe; do wait_for_job "$job" done SUCCEEDED=true