carlos / todomvc-bakeoff Public

Clone
git clone https://amadan.net/carlos/todomvc-bakeoff

Plain git — no account needed to clone.

Download

Download this file

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