#!/bin/sh # The unit tests of every Go module of its own below this repository's root, run from the root, for merge-check.sh # and for the test that tries it on a tree (merge_check_nested_test.go). Its own file so that the test needs no # particular merge-check.sh: the check that judges a change to merge-check.sh is main's. set -eu cgo="${cgo:-0}" race="${race:-}" # nested_modules vets and tests every Go module of its own below the root, `modules//go.mod` (novox/hq ADR 0420 # ยง5, issue 1025): `./...` stops at a nested go.mod, so a module that lives whole in this repository would have its # unit tests run by nobody. None is a pass. Each runs in its own directory, outside the vendor directory this # repository's own packages are built from; a nested module vendors what the forge holds (its own `vendor/`, so the # check runs offline), as this repository's root module does (issue 1019). A failing module fails the check; the others are still run. nested_modules() { nested=0 for gomod in modules/*/go.mod; do [ -e "$gomod" ] || continue dir=$(dirname "$gomod") echo "nested module $dir:" if ! (cd "$dir" && GOFLAGS= CGO_ENABLED=0 go vet ./... && GOFLAGS= CGO_ENABLED="${cgo:-0}" go test ${race:-} -count=1 -timeout 30m ./...); then echo "nested module $dir FAILED" nested=1 fi done return $nested } nested_modules