#!/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 []: 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