Skip to content

Commit

Permalink
Update update_dep.sh
Browse files Browse the repository at this point in the history
Based on the experience of performing dependency bumps, some minor
improvements are made to the script to make it conform to our current
dependency bump procedure, listed as follows:
- print out the dependency's version before and after the bump
- introduce a new argument: should force upgrade when the dependency is
purely indirect (see use case: #18596 (comment))
- check if the dependency is fully indirect
- check if all dependencies across all go mod files have the same pinned
version respectively after bumping a dependency

Signed-off-by: Chun-Hung Tseng <[email protected]>
  • Loading branch information
henrybear327 committed Sep 22, 2024
1 parent 2f9532b commit 4691dfc
Showing 1 changed file with 45 additions and 11 deletions.
56 changes: 45 additions & 11 deletions scripts/update_dep.sh
Original file line number Diff line number Diff line change
@@ -1,33 +1,67 @@
#!/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.

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}"
else
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

0 comments on commit 4691dfc

Please sign in to comment.