mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 03:11:40 +00:00
Merge pull request #99724 from thockin/fix-xargs-mutually-exclusive-in-update-vendor
Fix hack/update-vendor.sh to not warn on xargs
This commit is contained in:
commit
9ed4d94e69
@ -66,29 +66,43 @@ function ensure_require_replace_directives_for_all_dependencies() {
|
||||
# Capture local require/replace directives before running any go commands that can modify the go.mod file
|
||||
local require_json="${local_tmp_dir}/require.json"
|
||||
local replace_json="${local_tmp_dir}/replace.json"
|
||||
go mod edit -json | jq -r ".Require // [] | sort | .[] | select(${require_filter})" > "${require_json}"
|
||||
go mod edit -json | jq -r ".Replace // [] | sort | .[] | select(${replace_filter})" > "${replace_json}"
|
||||
go mod edit -json \
|
||||
| jq -r ".Require // [] | sort | .[] | select(${require_filter})" \
|
||||
> "${require_json}"
|
||||
go mod edit -json \
|
||||
| jq -r ".Replace // [] | sort | .[] | select(${replace_filter})" \
|
||||
> "${replace_json}"
|
||||
|
||||
# 1a. Ensure replace directives have an explicit require directive
|
||||
jq -r '"-require \(.Old.Path)@\(.New.Version)"' < "${replace_json}" | xargs -L 100 go mod edit -fmt
|
||||
jq -r '"-require \(.Old.Path)@\(.New.Version)"' < "${replace_json}" \
|
||||
| xargs -L 100 go mod edit -fmt
|
||||
# 1b. Ensure require directives have a corresponding replace directive pinning a version
|
||||
jq -r '"-replace \(.Path)=\(.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
|
||||
jq -r '"-replace \(.Path)=\(.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
|
||||
|
||||
# 2. 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
|
||||
jq -r '"-require \(.Path)@\(.Version)"' < "${require_json}" | xargs -L 100 go mod edit -fmt
|
||||
jq -r '"-replace \(.Path)=\(.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
|
||||
jq -r '"-require \(.Path)@\(.Version)"' < "${require_json}" \
|
||||
| xargs -L 100 go mod edit -fmt
|
||||
jq -r '"-replace \(.Path)=\(.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
|
||||
|
||||
# 3. Add explicit require directives for indirect dependencies
|
||||
go list -m -json all | jq -r 'select(.Main != true) | select(.Indirect == true) | "-require \(.Path)@\(.Version)"' | xargs -L 100 go mod edit -fmt
|
||||
go list -m -json all \
|
||||
| jq -r 'select(.Main != true) | select(.Indirect == true) | "-require \(.Path)@\(.Version)"' \
|
||||
| xargs -L 100 go mod edit -fmt
|
||||
|
||||
# 4. Add explicit replace directives pinning dependencies that aren't pinned yet
|
||||
go list -m -json all | jq -r 'select(.Main != true) | select(.Replace == null) | "-replace \(.Path)=\(.Path)@\(.Version)"' | xargs -L 100 go mod edit -fmt
|
||||
go list -m -json all \
|
||||
| jq -r 'select(.Main != true) | select(.Replace == null) | "-replace \(.Path)=\(.Path)@\(.Version)"' \
|
||||
| xargs -L 100 go mod edit -fmt
|
||||
}
|
||||
|
||||
function group_replace_directives() {
|
||||
@ -169,11 +183,19 @@ fi
|
||||
|
||||
kube::log::status "go.mod: update staging references"
|
||||
# Prune
|
||||
go mod edit -json | jq -r '.Require[]? | select(.Version == "v0.0.0") | "-droprequire \(.Path)"' | xargs -L 100 go mod edit -fmt
|
||||
go mod edit -json | jq -r '.Replace[]? | select(.New.Path | startswith("./staging/")) | "-dropreplace \(.Old.Path)"' | xargs -L 100 go mod edit -fmt
|
||||
go mod edit -json \
|
||||
| jq -r '.Require[]? | select(.Version == "v0.0.0") | "-droprequire \(.Path)"' \
|
||||
| xargs -L 100 go mod edit -fmt
|
||||
go mod edit -json \
|
||||
| jq -r '.Replace[]? | select(.New.Path | startswith("./staging/")) | "-dropreplace \(.Old.Path)"' \
|
||||
| xargs -L 100 go mod edit -fmt
|
||||
# Readd
|
||||
kube::util::list_staging_repos | xargs -n 1 -I {} echo "-require k8s.io/{}@v0.0.0" | xargs -L 100 go mod edit -fmt
|
||||
kube::util::list_staging_repos | xargs -n 1 -I {} echo "-replace k8s.io/{}=./staging/src/k8s.io/{}" | xargs -L 100 go mod edit -fmt
|
||||
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
|
||||
kube::util::list_staging_repos \
|
||||
| while read -r X; do echo "-replace k8s.io/${X}=./staging/src/k8s.io/${X}"; done \
|
||||
| xargs -L 100 go mod edit -fmt
|
||||
|
||||
|
||||
# Phase 3: capture required (minimum) versions from all modules, and replaced (pinned) versions from the root module
|
||||
@ -194,11 +216,17 @@ for repo in $(kube::util::list_staging_repos); do
|
||||
pushd "staging/src/k8s.io/${repo}" >/dev/null 2>&1
|
||||
echo "=== propagating to ${repo}" >> "${LOG_FILE}"
|
||||
# copy root go.mod, changing module name
|
||||
sed "s#module k8s.io/kubernetes#module k8s.io/${repo}#" < "${KUBE_ROOT}/go.mod" > "${KUBE_ROOT}/staging/src/k8s.io/${repo}/go.mod"
|
||||
sed "s#module k8s.io/kubernetes#module k8s.io/${repo}#" \
|
||||
< "${KUBE_ROOT}/go.mod" \
|
||||
> "${KUBE_ROOT}/staging/src/k8s.io/${repo}/go.mod"
|
||||
# remove `require` directives for staging components (will get re-added as needed by `go list`)
|
||||
kube::util::list_staging_repos | xargs -n 1 -I {} echo "-droprequire k8s.io/{}" | xargs -L 100 go mod edit
|
||||
kube::util::list_staging_repos \
|
||||
| while read -r X; do echo "-droprequire k8s.io/${X}"; done \
|
||||
| xargs -L 100 go mod edit
|
||||
# rewrite `replace` directives for staging components to point to peer directories
|
||||
kube::util::list_staging_repos | xargs -n 1 -I {} echo "-replace k8s.io/{}=../{}" | xargs -L 100 go mod edit
|
||||
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
|
||||
|
||||
@ -209,7 +237,8 @@ kube::log::status "go.mod: sorting staging modules"
|
||||
# tidy staging repos in reverse dependency order.
|
||||
# the content of dependencies' go.mod files affects what `go mod tidy` chooses to record in a go.mod file.
|
||||
tidy_unordered="${TMP_DIR}/tidy_unordered.txt"
|
||||
kube::util::list_staging_repos | xargs -I {} echo "k8s.io/{}" > "${tidy_unordered}"
|
||||
kube::util::list_staging_repos \
|
||||
| xargs -I {} echo "k8s.io/{}" > "${tidy_unordered}"
|
||||
rm -f "${TMP_DIR}/tidy_deps.txt"
|
||||
# SC2094 checks that you do not read and write to the same file in a pipeline.
|
||||
# We do read from ${tidy_unordered} in the pipeline and mention it within the
|
||||
@ -283,7 +312,7 @@ $(go mod why "${loopback_deps[@]}")"
|
||||
comm -23 \
|
||||
<(go mod edit -json | jq -r '.Replace[] | .Old.Path' | sort) \
|
||||
<(go list -m -json all | jq -r .Path | sort) |
|
||||
xargs -L 1 -I {} echo "-dropreplace={}" |
|
||||
while read -r X; do echo "-dropreplace=${X}"; done |
|
||||
xargs -L 100 go mod edit -fmt
|
||||
|
||||
# prune replace directives that pin to the naturally selected version
|
||||
|
Loading…
Reference in New Issue
Block a user