Files
pleno-vue/scripts/ci/runner-diagnostics.sh

99 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -uo pipefail
label="${1:-runner}"
if [[ $# -gt 0 ]]; then
shift
fi
if [[ "${1:-}" == "--" ]]; then
shift
fi
docker_cmd=("$@")
run_bounded() {
local seconds="$1"
shift
if command -v timeout >/dev/null 2>&1; then
timeout "${seconds}s" "$@" || true
return
fi
"$@" || true
}
run_silent_bounded() {
local seconds="$1"
shift
if command -v timeout >/dev/null 2>&1; then
timeout "${seconds}s" "$@" >/dev/null 2>&1
return
fi
"$@" >/dev/null 2>&1
}
resolve_docker_cmd() {
if [[ "${#docker_cmd[@]}" -gt 0 ]]; then
return 0
fi
if command -v docker >/dev/null 2>&1 && run_silent_bounded 10 docker info; then
docker_cmd=(docker)
return 0
fi
if command -v sudo >/dev/null 2>&1 && run_silent_bounded 10 sudo -n docker info; then
docker_cmd=(sudo docker)
return 0
fi
docker_cmd=()
return 1
}
echo "::group::Runner diagnostics (${label})"
date --iso-8601=seconds 2>/dev/null || date
hostname || true
uname -a || true
if command -v free >/dev/null 2>&1; then
echo
echo "Memory:"
free -h || true
fi
if command -v df >/dev/null 2>&1; then
echo
echo "Disk:"
df -h / /tmp "$PWD" 2>/dev/null || df -h / /tmp 2>/dev/null || true
fi
if command -v systemd-inhibit >/dev/null 2>&1; then
echo
echo "Systemd inhibitors:"
run_bounded 10 systemd-inhibit --list
fi
if resolve_docker_cmd; then
echo
echo "Docker info:"
run_bounded 20 "${docker_cmd[@]}" info
echo
echo "Docker disk usage:"
run_bounded 20 "${docker_cmd[@]}" system df
echo
echo "Recent Docker containers:"
run_bounded 20 "${docker_cmd[@]}" ps -a --no-trunc --format "table {{.ID}}\t{{.Status}}\t{{.Names}}" | head -n 20 || true
else
echo
echo "Docker diagnostics unavailable to this runner user."
fi
echo "::endgroup::"