Some checks failed
KVM Publishable Validation / publishable-kvm-suite (push) Failing after 11m56s
132 lines
3.6 KiB
Bash
Executable file
132 lines
3.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
export PATH="/run/current-system/sw/bin:/usr/bin:/bin:${PATH}"
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
|
|
LOG_DIR="${1:-${ULTRACLOUD_KVM_PUBLISHABLE_LOG_DIR:-${REPO_ROOT}/work/publishable-kvm-suite}}"
|
|
|
|
mkdir -p "${LOG_DIR}"
|
|
|
|
log() {
|
|
printf '[publishable-kvm-suite] %s\n' "$*"
|
|
}
|
|
|
|
choose_runtime_root() {
|
|
local candidate avail best="" best_avail=-1
|
|
|
|
for candidate in /nix/var/tmp /var/tmp /tmp "${HOME}"; do
|
|
mkdir -p "${candidate}" 2>/dev/null || continue
|
|
avail="$(df -Pk "${candidate}" 2>/dev/null | awk 'NR==2 { print $4 }')"
|
|
[[ -n "${avail}" ]] || continue
|
|
if (( avail > best_avail )); then
|
|
best="${candidate}"
|
|
best_avail="${avail}"
|
|
fi
|
|
done
|
|
|
|
[[ -n "${best}" ]] || {
|
|
log "no writable runtime root found"
|
|
return 1
|
|
}
|
|
|
|
printf '%s\n' "${best}/ultracloud-publishable-kvm-suite"
|
|
}
|
|
|
|
get_hostname() {
|
|
if command -v hostname >/dev/null 2>&1; then
|
|
hostname
|
|
else
|
|
uname -n
|
|
fi
|
|
}
|
|
|
|
prepare_runtime_dirs() {
|
|
local runtime_root
|
|
|
|
runtime_root="$(choose_runtime_root)"
|
|
export ULTRACLOUD_KVM_RUNTIME_ROOT="${runtime_root}"
|
|
export TMPDIR="${runtime_root}/tmp"
|
|
export XDG_CACHE_HOME="${runtime_root}/xdg-cache"
|
|
mkdir -p "${TMPDIR}" "${XDG_CACHE_HOME}"
|
|
}
|
|
|
|
capture_environment() {
|
|
{
|
|
printf 'started_at=%s\n' "$(date -Is)"
|
|
printf 'hostname=%s\n' "$(get_hostname)"
|
|
printf 'kernel=%s\n' "$(uname -a)"
|
|
printf 'pwd=%s\n' "$(pwd)"
|
|
printf 'user=%s\n' "$(id -un)"
|
|
printf 'uid=%s\n' "$(id -u)"
|
|
printf 'gid=%s\n' "$(id -g)"
|
|
printf 'branch=%s\n' "$(git -C "${REPO_ROOT}" branch --show-current)"
|
|
printf 'commit=%s\n' "$(git -C "${REPO_ROOT}" rev-parse HEAD)"
|
|
printf 'nix_version=%s\n' "$(nix --version)"
|
|
printf 'runtime_root=%s\n' "${ULTRACLOUD_KVM_RUNTIME_ROOT:-}"
|
|
printf 'tmpdir=%s\n' "${TMPDIR:-}"
|
|
printf 'xdg_cache_home=%s\n' "${XDG_CACHE_HOME:-}"
|
|
printf 'kvm_present=%s\n' "$([[ -e /dev/kvm ]] && echo yes || echo no)"
|
|
if [[ -e /dev/kvm ]]; then
|
|
printf 'kvm_stat=%s\n' "$(stat -c '%A %U %G %t:%T' /dev/kvm)"
|
|
fi
|
|
if [[ -f /sys/module/kvm_intel/parameters/nested ]]; then
|
|
printf 'kvm_intel_nested=%s\n' "$(cat /sys/module/kvm_intel/parameters/nested)"
|
|
fi
|
|
if [[ -f /sys/module/kvm_amd/parameters/nested ]]; then
|
|
printf 'kvm_amd_nested=%s\n' "$(cat /sys/module/kvm_amd/parameters/nested)"
|
|
fi
|
|
} >"${LOG_DIR}/environment.txt"
|
|
}
|
|
|
|
run_case() {
|
|
local name="$1"
|
|
shift
|
|
local logfile="${LOG_DIR}/${name}.log"
|
|
local metafile="${LOG_DIR}/${name}.meta"
|
|
local started_at ended_at rc
|
|
|
|
started_at="$(date -Is)"
|
|
printf 'command=%s\n' "$*" >"${metafile}"
|
|
printf 'started_at=%s\n' "${started_at}" >>"${metafile}"
|
|
|
|
log "running ${name}: $*"
|
|
set +e
|
|
(
|
|
cd "${REPO_ROOT}"
|
|
"$@"
|
|
) 2>&1 | tee "${logfile}"
|
|
rc=${PIPESTATUS[0]}
|
|
set -e
|
|
|
|
ended_at="$(date -Is)"
|
|
printf 'ended_at=%s\n' "${ended_at}" >>"${metafile}"
|
|
printf 'exit_code=%s\n' "${rc}" >>"${metafile}"
|
|
|
|
if (( rc != 0 )); then
|
|
log "${name} failed; see ${logfile}"
|
|
return "${rc}"
|
|
fi
|
|
|
|
log "${name} passed"
|
|
}
|
|
|
|
main() {
|
|
prepare_runtime_dirs
|
|
capture_environment
|
|
|
|
[[ -e /dev/kvm ]] || {
|
|
log "/dev/kvm is missing"
|
|
return 1
|
|
}
|
|
|
|
run_case fresh-smoke nix run ./nix/test-cluster#cluster -- fresh-smoke
|
|
run_case fresh-demo-vm-webapp nix run ./nix/test-cluster#cluster -- fresh-demo-vm-webapp
|
|
run_case fresh-matrix nix run ./nix/test-cluster#cluster -- fresh-matrix
|
|
|
|
printf 'finished_at=%s\n' "$(date -Is)" >>"${LOG_DIR}/environment.txt"
|
|
log "publishable KVM suite passed; logs in ${LOG_DIR}"
|
|
}
|
|
|
|
main "$@"
|