diff --git a/scripts/update_dep.sh b/scripts/update_dep.sh index e76ecaff5c5a..7cc25bfa91e4 100755 --- a/scripts/update_dep.sh +++ b/scripts/update_dep.sh @@ -13,13 +13,37 @@ set -euo pipefail source ./scripts/test_lib.sh +if [ "$#" -ne 2 ]; then + echo "Illegal number of parameters" + exit 1 +fi + mod="$1" ver="$2" -function maybe_update_module { +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 +51,13 @@ function maybe_update_module { run go get "${mod}@${ver}" fi fi - } +} + +is_fully_indirect +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