mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-18 12:42:19 +00:00
218 lines
5.9 KiB
Bash
Executable File
218 lines
5.9 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
# Tracks success or failure of various operations.
|
|
# 0==success, any other value is a failure.
|
|
rcAccumulator=0
|
|
|
|
# Not used, and not cross platform,
|
|
# but kept because I don't want to have to
|
|
# look it up again.
|
|
function installHelm {
|
|
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz
|
|
tar -xvzf helm-v2.13.1-linux-amd64.tar.gz
|
|
sudo mv linux-amd64/helm /usr/local/bin/helm
|
|
}
|
|
|
|
function removeBin {
|
|
local d=$(go env GOPATH)/bin/$1
|
|
echo "Removing binary $d"
|
|
/bin/rm -f $d
|
|
}
|
|
|
|
function installTools {
|
|
# TODO(2019/Oct/19): After the API is in place, and
|
|
# there's a new pluginator compiled against that API,
|
|
# switch back to this:
|
|
# go install sigs.k8s.io/kustomize/pluginator
|
|
# In the meantime, use the local copy.
|
|
# Go module rules, and the existing violations of
|
|
# semver, mean that simply using the replace directive
|
|
# in the go.mod won't yield the desired result.
|
|
|
|
removeBin pluginator
|
|
# Install from whatever code is on disk.
|
|
(cd pluginator; go install .)
|
|
echo "Installed pluginator."
|
|
|
|
# TODO figure out how to express this dependence in the three
|
|
# modules (kustomize/api, kustomize/pluginator, kustomize/kustomize).
|
|
# Maybe make a top level module with an internal/tools/tools.go with
|
|
# import _ "github.com/golangci/golangci-lint/cmd/golangci-lint" etc?
|
|
# but it will be a kustomize module, and that will be confusing
|
|
# to people accustomied to the old one-module scheme. Will
|
|
# require setting the module to at least v4, because it is
|
|
# incompatible with v3.
|
|
removeBin golangci-lint
|
|
GO111MODULE=on go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.19.1
|
|
CILINT=$(go env GOPATH)/bin/golangci-lint
|
|
|
|
removeBin mdrip
|
|
GO111MODULE=on go get github.com/monopole/mdrip@v1.0.0
|
|
MDRIP=$(go env GOPATH)/bin/mdrip
|
|
|
|
ls -l $(go env GOPATH)/bin
|
|
}
|
|
|
|
function runFunc {
|
|
local name=$1
|
|
local result="SUCCESS"
|
|
printf "============== begin %s\n" "$name"
|
|
$name
|
|
local code=$?
|
|
rcAccumulator=$((rcAccumulator || $code))
|
|
if [ $code -ne 0 ]; then
|
|
result="FAILURE"
|
|
fi
|
|
printf "============== end %s : %s; exit code=%d\n\n\n" "$name" "$result" $code
|
|
}
|
|
|
|
function testGoLangCILint {
|
|
(cd api; $CILINT run ./...)
|
|
(cd kustomize; $CILINT run ./...)
|
|
(cd pluginator; $CILINT run ./...)
|
|
}
|
|
|
|
function runApiModuleGoTests {
|
|
(cd api; go test ./...)
|
|
|
|
if [ -z ${TRAVIS+x} ]; then
|
|
echo " "
|
|
echo Not on travis, so running the notravis Go tests
|
|
echo " "
|
|
|
|
# Requires helm.
|
|
# At the moment not asking travis to install it.
|
|
(cd api; go test -v sigs.k8s.io/kustomize/api/target \
|
|
-run TestChartInflatorPlugin -tags=notravis)
|
|
(cd plugin/someteam.example.com/v1/chartinflator;
|
|
go test -v . -run TestChartInflator -tags=notravis)
|
|
|
|
# Requires kubeeval.
|
|
# At the moment not asking travis to install it.
|
|
(cd plugin/someteam.example.com/v1/validator;
|
|
go test -v . -run TestValidatorHappy -tags=notravis)
|
|
(cd plugin/someteam.example.com/v1/validator;
|
|
go test -v . -run TestValidatorUnHappy -tags=notravis)
|
|
fi
|
|
}
|
|
|
|
function testExamplesAgainstLatestKustomizeRelease {
|
|
removeBin kustomize
|
|
# Install latest release.
|
|
|
|
(cd ~; GO111MODULE=on go get sigs.k8s.io/kustomize/v3/cmd/kustomize@v3.2.0)
|
|
|
|
(cd api;
|
|
$MDRIP --mode test \
|
|
--label testAgainstLatestRelease ../examples)
|
|
|
|
if [ -z ${TRAVIS+x} ]; then
|
|
echo " "
|
|
echo Not on travis, so running the notravis example tests
|
|
echo " "
|
|
|
|
# The following requires helm.
|
|
# At the moment not asking travis to install it.
|
|
(cd api;
|
|
$MDRIP --mode test \
|
|
--label helmtest README.md ../examples/chart.md)
|
|
fi
|
|
}
|
|
|
|
function testExamplesAgainstHead {
|
|
removeBin kustomize
|
|
# Install from head.
|
|
(cd kustomize; go install .)
|
|
# To test examples of unreleased features, add
|
|
# examples with code blocks annotated with some
|
|
# label _other than_ @testAgainstLatestRelease.
|
|
(cd api;
|
|
$MDRIP --mode test \
|
|
--label testAgainstLatestRelease ../examples)
|
|
}
|
|
|
|
function generateCode {
|
|
echo "preferredGoPath = $preferredGoPath"
|
|
./api/plugins/builtinhelpers/generateBuiltins.sh $preferredGoPath
|
|
}
|
|
|
|
# This script tries to work for both travis
|
|
# and contributors who have or do not have
|
|
# GOPATH set.
|
|
#
|
|
# Use GOPATH to define XDG_CONFIG_HOME, then unset
|
|
# GOPATH so that go.mod is unambiguously honored.
|
|
#
|
|
function setPreferredGoPathAndUnsetGoPath {
|
|
preferredGoPath=$GOPATH
|
|
if [ -z ${GOPATH+x} ]; then
|
|
# GOPATH is unset
|
|
local tmp=$HOME/gopath
|
|
if [ -d "$tmp" ]; then
|
|
preferredGoPath=$tmp
|
|
else
|
|
# this works even if GOPATH undefined.
|
|
preferredGoPath=$(go env GOPATH)
|
|
fi
|
|
else
|
|
unset GOPATH
|
|
fi
|
|
|
|
if [ -z ${GOPATH+x} ]; then
|
|
echo GOPATH is unset
|
|
else
|
|
echo "GOPATH=$GOPATH, but should be unset at this point."
|
|
exit 1
|
|
fi
|
|
echo "preferredGoPath=$preferredGoPath"
|
|
}
|
|
|
|
# We don't want GOPATH to be defined, as it
|
|
# has too much baggage.
|
|
setPreferredGoPathAndUnsetGoPath
|
|
|
|
# This is needed for plugins.
|
|
export XDG_CONFIG_HOME=$preferredGoPath/src/sigs.k8s.io
|
|
echo "XDG_CONFIG_HOME=$XDG_CONFIG_HOME"
|
|
if [ ! -d "$XDG_CONFIG_HOME" ]; then
|
|
echo "$XDG_CONFIG_HOME is not a directory."
|
|
echo "Unable to compile or otherwise work with kustomize plugins."
|
|
exit 1
|
|
fi
|
|
|
|
# With GOPATH now undefined, this most
|
|
# likely this puts $HOME/go/bin on the path.
|
|
# Regardless, subsequent go tool installs will
|
|
# be placing binaries in this location.
|
|
PATH=$(go env GOPATH)/bin:$PATH
|
|
|
|
# Make sure we run in the root of the repo and
|
|
# therefore run the tests on all packages
|
|
base_dir="$( cd "$(dirname "$0")/.." && pwd )"
|
|
cd "$base_dir" || {
|
|
echo "Cannot cd to '$base_dir'. Aborting." >&2
|
|
exit 1
|
|
}
|
|
|
|
echo "HOME=$HOME"
|
|
echo "PATH=$PATH"
|
|
echo pwd=`pwd`
|
|
echo " "
|
|
echo "Working..."
|
|
|
|
runFunc installTools
|
|
runFunc generateCode
|
|
runFunc testGoLangCILint
|
|
runFunc runApiModuleGoTests
|
|
runFunc testExamplesAgainstLatestKustomizeRelease
|
|
runFunc testExamplesAgainstHead
|
|
|
|
if [ $rcAccumulator -eq 0 ]; then
|
|
echo "SUCCESS!"
|
|
else
|
|
echo "FAILURE; exit code $rcAccumulator"
|
|
fi
|
|
|
|
exit $rcAccumulator
|