58 lines
2.1 KiB
Bash
Executable File
58 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
|
command=${1:-}
|
|
if [ -z "$command" ]; then
|
|
echo "usage: scripts/test-env doctor [--e2e] | coverage|status|logs|collect|recover|reuse|stop|reset|purge|gc [options]" >&2
|
|
exit 2
|
|
fi
|
|
shift
|
|
|
|
if [ "$command" = --help ] || [ "$command" = -h ]; then
|
|
echo "usage: scripts/test-env doctor [--e2e] | coverage|status|logs|collect|recover|reuse|stop|reset|purge|gc [options]"
|
|
exit 0
|
|
fi
|
|
|
|
fail() { printf '%s\n' "test-env: $*" >&2; exit 2; }
|
|
|
|
doctor() {
|
|
e2e=no
|
|
while [ "$#" -gt 0 ]; do
|
|
case $1 in
|
|
--e2e) e2e=yes ;;
|
|
--help|-h) echo "usage: scripts/test-env doctor [--e2e]"; return 0 ;;
|
|
*) fail "unknown doctor option $1" ;;
|
|
esac
|
|
shift
|
|
done
|
|
docker version >/dev/null || fail "Docker is unavailable"
|
|
docker compose version >/dev/null || fail "Docker Compose is unavailable"
|
|
defaults=$repo_root/test/harness/defaults.toml
|
|
[ -r "$defaults" ] || fail "harness defaults are unreadable"
|
|
floor=$(awk -F '=' '/^free_space_floor_bytes[[:space:]]*=/{gsub(/[[:space:]]/, "", $2); print $2; exit}' "$defaults")
|
|
case $floor in ''|*[!0-9]*) fail "harness free-space floor is invalid" ;; esac
|
|
available_kib=$(df -Pk "$repo_root" | awk 'NR == 2 { print $4 }')
|
|
case $available_kib in ''|*[!0-9]*) fail "could not determine available disk space" ;; esac
|
|
available_bytes=$((available_kib * 1024))
|
|
[ "$available_bytes" -ge "$floor" ] || fail "available disk space $available_bytes is below harness floor $floor"
|
|
printf 'docker=ready compose=ready disk_available_bytes=%s disk_floor_bytes=%s cpus=%s\n' "$available_bytes" "$floor" "$(getconf _NPROCESSORS_ONLN 2>/dev/null || printf '?')"
|
|
if [ "$e2e" = yes ]; then
|
|
"$repo_root/scripts/windows/test-host" status
|
|
fi
|
|
cd "$repo_root"
|
|
exec docker compose -f deploy/compose.yaml run --rm toolchain go run ./test/harness doctor
|
|
}
|
|
|
|
if [ "$command" = doctor ]; then
|
|
doctor "$@"
|
|
exit $?
|
|
fi
|
|
|
|
docker version >/dev/null
|
|
docker compose version >/dev/null
|
|
|
|
cd "$repo_root"
|
|
exec docker compose -f deploy/compose.yaml run --rm toolchain \
|
|
go run ./test/harness "$command" "$@"
|