mirror of
https://github.com/moby/moby.git
synced 2026-01-12 03:01:38 +00:00
Remove the `replace` rule check as it's not needed because it will also pass the second check. Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
93 lines
3.1 KiB
Bash
Executable File
93 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "${SCRIPTDIR}/.validate"
|
|
|
|
# Leaves only actual changes, not the diff header
|
|
filter_diff() {
|
|
sed '1,4d' | grep -E '^[+-]' | grep -Ev '^(\+\+\+|\-\-\-)'
|
|
}
|
|
|
|
api_diff=$(
|
|
validate_diff --diff-filter=ACMR -U0 -- \
|
|
'api/' \
|
|
':(exclude)api/README.md' \
|
|
':(exclude)api/swagger.yaml' \
|
|
':(exclude)api/docs/' \
|
|
| filter_diff \
|
|
|| true
|
|
)
|
|
|
|
client_diff=$(validate_diff --diff-filter=ACMR -U0 -- 'client/' | filter_diff || true)
|
|
|
|
has_errors=0
|
|
|
|
echo "================================================"
|
|
echo "go.mod:"
|
|
cat go.mod
|
|
echo "================================================"
|
|
|
|
# reads stdin and returns 1 or 0 if it only contains changes related to the
|
|
# provided module
|
|
# example input:
|
|
# - github.com/moby/moby/api v1.52.0
|
|
# + github.com/moby/moby/api v1.52.1-0.20251217102041-b8093b76fb43
|
|
# -
|
|
# -replace github.com/moby/moby/api => ../api
|
|
# +github.com/moby/moby/api v1.52.1-0.20251217102041-b8093b76fb43 h1:CTVB9ByfoOULdpH0GiDWwHK3B1jxwjoWtHiEGia1nRc=
|
|
# +github.com/moby/moby/api v1.52.1-0.20251217102041-b8093b76fb43/go.mod h1:8mb+ReTlisw4pS6BRzCMts5M49W5M7bKt1cJy/YbAqc=
|
|
only_changes_module() {
|
|
local module="$1"
|
|
input=$(cat | sed '/^[-+]$/d') # strip empty lines
|
|
|
|
# Check if ALL lines contain the module string
|
|
# The grep command checks if there's NO match for the module string, and
|
|
# then we negate the results
|
|
if grep -vqF "${module}" <<< "${input}"; then
|
|
return 1
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
echo >&2 "================================================"
|
|
echo >&2 "api diff:"
|
|
echo >&2 "${api_diff}"
|
|
echo >&2 "================================================"
|
|
# Check if changes to ./api require a replace rule in go.mod
|
|
if [ -n "${TEST_FORCE_VALIDATE:-}" ] || [ -n "${api_diff}" ]; 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
|
|
|
|
echo >&2 "================================================"
|
|
echo >&2 "client diff:"
|
|
echo >&2 "${client_diff}"
|
|
echo >&2 "================================================"
|
|
# Check if changes to ./client require a replace rule in go.mod
|
|
if [ -n "${TEST_FORCE_VALIDATE:-}" ] || [ -n "${client_diff}" ]; then
|
|
echo "Detected changes in ./client directory, checking for replace rule..."
|
|
if only_changes_module "github.com/moby/moby/api" <<< "${client_diff}"; then
|
|
echo >&2 "✓ This seems to only change the module github.com/moby/moby/api revision"
|
|
elif ! 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"
|