mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-07 11:13:48 +00:00
Smallish update-vendor cleanup
This commit is contained in:
parent
ad9b60e2c9
commit
87c6b0d69f
@ -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
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user