diff --git a/.github/scripts/go-mod-tidy-check.sh b/.github/scripts/go-mod-tidy-check.sh index 047a893c0..41bc63910 100755 --- a/.github/scripts/go-mod-tidy-check.sh +++ b/.github/scripts/go-mod-tidy-check.sh @@ -1,27 +1,31 @@ #!/usr/bin/env bash -set -u +set -eu -TMP_GOMOD=$(mktemp) -TMP_GOSUM=$(mktemp) +ORIGINAL_STATE_DIR=$(mktemp -d "TEMP-original-state-XXXXXXXXX") +TIDY_STATE_DIR=$(mktemp -d "TEMP-tidy-state-XXXXXXXXX") -trap "rm -f ${TMP_GOSUM} ${TMP_GOMOD}" EXIT +trap "cp -v ${ORIGINAL_STATE_DIR}/* ./ && rm -fR ${ORIGINAL_STATE_DIR} ${TIDY_STATE_DIR}" EXIT -cp go.mod "${TMP_GOMOD}" -cp go.sum "${TMP_GOSUM}" +echo "Capturing original state of files..." +cp -v go.mod go.sum "${ORIGINAL_STATE_DIR}" +echo "Capturing state of go.mod and go.sum after running go mod tidy..." go mod tidy +cp -v go.mod go.sum "${TIDY_STATE_DIR}" +echo "" -DIFF_MOD=$(diff -u "${TMP_GOMOD}" go.mod) -DIFF_SUM=$(diff -u "${TMP_GOSUM}" go.sum) +set +e -cp "${TMP_GOMOD}" go.mod -cp "${TMP_GOSUM}" go.sum +# Detect difference between the git HEAD state and the go mod tidy state +DIFF_MOD=$(diff -u "${ORIGINAL_STATE_DIR}/go.mod" "${TIDY_STATE_DIR}/go.mod") +DIFF_SUM=$(diff -u "${ORIGINAL_STATE_DIR}/go.sum" "${TIDY_STATE_DIR}/go.sum") if [[ -n "${DIFF_MOD}" || -n "${DIFF_SUM}" ]]; then - echo "go.mod and/or go.sum are not tidy; please run go mod tidy" echo "go.mod diff:" echo "${DIFF_MOD}" echo "go.sum diff:" echo "${DIFF_SUM}" + echo "" + printf "FAILED! go.mod and/or go.sum are NOT tidy; please run 'go mod tidy'.\n\n" exit 1 fi diff --git a/Makefile b/Makefile index 8213d5b33..5974216bc 100644 --- a/Makefile +++ b/Makefile @@ -108,7 +108,6 @@ bootstrap-tools: $(TEMPDIR) .PHONY: bootstrap-go bootstrap-go: go mod download - go mod tidy # note: it is important that the go.sum is kept in a consistent state at all times (especially during release) .PHONY: bootstrap bootstrap: $(RESULTSDIR) bootstrap-go bootstrap-tools ## Download and install all go dependencies (+ prep tooling in the ./tmp dir)