mesh/delivery-group group feat/delivery-parts rejected: a member's own check failed
mesh/merge-gate waits for its group's composed check
mesh/repo-check head 35ff62845811 merged into trunk 7f618177d677 beside mesh-catalog#374@75957fc3 — fail: THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh):…
75 lines
3.3 KiB
Bash
75 lines
3.3 KiB
Bash
#!/bin/sh
|
|
# mesh-check-toolchain: go
|
|
#
|
|
# This repository's own check, mesh/repo-check (novox/hq ADR 0238 §4), written with its first commit (ADR 0428 §4):
|
|
# every Go module in the tree is vetted, its unit tests run, and then its integration tests (-tags integration).
|
|
# A tree with no Go module has nothing to test, and the check says so and passes.
|
|
#
|
|
# No module commits its dependencies (no vendor directory: .gitignore). A module's dependencies are fetched, or a
|
|
# requirement of the mesh's own forge (the pinned mesh-sdk commit) is taken from its repository's clone beside the check
|
|
# (MESH_CHECK_BESIDE), through a go.mod of its own (-modfile), by mesh-catalog's helper checks/deps, built from the
|
|
# clone of mesh-catalog beside this check and not copied here: the build seat forgets the forge credential before the
|
|
# check runs, so a commit the seat's module cache does not hold cannot be fetched from the forge (novox/hq issue 385). A
|
|
# module whose dependencies cannot be had **fails the check**, by name and why: its tests could not run, and a test that
|
|
# could not run is a failure, never a note. Run by hand, without MESH_CHECK_BESIDE, the dependencies are fetched.
|
|
set -eu
|
|
cd "$(dirname "$0")"
|
|
|
|
# The toolchain the check runs in sets -mod=vendor; there is no vendor directory, so the modules are used as they are.
|
|
GOFLAGS="$(printf '%s' "${GOFLAGS:-}" | sed 's/-mod=[a-z]*//g') -mod=mod"
|
|
export GOFLAGS
|
|
export GOPRIVATE=git.novox.be
|
|
|
|
modules=$(find . -name go.mod -not -path '*/vendor/*' -not -path './.git/*' | sort)
|
|
if [ -z "$modules" ]; then
|
|
echo "This tree holds no Go module, so there are no tests to run; the check passes."
|
|
exit 0
|
|
fi
|
|
|
|
work=$(mktemp -d)
|
|
trap 'rm -rf "$work"' EXIT
|
|
deps=""
|
|
helper="${MESH_CHECK_BESIDE:-}/mesh-catalog/checks/deps"
|
|
if [ -n "${MESH_CHECK_BESIDE:-}" ] && [ -f "$helper/main.go" ]; then
|
|
if ! (cd "$helper" && go build -o "$work/deps" .); then
|
|
echo "FAILED: the dependency helper of mesh-catalog beside this check could not be built"
|
|
exit 1
|
|
fi
|
|
deps="$work/deps"
|
|
elif [ -n "${MESH_CHECK_BESIDE:-}" ]; then
|
|
echo "NOT TAKEN FROM BESIDE: no mesh-catalog/checks/deps beside this check ($MESH_CHECK_BESIDE); the dependencies are fetched"
|
|
fi
|
|
|
|
untestable=""
|
|
for mod in $modules; do
|
|
dir=$(dirname "$mod")
|
|
modfile=""
|
|
if [ -n "$deps" ]; then
|
|
if ! modfile=$("$deps" -beside "$MESH_CHECK_BESIDE" -work "$work" "$dir"); then
|
|
echo "FAILED: $dir could not be tested: $modfile"
|
|
untestable="$untestable $dir"
|
|
continue
|
|
fi
|
|
[ -n "$modfile" ] && echo "$dir takes its forge dependencies from the clones beside the check"
|
|
elif ! fetched=$(cd "$dir" && go mod download 2>&1); then
|
|
echo "FAILED: $dir could not be tested: its dependencies cannot be fetched: $(printf '%s\n' "$fetched" | tail -n 1)"
|
|
untestable="$untestable $dir"
|
|
continue
|
|
fi
|
|
mf=""
|
|
[ -n "$modfile" ] && mf="-modfile=$modfile"
|
|
unformatted=$(cd "$dir" && gofmt -l .)
|
|
if [ -n "$unformatted" ]; then
|
|
echo "$dir is not gofmt'd: $unformatted"
|
|
exit 1
|
|
fi
|
|
echo "== $dir: go vet and the unit tests"
|
|
(cd "$dir" && go vet $mf ./... && go test $mf ./...)
|
|
echo "== $dir: the integration tests (-tags integration)"
|
|
(cd "$dir" && go vet $mf -tags integration ./... && go test $mf -tags integration ./...)
|
|
done
|
|
if [ -n "$untestable" ]; then
|
|
echo "the check fails: the tests of$untestable could not run (novox/hq issue 385)"
|
|
exit 1
|
|
fi
|