Files
moby/hack/vendor.sh
Paweł Gronowski 05f9988fc8 hack/vendor/dropreplace: Make the auto-ref pick more reliable
dropreplace now accepts an optional argument that allows to manually
specify a git ref to use for the modules.

It's not required though and if not present it will default to a master
branch from the upstream (preferred) or origin remote.

This is much more reliable than "module@master" which for some reason
tends to not resolve to the actual latest commit on the master branch.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2025-12-17 16:40:38 +01:00

95 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# This file is just a wrapper around the 'go mod vendor' tool.
# For updating dependencies you should change `go.mod` file in root of the
# project.
set -e
SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPTDIR/.." && pwd)"
# All module paths are relative to PROJECT_DIR
# Currently only a subset of modules are vendored.
vendor_modules_paths=(. man)
modules_paths=(api client "${vendor_modules_paths[@]}")
tidy() (
for module_path in "${modules_paths[@]}"; do
(
set -x
cd "$PROJECT_DIR/$module_path"
go mod tidy
)
done
)
vendor() (
for module_path in "${vendor_modules_paths[@]}"; do
(
set -x
cd "$PROJECT_DIR/$module_path"
go mod vendor
)
done
)
replace() (
set -x
go mod edit -replace=github.com/moby/moby/api=./api -replace=github.com/moby/moby/client=./client
go mod edit -modfile client/go.mod -replace=github.com/moby/moby/api=../api
)
dropreplace() (
set -x
ref=$1
if [ -z "$ref" ]; then
# module@master not always results in the actual latest commit on the
# master branch.
# Use the actual branch from the upstream or origin remote.
for r in "upstream" "origin"; do
if git remote get-url "$r" >/dev/null 2>&1; then
ref="$r/master"
break
fi
done
if [ -z "$ref" ]; then
echo "No valid master ref found" >&2
exit 1
fi
echo "Using $ref" >&2
fi
ref=$(git rev-parse "$ref")
go mod edit -dropreplace=github.com/moby/moby/api -dropreplace=github.com/moby/moby/client
go mod edit -modfile client/go.mod -dropreplace=github.com/moby/moby/api
go mod edit -modfile client/go.mod -require="github.com/moby/moby/api@$ref"
(cd client; go mod tidy)
go mod edit \
-require="github.com/moby/moby/api@$ref" \
-require="github.com/moby/moby/client@$ref"
go mod tidy
go mod vendor
)
help() {
printf "%s:\n" "$(basename "$0")"
echo " - tidy: run go mod tidy"
echo " - vendor: run go mod vendor"
echo " - replace: run go mod edit replace for local modules"
echo " - dropreplace [<gitref>]: remove replace rules and update the api and client modules to the provided ref (defaults to upstream/master)"
echo " - all: run tidy && vendor"
echo " - help: show this help"
}
case "$1" in
tidy) tidy ;;
vendor) vendor ;;
replace) replace ;;
dropreplace) dropreplace "$2" ;;
""|all) tidy && vendor ;;
*) help ;;
esac