Files
mesh-host/merge-check.sh
T
jochen 5e189c2fca
mesh/merge-gate pass: builds mesh-host → ace, g14, novox, shanks; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/repo-check pass: THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the change's judges the pull requests after it merges; it…
mesh/delivery delivered
Say a tool check's errors once and as they stand, and test the link on a real bus
The evidence read "asking it: asking <subject>": the words are now the link's own.
A deadline is said as the time the check gave it. A refusal is said only when the bus
refused this question, not an earlier one under a grant since widened. merge-check.sh
runs the tests that need a bus against a throwaway nats-server when the toolchain has
one, and says so when it does not (hq issue 331).
2026-10-08 17:01:15 +02:00

60 lines
2.3 KiB
Bash
Executable File

#!/bin/sh
# mesh-check-toolchain: go
#
# The node-engine's own check (novox/hq ADR 0237 as amended): the second layer of a pull request's merge
# check, `mesh/repo-check`, run by the build seat in the mesh's Go toolchain — and by hand.
#
# The gate — the controller the mesh runs, built with THIS change's validator in place of the one it
# vendors, composing and validating every machine of the facts snapshot — is the build seat's first layer
# (`mesh/merge-gate`), run because the mesh's module graph builds `mesh-host` from this repository and
# judged so because it does. It is not repeated here. This is the code's own quality and its suite:
# formatted, vetted, and every test, under the race detector when the toolchain has a C compiler.
#
# Exit 0 is a pass; anything else fails `mesh/repo-check` with the last line printed.
set -eu
unformatted=$(gofmt -l .)
if [ -n "$unformatted" ]; then
echo "not gofmt'd:"
echo "$unformatted"
exit 1
fi
CGO_ENABLED=0 go vet ./...
# **The tests that need a real bus** (MESH_TEST_NATS) run against a throwaway nats-server with JetStream when
# the toolchain holds one, so the link the node-engine dials is tested as it is used (hq issue 331: every
# unit test used fake links, and the real one could not ask a tool). Said when it cannot: a skipped test
# is not a passed one. A caller that sets MESH_TEST_NATS keeps its own bus.
if [ -z "${MESH_TEST_NATS:-}" ]; then
if command -v nats-server >/dev/null 2>&1; then
bus_dir=$(mktemp -d)
bus_port=$((20000 + $$ % 20000))
nats-server -js -a 127.0.0.1 -p "$bus_port" -sd "$bus_dir" >"$bus_dir/log" 2>&1 &
bus_pid=$!
trap 'kill "$bus_pid" 2>/dev/null || true; rm -rf "$bus_dir"' EXIT
up=0
for _ in 1 2 3 4 5 6 7 8 9 10; do
if grep -q "Server is ready" "$bus_dir/log"; then
up=1
break
fi
sleep 0.5
done
if [ "$up" -ne 1 ]; then
echo "the throwaway nats-server did not start:"
cat "$bus_dir/log"
exit 1
fi
export MESH_TEST_NATS="nats://127.0.0.1:$bus_port"
else
echo "NOT RUN AGAINST A BUS: the toolchain holds no nats-server; the tests that need one are skipped"
fi
fi
if command -v gcc >/dev/null 2>&1; then
CGO_ENABLED=1 go test -race -count=1 ./...
else
echo "NOT RACE-CHECKED: the toolchain holds no C compiler; the suite runs without the race detector"
CGO_ENABLED=0 go test -count=1 ./...
fi