mirror of https://github.com/k3d-io/k3d
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.1 KiB
99 lines
3.1 KiB
#!/bin/bash
|
|
|
|
K3D_EXE=${EXE:-/bin/k3d}
|
|
K3D_IMAGE_TAG="$1-dind"
|
|
|
|
# define E2E_KEEP to non-empty for keeping the e2e runner container after running the tests
|
|
E2E_KEEP=${E2E_KEEP:-}
|
|
|
|
# Max. number of tests executed in parallel
|
|
E2E_PARALLEL=${E2E_PARALLEL:-}
|
|
|
|
# Max. time to wait for the runner container to be up
|
|
RUNNER_START_TIMEOUT=${E2E_RUNNER_START_TIMEOUT:-10}
|
|
|
|
# Override Docker-in-Docker version
|
|
E2E_DIND_VERSION=${E2E_DIND_VERSION:-}
|
|
|
|
# Fail on first error instead of waiting until all tests are done. Useful in CI.
|
|
E2E_FAIL_FAST=${E2E_FAIL_FAST:-}
|
|
|
|
####################################################################################
|
|
|
|
CURR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
|
[ -d "$CURR_DIR" ] || {
|
|
echo "FATAL: no current dir (maybe running in zsh?)"
|
|
exit 1
|
|
}
|
|
|
|
export CURRENT_STAGE="DIND"
|
|
|
|
|
|
# shellcheck disable=SC1091
|
|
source "$CURR_DIR/common.sh"
|
|
|
|
####################################################################################
|
|
|
|
info "Building container image k3d:${K3D_IMAGE_TAG}"
|
|
# Extra Image Build Arg
|
|
: "${EXTRA_BUILD_FLAG:=""}"
|
|
if [[ -n "$E2E_DIND_VERSION" ]]; then
|
|
info "Testing with Docker version $E2E_DIND_VERSION"
|
|
EXTRA_BUILD_FLAG="--build-arg DOCKER_VERSION=$E2E_DIND_VERSION"
|
|
fi
|
|
DOCKER_BUILDKIT=1 docker build . --quiet --no-cache $EXTRA_BUILD_FLAG --tag "k3d:${K3D_IMAGE_TAG}" --target "dind" || failed "Build failed"
|
|
|
|
# Start the runner container
|
|
TIMESTAMP=$(date "+%y%m%d%H%M%S")
|
|
container_name="k3d-e2e-runner-$TIMESTAMP"
|
|
info "Starting E2E Test Runner container ${container_name}"
|
|
k3de2e=$(docker run -d \
|
|
-v "$(pwd):/src" \
|
|
--privileged \
|
|
-e EXE="$K3D_EXE" \
|
|
-e CI="true" \
|
|
-e LOG_LEVEL="$LOG_LEVEL" \
|
|
-e E2E_FAIL_FAST="$E2E_FAIL_FAST" \
|
|
-e E2E_INCLUDE="$E2E_INCLUDE" \
|
|
-e E2E_EXCLUDE="$E2E_EXCLUDE" \
|
|
-e E2E_PARALLEL="$E2E_PARALLEL" \
|
|
-e E2E_EXTRA="$E2E_EXTRA" \
|
|
-e K3S_IMAGE="$E2E_K3S_VERSION" \
|
|
-e LOG_TIMESTAMPS="true" \
|
|
--add-host "k3d-registrytest-registry:127.0.0.1" \
|
|
--name "$container_name" \
|
|
"k3d:$K3D_IMAGE_TAG")
|
|
|
|
# setup exit trap (make sure that we always stop and remove the runner container)
|
|
finish() {
|
|
if [ -z "$E2E_KEEP" ] ; then
|
|
info "Cleaning up test container $container_name"
|
|
docker rm -f "$k3de2e" || /bin/true
|
|
fi
|
|
}
|
|
trap finish EXIT
|
|
|
|
# wait for the runner container to be up or exit early
|
|
TIMEOUT=0
|
|
until docker inspect "$k3de2e" | jq ".[0].State.Running" && docker logs "$k3de2e" 2>&1 | grep -qi "API listen on /var/run/docker.sock"; do
|
|
if [[ $TIMEOUT -eq $RUNNER_START_TIMEOUT ]]; then
|
|
echo "Failed to start E2E Runner Container in $RUNNER_START_TIMEOUT seconds"
|
|
exit 1
|
|
fi
|
|
sleep 1
|
|
(( TIMEOUT++ ))
|
|
done
|
|
|
|
# build helper container images
|
|
if [ -z "$E2E_HELPER_IMAGE_TAG" ]; then
|
|
docker exec "$k3de2e" git config --global --add safe.directory /src
|
|
docker exec --workdir /src "$k3de2e" make -j2 build-helper-images
|
|
# execute tests
|
|
echo "Start time outside runner: $(date)"
|
|
docker exec "$k3de2e" /src/tests/runner.sh
|
|
else
|
|
# execute tests
|
|
docker exec -e "K3D_HELPER_IMAGE_TAG=$E2E_HELPER_IMAGE_TAG" "$k3de2e" /src/tests/runner.sh
|
|
fi
|
|
|
|
|
|
|