mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
93 lines
2.5 KiB
Bash
Executable File
93 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Copyright 2019 The Kubernetes Authors.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# To fix all plugin dependence to a particular
|
|
# released version of the kustomize API,
|
|
# run this from the repo root:
|
|
#
|
|
# ./hack/pinUnpinPluginApiDep.sh pin v0.2.0
|
|
#
|
|
# To replace fixed dependence with
|
|
# dependence on local filesystem (HEAD)
|
|
# run this from the repo root:
|
|
#
|
|
# ./hack/pinUnpinPluginApiDep.sh unPin
|
|
#
|
|
# All plugins, even plugins not written in Go,
|
|
# have a unit test written in Go that depends
|
|
# on a particular version of the api for a test
|
|
# harness. The plugins written in Go, either
|
|
# as exec or Go-plugin style plugins,
|
|
# will likely depend directly on the kustomize
|
|
# API, and any number of other 3rd party packages.
|
|
#
|
|
# The Go plugins in the `builtin` directory
|
|
# are in practice converted to static libraries
|
|
# in the API, so should remain unpinned (dependent
|
|
# on HEAD). The other example plugins can be pinned
|
|
# or unpinned on a case by case basis, since
|
|
# they are just examples - but likely should
|
|
# remain unpinned too. Nothing in the outside
|
|
# world should depend on these plugin modules,
|
|
# so there's no reason for them to be properly
|
|
# pinned.
|
|
#
|
|
# An external plugin author will obviously
|
|
# want to pin their plugin to some set of fixed
|
|
# dependencies, and the go.mod files for the
|
|
# plugins in this repo are just examples of how
|
|
# to do so.
|
|
|
|
set -o errexit
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
function doUnPin {
|
|
oldV=$(grep -m 1 sigs.k8s.io/kustomize/api go.mod | awk '{print $NF}')
|
|
go mod edit -replace=sigs.k8s.io/kustomize/api@${oldV}=$1
|
|
go mod tidy
|
|
}
|
|
|
|
function doPin {
|
|
oldV=$(grep -m 1 sigs.k8s.io/kustomize/api go.mod | awk '{print $NF}')
|
|
go mod edit -dropreplace=sigs.k8s.io/kustomize/api@${oldV}
|
|
go mod edit -require=sigs.k8s.io/kustomize/api@$1
|
|
go mod tidy
|
|
}
|
|
|
|
function forEachGoMod {
|
|
for goMod in $(find $2 -name 'go.mod'); do
|
|
d=$(dirname "${goMod}")
|
|
echo "$1 $d"
|
|
(cd $d; $1 $3)
|
|
done
|
|
}
|
|
|
|
function unPin {
|
|
forEachGoMod doUnPin ./plugin/builtin ../../../api
|
|
forEachGoMod doUnPin ./plugin/someteam.example.com/v1 ../../../../api
|
|
}
|
|
|
|
function pin {
|
|
forEachGoMod doPin ./plugin/builtin $version
|
|
forEachGoMod doPin ./plugin/someteam.example.com/v1 $version
|
|
}
|
|
|
|
operation=$1
|
|
if [[ ("$operation" != "pin") && ("$operation" != "unPin") ]]; then
|
|
echo "unknown operation $operation"
|
|
exit 1
|
|
fi
|
|
|
|
version="unnecessary"
|
|
if [ "$operation" == "pin" ]; then
|
|
if [ "$#" -le 1 ]; then
|
|
echo "Specify version to pin, e.g. '$0 pin v0.2.0'"
|
|
exit 1
|
|
fi
|
|
version=$2
|
|
fi
|
|
|
|
$operation
|