#!/bin/sh set -eu server=${1:-./VoiceCat.Server} work=$(mktemp -d) pid= cleanup() { if [ -n "${pid}" ] && kill -0 "$pid" 2>/dev/null; then kill -TERM "$pid"; wait "$pid" || true; fi; rm -rf "$work"; } trap cleanup EXIT INT TERM "$server" --data-dir "$work/data" --bind 127.0.0.1 --port 0 >"$work/server.log" 2>"$work/server.err" & pid=$! i=0 while ! grep -q '"event":"ready"' "$work/server.log"; do if ! kill -0 "$pid" 2>/dev/null; then cat "$work/server.err" >&2; exit 1; fi i=$((i + 1)); [ "$i" -lt 100 ] || { echo "server readiness timeout" >&2; exit 1; } sleep 0.1 done port=$(sed -n 's/.*"port":\([0-9][0-9]*\).*/\1/p' "$work/server.log" | head -n 1) fingerprint=$(sed -n 's/.*"certificate_fingerprint":"\([0-9A-F]*\)".*/\1/p' "$work/server.log" | head -n 1) "$server" --health-check "127.0.0.1:$port" --expect-fingerprint "$fingerprint" | grep -q '"status":"healthy"' [ "$(stat -c '%a' "$work/data")" = 700 ] kill -TERM "$pid" wait "$pid" pid= echo "Linux publish startup, TLS health, private data permissions and SIGTERM shutdown passed."