#!/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