diff --git a/scripts/update_dep.sh b/scripts/update_dep.sh index e76ecaff5c5a..8bbdfd5dc4fd 100755 --- a/scripts/update_dep.sh +++ b/scripts/update_dep.sh @@ -1,11 +1,11 @@ #!/bin/bash # Usage: -# ./scripts/update_dep.sh module version -# or ./scripts/update_dep.sh module +# ./scripts/update_dep.sh should_force_upgrade module version +# or ./scripts/update_dep.sh should_force_upgrade module # e.g. -# ./scripts/update_dep.sh github.com/golang/groupcache -# ./scripts/update_dep.sh github.com/soheilhy/cmux v0.1.5 +# ./scripts/update_dep.sh false github.com/golang/groupcache +# ./scripts/update_dep.sh false github.com/soheilhy/cmux v0.1.5 # # Updates version of given dependency in all the modules that depend on the mod. @@ -13,13 +13,38 @@ set -euo pipefail source ./scripts/test_lib.sh -mod="$1" -ver="$2" +if [ "$#" -ne 3 ]; then + echo "Illegal number of parameters" + exit 1 +fi -function maybe_update_module { +should_force_upgrade="$1" +mod="$2" +ver="$3" + +function print_current_dep_version { + echo "${mod} version in all go mod files" + grep --exclude-dir=.git --include=\*.mod -Ri "${mod}" | grep -v sum + printf "\n\n" +} + +function is_fully_indirect { + print_current_dep_version + + # check if all lines end with "// indirect" + # if grep found nothing, the error code will be non-zero + if grep --exclude-dir=.git --include=\*.mod -Ri -q "^.*${mod} v.*// indirect$"; then + echo "Fully indirect, we will terminate the script" + exit 1 + else + echo "Not fully indirect, we will perform dependency bump" + fi +} + +function update_module { run go mod tidy - deps=$(go list -f '{{if not .Indirect}}{{if .Version}}{{.Path}},{{.Version}}{{end}}{{end}}' -m all) + deps=$(go list -f '{{if .Version}}{{.Path}},{{.Version}}{{end}}' -m all) if [[ "$deps" == *"${mod}"* ]]; then if [ -z "${ver}" ]; then run go get "${mod}" @@ -27,7 +52,16 @@ function maybe_update_module { run go get "${mod}@${ver}" fi fi - } +} + +print_current_dep_version +if [ "$should_force_upgrade" = false ] ; then + is_fully_indirect +fi +run_for_modules update_module +print_current_dep_version + +# check all dependencies across all go mod files have the same pinned version respectively +PASSES="dep" ./scripts/test.sh -go mod tidy -run_for_modules maybe_update_module +./scripts/fix.sh