251 lines
7.2 KiB
Bash
Executable File
251 lines
7.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright 2019 The Jetstack cert-manager contributors.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
set -o errexit
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
if [[ -n "${BUILD_WORKSPACE_DIRECTORY:-}" ]]; then # Running inside bazel
|
|
echo "Updating generated clients..." >&2
|
|
elif ! command -v bazel &>/dev/null; then
|
|
echo "Install bazel at https://bazel.build" >&2
|
|
exit 1
|
|
else
|
|
(
|
|
set -o xtrace
|
|
bazel run //hack:update-codegen
|
|
)
|
|
exit 0
|
|
fi
|
|
|
|
module_name="github.com/jetstack/cert-manager"
|
|
|
|
# Generate deepcopy functions for all internal and external APIs
|
|
deepcopy_inputs=(
|
|
pkg/apis/certmanager/v1alpha2 \
|
|
pkg/internal/apis/certmanager \
|
|
pkg/apis/acme/v1alpha2 \
|
|
pkg/internal/apis/acme \
|
|
pkg/apis/meta/v1 \
|
|
pkg/internal/apis/meta \
|
|
pkg/webhook/handlers/testdata/apis/testgroup/v2 \
|
|
pkg/webhook/handlers/testdata/apis/testgroup/v1 \
|
|
pkg/webhook/handlers/testdata/apis/testgroup \
|
|
pkg/acme/webhook/apis/acme/v1alpha1 \
|
|
)
|
|
|
|
client_subpackage="pkg/client"
|
|
client_package="${module_name}/${client_subpackage}"
|
|
# Generate clientsets, listers and informers for user-facing API types
|
|
client_inputs=(
|
|
pkg/apis/certmanager/v1alpha2 \
|
|
pkg/apis/acme/v1alpha2 \
|
|
)
|
|
|
|
# Generate defaulting functions to be used by the mutating webhook
|
|
defaulter_inputs=(
|
|
pkg/internal/apis/certmanager/v1alpha2 \
|
|
pkg/internal/apis/acme/v1alpha2 \
|
|
pkg/internal/apis/meta/v1 \
|
|
pkg/webhook/handlers/testdata/apis/testgroup/v2 \
|
|
pkg/webhook/handlers/testdata/apis/testgroup/v1 \
|
|
)
|
|
|
|
# Generate conversion functions to be used by the conversion webhook
|
|
conversion_inputs=(
|
|
pkg/internal/apis/certmanager/v1alpha2 \
|
|
pkg/internal/apis/acme/v1alpha2 \
|
|
pkg/internal/apis/meta/v1 \
|
|
pkg/webhook/handlers/testdata/apis/testgroup/v2 \
|
|
pkg/webhook/handlers/testdata/apis/testgroup/v1 \
|
|
)
|
|
|
|
go_sdk=$PWD/external/go_sdk
|
|
go=$PWD/$1
|
|
clientgen=$PWD/$2
|
|
deepcopygen=$PWD/$3
|
|
informergen=$PWD/$4
|
|
listergen=$PWD/$5
|
|
defaultergen=$PWD/$6
|
|
conversiongen=$PWD/$7
|
|
|
|
shift 7
|
|
|
|
fake_gopath=""
|
|
fake_repopath=""
|
|
ensure-in-gopath() {
|
|
export GOROOT=$go_sdk
|
|
|
|
fake_gopath=$(mktemp -d -t codegen.gopath.XXXX)
|
|
|
|
fake_repopath=$fake_gopath/src/github.com/jetstack/cert-manager
|
|
mkdir -p "$fake_repopath"
|
|
cp -R "$BUILD_WORKSPACE_DIRECTORY/." "$fake_repopath"
|
|
|
|
export GOPATH=$fake_gopath
|
|
cd "$fake_repopath"
|
|
echo "Created fake GOPATH to run code generators in"
|
|
}
|
|
|
|
cleanup_gopath() {
|
|
export GO111MODULE=off
|
|
"$go" clean --modcache
|
|
rm -rf "$fake_gopath" || true
|
|
}
|
|
trap cleanup_gopath EXIT
|
|
|
|
# clean will delete files matching name in path.
|
|
#
|
|
# When inside bazel test the files are read-only.
|
|
# Any attempts to write a file that already exists will fail.
|
|
# So resolve by deleting the files before generating them.
|
|
clean() {
|
|
path=$1
|
|
name=$2
|
|
if [[ ! -d "$path" ]]; then
|
|
return 0
|
|
fi
|
|
find "$path" -name "$name" -delete
|
|
}
|
|
|
|
copyfiles() {
|
|
# Don't copy data if the workspace directory is already within the GOPATH
|
|
if [ "${BUILD_WORKSPACE_DIRECTORY:0:${#GOPATH}}" = "$GOPATH" ]; then
|
|
return 0
|
|
fi
|
|
|
|
path=$1
|
|
name=$2
|
|
if [[ ! -d "$path" ]]; then
|
|
return 0
|
|
fi
|
|
(
|
|
cd "$GOPATH/src/$module_name/$path"
|
|
find "." -name "$name" -exec cp {} "$BUILD_WORKSPACE_DIRECTORY/$path/{}" \;
|
|
)
|
|
}
|
|
|
|
gen-deepcopy() {
|
|
clean pkg/apis 'zz_generated.deepcopy.go'
|
|
clean pkg/acme/webhook/apis 'zz_generated.deepcopy.go'
|
|
clean pkg/webhook/handlers/testdata/apis 'zz_generated.deepcopy.go'
|
|
echo "Generating deepcopy methods..." >&2
|
|
prefixed_inputs=( "${deepcopy_inputs[@]/#/$module_name/}" )
|
|
joined=$( IFS=$','; echo "${prefixed_inputs[*]}" )
|
|
"$deepcopygen" \
|
|
--go-header-file hack/boilerplate/boilerplate.go.txt \
|
|
--input-dirs "$joined" \
|
|
--output-file-base zz_generated.deepcopy \
|
|
--bounding-dirs "${module_name}"
|
|
for dir in "${deepcopy_inputs[@]}"; do
|
|
copyfiles "$dir" "zz_generated.deepcopy.go"
|
|
done
|
|
}
|
|
|
|
gen-clientsets() {
|
|
clean "${client_subpackage}"/clientset '*.go'
|
|
echo "Generating clientset..." >&2
|
|
prefixed_inputs=( "${client_inputs[@]/#/$module_name/}" )
|
|
joined=$( IFS=$','; echo "${prefixed_inputs[*]}" )
|
|
"$clientgen" \
|
|
--go-header-file hack/boilerplate/boilerplate.go.txt \
|
|
--clientset-name versioned \
|
|
--input-base "" \
|
|
--input "$joined" \
|
|
--output-package "${client_package}"/clientset
|
|
copyfiles "${client_subpackage}/clientset" "*.go"
|
|
}
|
|
|
|
gen-listers() {
|
|
clean "${client_subpackage}/listers" '*.go'
|
|
echo "Generating listers..." >&2
|
|
prefixed_inputs=( "${client_inputs[@]/#/$module_name/}" )
|
|
joined=$( IFS=$','; echo "${prefixed_inputs[*]}" )
|
|
"$listergen" \
|
|
--go-header-file hack/boilerplate/boilerplate.go.txt \
|
|
--input-dirs "$joined" \
|
|
--output-package "${client_package}"/listers
|
|
copyfiles "${client_subpackage}/listers" "*.go"
|
|
}
|
|
|
|
gen-informers() {
|
|
clean "${client_subpackage}"/informers '*.go'
|
|
echo "Generating informers..." >&2
|
|
prefixed_inputs=( "${client_inputs[@]/#/$module_name/}" )
|
|
joined=$( IFS=$','; echo "${prefixed_inputs[*]}" )
|
|
"$informergen" \
|
|
--go-header-file hack/boilerplate/boilerplate.go.txt \
|
|
--input-dirs "$joined" \
|
|
--versioned-clientset-package "${client_package}"/clientset/versioned \
|
|
--listers-package "${client_package}"/listers \
|
|
--output-package "${client_package}"/informers
|
|
copyfiles "${client_subpackage}/informers" "*.go"
|
|
}
|
|
|
|
gen-defaulters() {
|
|
clean pkg/internal/apis 'zz_generated.defaults.go'
|
|
clean pkg/webhook/handlers/testdata/apis 'zz_generated.defaults.go'
|
|
echo "Generating defaulting functions..." >&2
|
|
prefixed_inputs=( "${defaulter_inputs[@]/#/$module_name/}" )
|
|
joined=$( IFS=$','; echo "${prefixed_inputs[*]}" )
|
|
"$defaultergen" \
|
|
--go-header-file hack/boilerplate/boilerplate.go.txt \
|
|
--input-dirs "$joined" \
|
|
-O zz_generated.defaults
|
|
for dir in "${defaulter_inputs[@]}"; do
|
|
copyfiles "$dir" "zz_generated.defaults.go"
|
|
done
|
|
}
|
|
|
|
gen-conversions() {
|
|
clean pkg/internal/apis 'zz_generated.conversion.go'
|
|
clean pkg/webhook/handlers/testdata/apis 'zz_generated.conversion.go'
|
|
echo "Generating conversion functions..." >&2
|
|
prefixed_inputs=( "${conversion_inputs[@]/#/$module_name/}" )
|
|
joined=$( IFS=$','; echo "${prefixed_inputs[*]}" )
|
|
"$conversiongen" \
|
|
--go-header-file hack/boilerplate/boilerplate.go.txt \
|
|
--input-dirs "$joined" \
|
|
-O zz_generated.conversion
|
|
for dir in "${conversion_inputs[@]}"; do
|
|
copyfiles "$dir" "zz_generated.conversion.go"
|
|
done
|
|
}
|
|
|
|
runfiles="$(pwd)"
|
|
export GO111MODULE=off
|
|
ensure-in-gopath
|
|
old=${GOCACHE:-}
|
|
export GOCACHE=$(mktemp -d -t codegen.gocache.XXXX)
|
|
export GO111MODULE=on
|
|
export GOPROXY=https://proxy.golang.org
|
|
export GOSUMDB=sum.golang.org
|
|
"$go_sdk/bin/go" mod vendor
|
|
export GO111MODULE=off
|
|
export GOCACHE=$old
|
|
|
|
gen-deepcopy
|
|
gen-clientsets
|
|
gen-listers
|
|
gen-informers
|
|
gen-defaulters
|
|
gen-conversions
|
|
|
|
## Call update-bazel
|
|
export GO111MODULE=on
|
|
cd "$runfiles"
|
|
"$@"
|