#!/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" "$@"