mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-18 05:05:14 +00:00
This PR:
* provides a code generator that converts
kustomize Go plugins to normal code, i.e.
the plugin appears as
t := builtin.NewImageTagTransformer()
instead of
p := plugin.Open("imagetagtransformer.so")
s := p.Lookup(someSymbol)
t, ok = s.(Transformer)
* converts the main processing thread in
kusttarget.go to use those factory calls to run
builtin generators and transformer before
calling user-supplied plugins,
* as an example, provides an imagetag transformer
plugin, converting a legacy transformer to
builtin plugin form with its own isolated test.
This test can be expanded by moving more code
into it, but that can be done in a later PR.
Writing core functionality as plugins assures a
maintained plugin authoring and testing framework,
assures modularity, provides meaningful plugin
examples, and gives us a means to make informed
choices on which kustomize packages to publish
(and which to move to internal/). The code
generator allows all this without losing "go get
sigs.k8s.io/kustomize" functionality.
TODO:
1) Convert remaining legacy transformers to
plugins (patch SMP/JSON, name prefix/suffix,
labels/annos) with their own tests. The
generators are already done; this PR wires
them up, and all tests & examples pass.
2) Push code down into the plugins, as the first
pass at conversion writes plugins as thin
layers over calls into code under the mess
that is pkg/. Once this is done, we can
reasonably move all the packages that aren't
imported by plugins to internal/.
This PR could be split in two, one to merge the
the generator, and the second to merge the
ImageTagTransformer plugin and its wiring into the
main flow.
The latter PR could then serve as an example for
converting the remaining transformers.
116 lines
2.4 KiB
Bash
Executable File
116 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
# 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
|
|
}
|
|
|
|
rc=0
|
|
|
|
function runFunc {
|
|
local name=$1
|
|
local result="SUCCESS"
|
|
printf "============== begin %s\n" "$name"
|
|
$name
|
|
local code=$?
|
|
rc=$((rc || $code))
|
|
if [ $code -ne 0 ]; then
|
|
result="FAILURE"
|
|
fi
|
|
printf "============== end %s : %s code=%d\n\n\n" "$name" "$result" $code
|
|
}
|
|
|
|
function testGoLangCILint {
|
|
golangci-lint run ./...
|
|
}
|
|
|
|
function testGoTest {
|
|
go test -v ./...
|
|
}
|
|
|
|
# These tests require the helm program, and at the moment
|
|
# we're not asking travis to install helm.
|
|
function testNoTravisGoTest {
|
|
go test -v sigs.k8s.io/kustomize/pkg/target \
|
|
-run TestChartInflatorPlugin -tags=notravis
|
|
go test -v sigs.k8s.io/kustomize/plugin/... \
|
|
-run TestChartInflator -tags=notravis
|
|
mdrip --mode test --label helmtest README.md ./examples/chart.md
|
|
}
|
|
|
|
function testExamples {
|
|
mdrip --mode test --label test README.md ./examples
|
|
}
|
|
|
|
function generateCode {
|
|
./bin/pluginator.sh $oldGoPath
|
|
}
|
|
|
|
# Use of GOPATH is optional if go modules are
|
|
# used. This script tries to work for people who
|
|
# don't have GOPATH set, and work for travis.
|
|
#
|
|
# Upon entry, travis has GOPATH set, and used it
|
|
# to install mdrip and the like.
|
|
#
|
|
# Use GOPATH to define XDG_CONFIG_HOME, then unset
|
|
# GOPATH so that go.mod is unambiguously honored.
|
|
echo "GOPATH=$GOPATH"
|
|
|
|
if [ -z ${GOPATH+x} ]; then
|
|
echo GOPATH is unset
|
|
tmp=$HOME/gopath
|
|
if [ -d "$tmp" ]; then
|
|
oldGoPath=$tmp
|
|
else
|
|
tmp=$HOME/go
|
|
if [ -d "$tmp" ]; then
|
|
oldGoPath=$tmp
|
|
fi
|
|
fi
|
|
else
|
|
oldGoPath=$GOPATH
|
|
unset GOPATH
|
|
fi
|
|
echo "oldGoPath=$oldGoPath"
|
|
export XDG_CONFIG_HOME=$oldGoPath/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."
|
|
exit 1
|
|
fi
|
|
|
|
# Until go v1.13, set this explicitly.
|
|
export GO111MODULE=on
|
|
|
|
echo "HOME=$HOME"
|
|
echo "GOPATH=$GOPATH"
|
|
echo "GO111MODULE=$GO111MODULE"
|
|
echo pwd=`pwd`
|
|
echo " "
|
|
echo "Working..."
|
|
|
|
runFunc generateCode
|
|
runFunc testGoLangCILint
|
|
runFunc testGoTest
|
|
|
|
if [ -z ${TRAVIS+x} ]; then
|
|
echo Not on travis, so running the notravis tests
|
|
runFunc testNoTravisGoTest
|
|
fi
|
|
|
|
PATH=$HOME/go/bin:$PATH
|
|
runFunc testExamples
|
|
|
|
if [ $rc -eq 0 ]; then
|
|
echo "SUCCESS!"
|
|
else
|
|
echo "FAILURE; exit code $rc"
|
|
fi
|
|
|
|
exit $rc
|