diff --git a/hack/validate/module-replace b/hack/validate/module-replace new file mode 100755 index 0000000000..c11d33673d --- /dev/null +++ b/hack/validate/module-replace @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +set -e + +SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "${SCRIPTDIR}/.validate" + +IFS=$'\n' +api_files=$(validate_diff --diff-filter=ACMR --name-only -- 'api/' || true) +client_files=$(validate_diff --diff-filter=ACMR --name-only -- 'client/' || true) +unset IFS + +has_errors=0 + +cat go.mod + +# Check if changes to ./api require a replace rule in go.mod +if [ -n "${TEST_FORCE_VALIDATE:-}" ] || [ ${#api_files[@]} -gt 0 ]; then + echo "Detected changes in ./api directory, checking for replace rule..." + if ! go list -mod=readonly -m -json github.com/moby/moby/api | jq -e '.Replace'; then + echo >&2 "ERROR: Changes detected in ./api but go.mod is missing a replace rule for github.com/moby/moby/api" + echo >&2 "Please run ./hack/vendor.sh replace" + has_errors=1 + else + echo "✓ Found replace rule for github.com/moby/moby/api" + fi +fi + +# Check if changes to ./client require a replace rule in go.mod +if [ -n "${TEST_FORCE_VALIDATE:-}" ] || [ ${#client_files[@]} -gt 0 ]; then + echo "Detected changes in ./client directory, checking for replace rule..." + if ! go list -mod=readonly -m -json github.com/moby/moby/client | jq -e '.Replace'; then + echo >&2 "ERROR: Changes detected in ./client but go.mod is missing a replace rule for github.com/moby/moby/client" + echo >&2 "Please run ./hack/vendor.sh replace" + has_errors=1 + else + echo "✓ Found replace rule for github.com/moby/moby/client" + fi +fi + +if [ $has_errors -eq 1 ]; then + exit 1 +fi + +echo "PASS: Module replace rules are correct"