Add a Go converter in a separate tooling module and reintroduce swagger.yaml as generated Swagger 2.0 output. Preserve schema property order, examples, and generator extensions, and reject unsupported constructs. Use the union of response media types for Swagger's operation-wide produces lists. Leave historical versioned specifications and generated Go models unchanged. Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
104 lines
3.3 KiB
Bash
Executable File
104 lines
3.3 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/*_test.go' \
|
|
':(exclude)api/**/*_test.go' \
|
|
':(exclude)api/Dockerfile' \
|
|
':(exclude)api/README.md' \
|
|
':(exclude)api/swagger.yaml' \
|
|
':(exclude)api/openapi.yaml' \
|
|
':(exclude)api/docs/' \
|
|
| filter_diff \
|
|
|| true
|
|
)
|
|
|
|
client_diff=$(
|
|
validate_diff --diff-filter=ACMR -U0 -- \
|
|
'client/' \
|
|
':(exclude)client/*_test.go' \
|
|
':(exclude)client/**/*_test.go' \
|
|
| 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"
|