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
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).
60 lines
2.3 KiB
Bash
Executable File
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
|