Smallish update-vendor cleanup

This commit is contained in:
Tim Hockin 2023-12-07 19:45:32 -08:00
parent ad9b60e2c9
commit 87c6b0d69f
No known key found for this signature in database

View File

@ -24,6 +24,8 @@ cd "$(pwd -P)"
KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
source "${KUBE_ROOT}/hack/lib/init.sh"
# Turn off workspaces until we are ready for them later
export GOWORK=off
# Explicitly opt into go modules, even though we're inside a GOPATH directory
export GO111MODULE=on
# Explicitly set GOFLAGS to ignore vendor, since GOFLAGS=-mod=vendor breaks dependency resolution while rebuilding vendor
@ -86,12 +88,13 @@ function ensure_require_replace_directives_for_all_dependencies() {
# Propagate root replace/require directives into staging modules, in case we are downgrading, so they don't bump the root required version back up
for repo in $(kube::util::list_staging_repos); do
pushd "staging/src/k8s.io/${repo}" >/dev/null 2>&1
(
cd "staging/src/k8s.io/${repo}"
jq -r '"-require \(.Path)@\(.Version)"' < "${require_json}" \
| xargs -L 100 go mod edit -fmt
jq -r '"-replace \(.Old.Path)=\(.New.Path)@\(.New.Version)"' < "${replace_json}" \
| xargs -L 100 go mod edit -fmt
popd >/dev/null 2>&1
)
done
# tidy to ensure require directives are added for indirect dependencies
@ -178,14 +181,16 @@ function add_generated_comments() {
# Phase 1: ensure go.mod files for staging modules and main module
for repo in $(kube::util::list_staging_repos); do
pushd "staging/src/k8s.io/${repo}" >/dev/null 2>&1
(
cd "staging/src/k8s.io/${repo}"
if [[ ! -f go.mod ]]; then
kube::log::status "go.mod: initialize ${repo}" >&11
rm -f Godeps/Godeps.json # remove before initializing, staging Godeps are not authoritative
go mod init "k8s.io/${repo}"
go mod edit -fmt
fi
popd >/dev/null 2>&1
)
done
if [[ ! -f go.mod ]]; then
@ -205,7 +210,7 @@ go mod edit -json \
go mod edit -json \
| jq -r '.Replace[]? | select(.New.Path | startswith("./staging/")) | "-dropreplace \(.Old.Path)"' \
| xargs -L 100 go mod edit -fmt
# Readd
# Re-add
kube::util::list_staging_repos \
| while read -r X; do echo "-require k8s.io/${X}@v0.0.0"; done \
| xargs -L 100 go mod edit -fmt
@ -229,7 +234,9 @@ group_directives
kube::log::status "go.mod: propagate to staging modules" >&11
for repo in $(kube::util::list_staging_repos); do
pushd "staging/src/k8s.io/${repo}" >/dev/null 2>&1
(
cd "staging/src/k8s.io/${repo}"
echo "=== propagating to ${repo}"
# copy root go.mod, changing module name
sed "s#module k8s.io/kubernetes#module k8s.io/${repo}#" \
@ -243,7 +250,7 @@ for repo in $(kube::util::list_staging_repos); do
kube::util::list_staging_repos \
| while read -r X; do echo "-replace k8s.io/${X}=../${X}"; done \
| xargs -L 100 go mod edit
popd >/dev/null 2>&1
)
done
@ -265,20 +272,31 @@ while IFS= read -r repo; do
# record existence of the repo to ensure modules with no peer relationships still get included in the order
echo "${repo} ${repo}" >> "${TMP_DIR}/tidy_deps.txt"
pushd "${KUBE_ROOT}/staging/src/${repo}" >/dev/null 2>&1
(
cd "${KUBE_ROOT}/staging/src/${repo}"
# save the original go.mod, since go list doesn't just add missing entries, it also removes specific required versions from it
tmp_go_mod="${TMP_DIR}/tidy_${repo/\//_}_go.mod.original"
tmp_go_deps="${TMP_DIR}/tidy_${repo/\//_}_deps.txt"
cp go.mod "${tmp_go_mod}"
{
echo "=== sorting ${repo}"
# 'go list' calculates direct imports and updates go.mod so that go list -m lists our module dependencies
echo "=== computing imports for ${repo}"
go list all
echo "=== computing tools imports for ${repo}"
go list -e -tags=tools all
}
echo "=== sorting ${repo}"
# 'go list' calculates direct imports and updates go.mod so that go list -m lists our module dependencies
echo "=== computing imports for ${repo}"
go list all
# ignore errors related to importing `package main` packages, but catch
# other errors (https://github.com/golang/go/issues/59186)
errs=()
kube::util::read-array errs < <(
go list -e -tags=tools -json all | jq -r '.Error.Err | select( . != null )' \
| grep -v "is a program, not an importable package"
)
if (( "${#errs[@]}" != 0 )); then
for err in "${errs[@]}"; do
echo "${err}" >&2
done
exit 1
fi
# capture module dependencies
go list -m -f '{{if not .Main}}{{.Path}}{{end}}' all > "${tmp_go_deps}"
@ -293,12 +311,13 @@ while IFS= read -r repo; do
# switch the required version to an explicit v0.0.0 (rather than an unknown v0.0.0-00010101000000-000000000000)
go mod edit -require "${dep}@v0.0.0"
done
popd >/dev/null 2>&1
)
done < "${tidy_unordered}"
kube::log::status "go.mod: tidying" >&11
for repo in $(tsort "${TMP_DIR}/tidy_deps.txt"); do
pushd "${KUBE_ROOT}/staging/src/${repo}" >/dev/null 2>&1
(
cd "${KUBE_ROOT}/staging/src/${repo}"
echo "=== tidying ${repo}"
# prune replace directives that pin to the naturally selected version.
@ -318,8 +337,8 @@ for repo in $(tsort "${TMP_DIR}/tidy_deps.txt"); do
# disallow transitive dependencies on k8s.io/kubernetes
loopback_deps=()
kube::util::read-array loopback_deps < <(go list all 2>/dev/null | grep k8s.io/kubernetes/ || true)
if [[ -n ${loopback_deps[*]:+"${loopback_deps[*]}"} ]]; then
kube::log::error "Disallowed ${repo} -> k8s.io/kubernetes dependencies exist via the following imports: $(go mod why "${loopback_deps[@]}")" >&22 2>&1
if (( "${#loopback_deps[@]}" > 0 )); then
kube::log::error "${#loopback_deps[@]} disallowed ${repo} -> k8s.io/kubernetes dependencies exist via the following imports: $(go mod why "${loopback_deps[@]}")" >&22 2>&1
exit 1
fi
@ -340,8 +359,7 @@ for repo in $(tsort "${TMP_DIR}/tidy_deps.txt"); do
# group require/replace directives
group_directives
popd >/dev/null 2>&1
)
done
echo "=== tidying root"
go mod tidy
@ -356,8 +374,8 @@ xargs -L 100 go mod edit -fmt
# disallow transitive dependencies on k8s.io/kubernetes
loopback_deps=()
kube::util::read-array loopback_deps < <(go mod graph | grep ' k8s.io/kubernetes' || true)
if [[ -n ${loopback_deps[*]:+"${loopback_deps[*]}"} ]]; then
kube::log::error "Disallowed transitive k8s.io/kubernetes dependencies exist via the following imports:" >&22 2>&1
if (( "${#loopback_deps[@]}" > 0 )); then
kube::log::error "${#loopback_deps[@]} disallowed transitive k8s.io/kubernetes dependencies exist via the following imports:" >&22 2>&1
kube::log::error "${loopback_deps[@]}" >&22 2>&1
exit 1
fi
@ -372,9 +390,10 @@ add_generated_comments "
// Run hack/update-vendor.sh to update go.mod files and the vendor directory.
"
for repo in $(kube::util::list_staging_repos); do
pushd "staging/src/k8s.io/${repo}" >/dev/null 2>&1
(
cd "staging/src/k8s.io/${repo}"
add_generated_comments "// This is a generated file. Do not edit directly."
popd >/dev/null 2>&1
)
done