diff --git a/merge-check.sh b/merge-check.sh deleted file mode 100644 index af75a30..0000000 --- a/merge-check.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 diff --git a/modules/mesh-delivery-watchman/no_check_script_test.go b/modules/mesh-delivery-watchman/no_check_script_test.go new file mode 100644 index 0000000..e6e5f2d --- /dev/null +++ b/modules/mesh-delivery-watchman/no_check_script_test.go @@ -0,0 +1,18 @@ +package manifest + +import ( + "os" + "path/filepath" + "testing" +) + +// The checker runs gofmt, go vet at both levels' tags and both test levels by Go's convention, and fetches the +// dependencies beside the change (novox/hq ADR 0529, ADR 0484 clause 4): no script of the repository's own runs +// beside them. +func TestTheRepositoryHoldsNoCheckScript(t *testing.T) { + for _, rel := range []string{"../../merge-check.sh"} { + if _, err := os.Stat(filepath.FromSlash(rel)); err == nil { + t.Errorf("%s is back: the checker's levels run the tests", rel) + } + } +}