#!/usr/bin/env bash # The platform boot check, run locally on the shipped arm64 binary under # qemu: start it on a unix socket, require 200 from /healthz and # /api/version, then require a clean exit on SIGTERM. # scripts/boot-check.sh set -euo pipefail bin=$(cd "$(dirname "$1")" && pwd)/$(basename "$1") root=${BAKEOFF_TOOLCHAINS:-$HOME/.local/share/bakeoff-toolchains}/arm64root work=$(mktemp -d -p "${TMPDIR:-$HOME/.cache}") pid= trap '[ -n "$pid" ] && kill "$pid" 2>/dev/null; rm -rf "$work"' EXIT cd "$work" CARLOS_HOST=boot-check.invalid qemu-aarch64-static -L "$root" "$bin" --socket "$work/app.sock" --db "$work/app.db" > "$work/out.log" 2>&1 & pid=$! for _ in $(seq 1 100); do [ -S "$work/app.sock" ] && break; sleep 0.2; done [ -S "$work/app.sock" ] || { echo "boot-check: no socket after 20 s"; cat "$work/out.log"; exit 1; } for path in /healthz /api/version; do code=$(curl -s -o "$work/body" -w '%{http_code}' --unix-socket "$work/app.sock" "http://boot-check.invalid$path") [ "$code" = 200 ] || { echo "boot-check: $path answered $code"; exit 1; } echo "boot-check: $path 200 $(head -c 60 "$work/body")" done kill -TERM "$pid" set +e; wait "$pid"; status=$?; set -e pid= [ "$status" = 0 ] || { echo "boot-check: exit status $status after SIGTERM"; exit 1; } echo "boot-check: clean exit on SIGTERM"