cert-manager/hack/k8s-codegen.sh
Tim Ramlot c1fe43efe7
bump code generators
Signed-off-by: Tim Ramlot <42113979+inteon@users.noreply.github.com>
2024-05-17 19:14:03 +02:00

230 lines
7.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# Copyright 2022 The cert-manager Authors.
#
# 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
clientgen=$1
deepcopygen=$2
informergen=$3
listergen=$4
defaultergen=$5
conversiongen=$6
openapigen=$7
echo "+++ Generating code..." >&2
module_name="github.com/cert-manager/cert-manager"
# Generate deepcopy functions for all internal and external APIs
deepcopy_inputs=(
internal/apis/certmanager/v1alpha2 \
internal/apis/certmanager/v1alpha3 \
internal/apis/certmanager/v1beta1 \
pkg/apis/certmanager/v1 \
internal/apis/certmanager \
internal/apis/acme/v1alpha2 \
internal/apis/acme/v1alpha3 \
internal/apis/acme/v1beta1 \
pkg/apis/acme/v1 \
internal/apis/acme \
pkg/apis/config/cainjector/v1alpha1 \
internal/apis/config/cainjector \
pkg/apis/config/webhook/v1alpha1 \
internal/apis/config/webhook \
pkg/apis/config/controller/v1alpha1 \
internal/apis/config/controller \
pkg/apis/config/shared/v1alpha1 \
internal/apis/config/shared \
pkg/apis/meta/v1 \
internal/apis/meta \
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/v1 \
pkg/apis/acme/v1 \
)
# Generate defaulting functions to be used by the mutating webhook
defaulter_inputs=(
internal/apis/certmanager/v1alpha2 \
internal/apis/certmanager/v1alpha3 \
internal/apis/certmanager/v1beta1 \
internal/apis/certmanager/v1 \
internal/apis/acme/v1alpha2 \
internal/apis/acme/v1alpha3 \
internal/apis/acme/v1beta1 \
internal/apis/acme/v1 \
internal/apis/config/shared/v1alpha1 \
internal/apis/config/cainjector/v1alpha1 \
internal/apis/config/webhook/v1alpha1 \
internal/apis/config/controller/v1alpha1 \
internal/apis/meta/v1 \
)
# Generate conversion functions to be used by the conversion webhook
conversion_inputs=(
internal/apis/certmanager/v1alpha2 \
internal/apis/certmanager/v1alpha3 \
internal/apis/certmanager/v1beta1 \
internal/apis/certmanager/v1 \
internal/apis/acme/v1alpha2 \
internal/apis/acme/v1alpha3 \
internal/apis/acme/v1beta1 \
internal/apis/acme/v1 \
internal/apis/config/shared/v1alpha1 \
internal/apis/config/cainjector/v1alpha1 \
internal/apis/config/webhook/v1alpha1 \
internal/apis/config/controller/v1alpha1 \
internal/apis/meta/v1 \
)
# clean will delete files matching name in path.
clean() {
path=$1
name=$2
if [[ ! -d "$path" ]]; then
return 0
fi
find "$path" -name "$name" -delete
}
gen-openapi-acme() {
clean pkg/acme/webhook/openapi 'zz_generated.openapi.go'
echo "+++ Generating ACME openapi..." >&2
mkdir -p hack/openapi_reports
"$openapigen" \
--go-header-file "hack/boilerplate-go.txt" \
--report-filename "hack/openapi_reports/acme.txt" \
--output-dir ./pkg/acme/webhook/openapi/ \
--output-pkg "github.com/cert-manager/cert-manager/pkg/acme/webhook/openapi" \
--output-file zz_generated.openapi.go \
"k8s.io/apimachinery/pkg/version" \
"k8s.io/apimachinery/pkg/runtime" \
"k8s.io/apimachinery/pkg/apis/meta/v1" \
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" \
"github.com/cert-manager/cert-manager/pkg/acme/webhook/apis/acme/v1alpha1"
}
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/}" )
"$deepcopygen" \
--go-header-file hack/boilerplate-go.txt \
--output-file zz_generated.deepcopy.go \
--bounding-dirs "${module_name}" \
"${prefixed_inputs[@]}"
}
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-go.txt \
--clientset-name versioned \
--input-base "" \
--input "$joined" \
--output-dir "${client_subpackage}"/clientset \
--output-pkg "${client_package}"/clientset
}
gen-listers() {
clean "${client_subpackage}/listers" '*.go'
echo "+++ Generating listers..." >&2
prefixed_inputs=( "${client_inputs[@]/#/$module_name/}" )
"$listergen" \
--go-header-file hack/boilerplate-go.txt \
--output-dir "${client_subpackage}"/listers \
--output-pkg "${client_package}"/listers \
"${prefixed_inputs[@]}"
}
gen-informers() {
clean "${client_subpackage}"/informers '*.go'
echo "+++ Generating informers..." >&2
prefixed_inputs=( "${client_inputs[@]/#/$module_name/}" )
"$informergen" \
--go-header-file hack/boilerplate-go.txt \
--versioned-clientset-package "${client_package}"/clientset/versioned \
--listers-package "${client_package}"/listers \
--output-dir "${client_subpackage}"/informers \
--output-pkg "${client_package}"/informers \
"${prefixed_inputs[@]}"
}
gen-defaulters() {
clean internal/apis 'zz_generated.defaults.go'
clean pkg/webhook/handlers/testdata/apis 'zz_generated.defaults.go'
echo "+++ Generating defaulting functions..." >&2
DEFAULT_EXTRA_PEER_PKGS=(
github.com/cert-manager/cert-manager/internal/apis/meta \
github.com/cert-manager/cert-manager/internal/apis/meta/v1 \
github.com/cert-manager/cert-manager/internal/apis/config/shared \
github.com/cert-manager/cert-manager/internal/apis/config/shared/v1alpha1 \
github.com/cert-manager/cert-manager/pkg/apis/meta/v1 \
github.com/cert-manager/cert-manager/pkg/apis/config/shared/v1alpha1 \
)
DEFAULT_PKGS=( "${defaulter_inputs[@]/#/$module_name/}" )
"$defaultergen" \
--go-header-file hack/boilerplate-go.txt \
--extra-peer-dirs "$( IFS=$','; echo "${DEFAULT_EXTRA_PEER_PKGS[*]}" )" \
--output-file zz_generated.defaults.go \
"${DEFAULT_PKGS[@]}"
}
gen-conversions() {
clean internal/apis 'zz_generated.conversion.go'
clean pkg/webhook/handlers/testdata/apis 'zz_generated.conversion.go'
echo "+++ Generating conversion functions..." >&2
CONVERSION_EXTRA_PEER_PKGS=(
github.com/cert-manager/cert-manager/internal/apis/meta \
github.com/cert-manager/cert-manager/internal/apis/meta/v1 \
github.com/cert-manager/cert-manager/internal/apis/config/shared \
github.com/cert-manager/cert-manager/internal/apis/config/shared/v1alpha1 \
github.com/cert-manager/cert-manager/pkg/apis/meta/v1 \
github.com/cert-manager/cert-manager/pkg/apis/config/shared/v1alpha1 \
)
CONVERSION_PKGS=( "${conversion_inputs[@]/#/$module_name/}" )
"$conversiongen" \
--go-header-file hack/boilerplate-go.txt \
--extra-peer-dirs "$( IFS=$','; echo "${CONVERSION_EXTRA_PEER_PKGS[*]}" )" \
--extra-dirs "$( IFS=$','; echo "${CONVERSION_PKGS[*]}" )" \
--output-file zz_generated.conversion.go \
"${CONVERSION_PKGS[@]}"
}
gen-openapi-acme
gen-deepcopy
gen-clientsets
gen-listers
gen-informers
gen-defaulters
gen-conversions