#!/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)" TASK_ID="b1e811fb-158f-415c-a011-64c724e84c5c" WORK_ROOT="${ULTRACLOUD_WORK_ROOT:-${REPO_ROOT}/work}" LOG_ROOT="${1:-${WORK_ROOT}/baselines/${TASK_ID}}" mkdir -p "${LOG_ROOT}" log() { printf '[local-baseline] %s\n' "$*" } host_cpu_count() { local count count="$(getconf _NPROCESSORS_ONLN 2>/dev/null || nproc 2>/dev/null || echo 1)" if [[ ! "${count}" =~ ^[0-9]+$ ]] || (( count < 1 )); then count=1 fi printf '%s\n' "${count}" } default_local_nix_max_jobs() { local cpu_count="$1" if (( cpu_count <= 2 )); then printf '1\n' return 0 fi printf '%s\n' "$(( (cpu_count + 1) / 2 ))" } default_local_nix_build_cores() { local cpu_count="$1" local max_jobs="$2" local build_cores=1 if (( max_jobs > 0 )); then build_cores="$(( cpu_count / max_jobs ))" fi if (( build_cores < 1 )); then build_cores=1 fi printf '%s\n' "${build_cores}" } append_nix_config_line() { local line="$1" if [[ -n "${NIX_CONFIG:-}" ]]; then NIX_CONFIG+=$'\n' fi NIX_CONFIG+="${line}" } host_nested_param_path() { if [[ -f /sys/module/kvm_intel/parameters/nested ]]; then printf '%s\n' /sys/module/kvm_intel/parameters/nested elif [[ -f /sys/module/kvm_amd/parameters/nested ]]; then printf '%s\n' /sys/module/kvm_amd/parameters/nested fi } prepare_runtime_dirs() { local cpu_count default_max_jobs default_build_cores cpu_count="$(host_cpu_count)" default_max_jobs="$(default_local_nix_max_jobs "${cpu_count}")" default_build_cores="$(default_local_nix_build_cores "${cpu_count}" "${default_max_jobs}")" export ULTRACLOUD_WORK_ROOT="${WORK_ROOT}" export TMPDIR="${TMPDIR:-${WORK_ROOT}/tmp}" export XDG_CACHE_HOME="${XDG_CACHE_HOME:-${WORK_ROOT}/xdg-cache}" export PHOTON_CLUSTER_WORK_ROOT="${PHOTON_CLUSTER_WORK_ROOT:-${WORK_ROOT}/test-cluster}" export PHOTON_VM_DIR="${PHOTON_VM_DIR:-${PHOTON_CLUSTER_WORK_ROOT}/state}" export PHOTON_CLUSTER_VDE_SWITCH_DIR="${PHOTON_CLUSTER_VDE_SWITCH_DIR:-${PHOTON_CLUSTER_WORK_ROOT}/vde-switch}" export ULTRACLOUD_LOCAL_NIX_MAX_JOBS="${ULTRACLOUD_LOCAL_NIX_MAX_JOBS:-${default_max_jobs}}" export ULTRACLOUD_LOCAL_NIX_BUILD_CORES="${ULTRACLOUD_LOCAL_NIX_BUILD_CORES:-${default_build_cores}}" export PHOTON_CLUSTER_NIX_MAX_JOBS="${PHOTON_CLUSTER_NIX_MAX_JOBS:-${ULTRACLOUD_LOCAL_NIX_MAX_JOBS}}" export PHOTON_CLUSTER_NIX_BUILD_CORES="${PHOTON_CLUSTER_NIX_BUILD_CORES:-${ULTRACLOUD_LOCAL_NIX_BUILD_CORES}}" append_nix_config_line "builders =" append_nix_config_line "max-jobs = ${ULTRACLOUD_LOCAL_NIX_MAX_JOBS}" append_nix_config_line "cores = ${ULTRACLOUD_LOCAL_NIX_BUILD_CORES}" append_nix_config_line "experimental-features = nix-command flakes" append_nix_config_line "warn-dirty = false" export NIX_CONFIG mkdir -p \ "${TMPDIR}" \ "${XDG_CACHE_HOME}" \ "${PHOTON_CLUSTER_WORK_ROOT}" \ "${PHOTON_CLUSTER_VDE_SWITCH_DIR}" \ "${LOG_ROOT}" } capture_environment() { { printf 'task_id=%s\n' "${TASK_ID}" printf 'started_at=%s\n' "$(date -Is)" printf 'repo_root=%s\n' "${REPO_ROOT}" printf 'work_root=%s\n' "${WORK_ROOT}" printf 'log_root=%s\n' "${LOG_ROOT}" printf 'branch=%s\n' "$(git -C "${REPO_ROOT}" branch --show-current)" printf 'commit=%s\n' "$(git -C "${REPO_ROOT}" rev-parse HEAD)" printf 'host_cpu_count=%s\n' "$(host_cpu_count)" printf 'ultracloud_local_nix_max_jobs=%s\n' "${ULTRACLOUD_LOCAL_NIX_MAX_JOBS}" printf 'ultracloud_local_nix_build_cores=%s\n' "${ULTRACLOUD_LOCAL_NIX_BUILD_CORES}" printf 'photon_cluster_nix_max_jobs=%s\n' "${PHOTON_CLUSTER_NIX_MAX_JOBS}" printf 'photon_cluster_nix_build_cores=%s\n' "${PHOTON_CLUSTER_NIX_BUILD_CORES}" printf 'tmpdir=%s\n' "${TMPDIR}" printf 'xdg_cache_home=%s\n' "${XDG_CACHE_HOME}" printf 'photon_cluster_work_root=%s\n' "${PHOTON_CLUSTER_WORK_ROOT}" printf 'photon_vm_dir=%s\n' "${PHOTON_VM_DIR}" printf 'photon_cluster_vde_switch_dir=%s\n' "${PHOTON_CLUSTER_VDE_SWITCH_DIR}" printf 'nix_version=%s\n' "$(nix --version)" printf 'nix_builders=%s\n' "$(nix config show builders 2>/dev/null | awk -F' = ' 'NR==1 { print $2 }')" printf 'kvm_present=%s\n' "$([[ -e /dev/kvm ]] && echo yes || echo no)" printf 'kvm_access=%s\n' "$([[ -r /dev/kvm && -w /dev/kvm ]] && echo rw || echo no)" if [[ -e /dev/kvm ]]; then printf 'kvm_stat=%s\n' "$(stat -c '%A %U %G %t:%T' /dev/kvm)" fi local nested_path nested_path="$(host_nested_param_path || true)" if [[ -n "${nested_path}" ]]; then printf 'nested_param_path=%s\n' "${nested_path}" printf 'nested_param_value=%s\n' "$(<"${nested_path}")" fi } >"${LOG_ROOT}/environment.txt" } run_case() { local name="$1" local timeout_secs="$2" shift 2 local logfile="${LOG_ROOT}/${name}.log" local metafile="${LOG_ROOT}/${name}.meta" local started_at ended_at rc started_at="$(date -Is)" printf 'name=%s\n' "${name}" >"${metafile}" printf 'started_at=%s\n' "${started_at}" >>"${metafile}" printf 'timeout_secs=%s\n' "${timeout_secs}" >>"${metafile}" printf 'command=' >>"${metafile}" printf '%q ' "$@" >>"${metafile}" printf '\n' >>"${metafile}" log "running ${name}: $*" set +e ( cd "${REPO_ROOT}" timeout --signal=TERM --kill-after=60 "${timeout_secs}" "$@" ) 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 == 124 )); then log "${name} timed out after ${timeout_secs}s" elif (( rc == 0 )); then log "${name} passed" else log "${name} failed with exit ${rc}" fi return 0 } main() { prepare_runtime_dirs capture_environment run_case canonical-profile-eval-guards 3600 \ nix build .#checks.x86_64-linux.canonical-profile-eval-guards --no-link run_case supported-surface-guard 3600 \ nix build .#checks.x86_64-linux.supported-surface-guard --no-link run_case portable-control-plane-regressions 10800 \ nix build .#checks.x86_64-linux.portable-control-plane-regressions run_case deployer-bootstrap-e2e 10800 \ nix build .#checks.x86_64-linux.deployer-bootstrap-e2e run_case host-lifecycle-e2e 10800 \ nix build .#checks.x86_64-linux.host-lifecycle-e2e run_case fleet-scheduler-e2e 10800 \ nix build .#checks.x86_64-linux.fleet-scheduler-e2e run_case single-node-quickstart 14400 \ nix run .#single-node-quickstart run_case baremetal-iso 21600 \ nix run ./nix/test-cluster#cluster -- baremetal-iso run_case fresh-smoke 28800 \ nix run ./nix/test-cluster#cluster -- fresh-smoke } main "$@"