Skip to content

Commit 09b0c53

Browse files
committed
Adapt code generation script for k8s v0.30 using kube_codegen.sh functions and update Makefile
1 parent 55be9a6 commit 09b0c53

File tree

2 files changed

+54
-149
lines changed

2 files changed

+54
-149
lines changed

Makefile

+4-53
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ METALNETLET_IMG ?= metalnetlet:latest
77
KIND_CLUSTER_NAME ?= kind
88

99
# ENVTEST_K8S_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary.
10-
ENVTEST_K8S_VERSION = 1.29.0
10+
ENVTEST_K8S_VERSION = 1.30.3
1111

1212
# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
1313
ifeq (,$(shell go env GOBIN))
@@ -64,17 +64,10 @@ manifests: controller-gen ## Generate rbac objects.
6464
./hack/promote-let-role.sh config/metalnetlet/apinet-rbac/role.yaml config/apiserver/rbac/metalnetlet_role.yaml apinet.ironcore.dev:system:metalnetlets
6565

6666
.PHONY: generate
67-
generate: vgopath models-schema deepcopy-gen client-gen lister-gen informer-gen defaulter-gen conversion-gen openapi-gen applyconfiguration-gen
67+
generate: vgopath models-schema openapi-gen
6868
VGOPATH=$(VGOPATH) \
6969
MODELS_SCHEMA=$(MODELS_SCHEMA) \
70-
DEEPCOPY_GEN=$(DEEPCOPY_GEN) \
71-
CLIENT_GEN=$(CLIENT_GEN) \
72-
LISTER_GEN=$(LISTER_GEN) \
73-
INFORMER_GEN=$(INFORMER_GEN) \
74-
DEFAULTER_GEN=$(DEFAULTER_GEN) \
75-
CONVERSION_GEN=$(CONVERSION_GEN) \
7670
OPENAPI_GEN=$(OPENAPI_GEN) \
77-
APPLYCONFIGURATION_GEN=$(APPLYCONFIGURATION_GEN) \
7871
./hack/update-codegen.sh
7972

8073
.PHONY: add-license
@@ -330,14 +323,7 @@ KUSTOMIZE ?= $(LOCALBIN)/kustomize
330323
CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen
331324
ENVTEST ?= $(LOCALBIN)/setup-envtest
332325
OPENAPI_EXTRACTOR ?= $(LOCALBIN)/openapi-extractor
333-
DEEPCOPY_GEN ?= $(LOCALBIN)/deepcopy-gen
334-
CLIENT_GEN ?= $(LOCALBIN)/client-gen
335-
LISTER_GEN ?= $(LOCALBIN)/lister-gen
336-
INFORMER_GEN ?= $(LOCALBIN)/informer-gen
337-
DEFAULTER_GEN ?= $(LOCALBIN)/defaulter-gen
338-
CONVERSION_GEN ?= $(LOCALBIN)/conversion-gen
339326
OPENAPI_GEN ?= $(LOCALBIN)/openapi-gen
340-
APPLYCONFIGURATION_GEN ?= $(LOCALBIN)/applyconfiguration-gen
341327
VGOPATH ?= $(LOCALBIN)/vgopath
342328
GEN_CRD_API_REFERENCE_DOCS ?= $(LOCALBIN)/gen-crd-api-reference-docs
343329
ADDLICENSE ?= $(LOCALBIN)/addlicense
@@ -347,9 +333,8 @@ GOLANGCI_LINT ?= $(LOCALBIN)/golangci-lint
347333

348334
## Tool Versions
349335
KUSTOMIZE_VERSION ?= v5.1.1
350-
CODE_GENERATOR_VERSION ?= v0.29.0
351336
VGOPATH_VERSION ?= v0.1.5
352-
CONTROLLER_TOOLS_VERSION ?= v0.14.0
337+
CONTROLLER_TOOLS_VERSION ?= v0.15.0
353338
GEN_CRD_API_REFERENCE_DOCS_VERSION ?= v0.3.0
354339
ADDLICENSE_VERSION ?= v1.1.1
355340
GOIMPORTS_VERSION ?= v0.25.0
@@ -372,45 +357,11 @@ $(CONTROLLER_GEN): $(LOCALBIN)
372357
test -s $(LOCALBIN)/controller-gen && $(LOCALBIN)/controller-gen --version | grep -q $(CONTROLLER_TOOLS_VERSION) || \
373358
GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION)
374359

375-
.PHONY: deepcopy-gen
376-
deepcopy-gen: $(DEEPCOPY_GEN) ## Download deepcopy-gen locally if necessary.
377-
$(DEEPCOPY_GEN): $(LOCALBIN)
378-
test -s $(LOCALBIN)/deepcopy-gen || GOBIN=$(LOCALBIN) go install k8s.io/code-generator/cmd/deepcopy-gen@$(CODE_GENERATOR_VERSION)
379-
380-
.PHONY: client-gen
381-
client-gen: $(CLIENT_GEN) ## Download client-gen locally if necessary.
382-
$(CLIENT_GEN): $(LOCALBIN)
383-
test -s $(LOCALBIN)/client-gen || GOBIN=$(LOCALBIN) go install k8s.io/code-generator/cmd/client-gen@$(CODE_GENERATOR_VERSION)
384-
385-
.PHONY: lister-gen
386-
lister-gen: $(LISTER_GEN) ## Download lister-gen locally if necessary.
387-
$(LISTER_GEN): $(LOCALBIN)
388-
test -s $(LOCALBIN)/lister-gen || GOBIN=$(LOCALBIN) go install k8s.io/code-generator/cmd/lister-gen@$(CODE_GENERATOR_VERSION)
389-
390-
.PHONY: informer-gen
391-
informer-gen: $(INFORMER_GEN) ## Download informer-gen locally if necessary.
392-
$(INFORMER_GEN): $(LOCALBIN)
393-
test -s $(LOCALBIN)/informer-gen || GOBIN=$(LOCALBIN) go install k8s.io/code-generator/cmd/informer-gen@$(CODE_GENERATOR_VERSION)
394-
395-
.PHONY: defaulter-gen
396-
defaulter-gen: $(DEFAULTER_GEN) ## Download defaulter-gen locally if necessary.
397-
$(DEFAULTER_GEN): $(LOCALBIN)
398-
test -s $(LOCALBIN)/defaulter-gen || GOBIN=$(LOCALBIN) go install k8s.io/code-generator/cmd/defaulter-gen@$(CODE_GENERATOR_VERSION)
399-
400-
.PHONY: conversion-gen
401-
conversion-gen: $(CONVERSION_GEN) ## Download conversion-gen locally if necessary.
402-
$(CONVERSION_GEN): $(LOCALBIN)
403-
test -s $(LOCALBIN)/conversion-gen || GOBIN=$(LOCALBIN) go install k8s.io/code-generator/cmd/conversion-gen@$(CODE_GENERATOR_VERSION)
404-
405360
.PHONY: openapi-gen
406361
openapi-gen: $(OPENAPI_GEN) ## Download openapi-gen locally if necessary.
407362
$(OPENAPI_GEN): $(LOCALBIN)
408-
test -s $(LOCALBIN)/openapi-gen || GOBIN=$(LOCALBIN) go install k8s.io/code-generator/cmd/openapi-gen@$(CODE_GENERATOR_VERSION)
363+
test -s $(LOCALBIN)/openapi-gen || GOBIN=$(LOCALBIN) go install k8s.io/kube-openapi/cmd/openapi-gen
409364

410-
.PHONY: applyconfiguration-gen
411-
applyconfiguration-gen: $(APPLYCONFIGURATION_GEN) ## Download applyconfiguration-gen locally if necessary.
412-
$(APPLYCONFIGURATION_GEN): $(LOCALBIN)
413-
test -s $(LOCALBIN)/applyconfiguration-gen || GOBIN=$(LOCALBIN) go install k8s.io/code-generator/cmd/applyconfiguration-gen@$(CODE_GENERATOR_VERSION)
414365

415366
.PHONY: vgopath
416367
vgopath: $(VGOPATH) ## Download vgopath locally if necessary.

hack/update-codegen.sh

+50-96
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ set -o nounset
55
set -o pipefail
66

77
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
8+
PROJECT_ROOT="$SCRIPT_DIR/.."
89
export TERM="xterm-256color"
910

1011
bold="$(tput bold)"
@@ -22,133 +23,86 @@ function qualify-gvs() {
2223

2324
for V in ${Vs//,/ }; do
2425
res="$res$join_char$APIS_PKG/$G/$V"
25-
join_char=","
26+
join_char=" "
2627
done
2728
done
2829

2930
echo "$res"
3031
}
3132

32-
function qualify-gs() {
33-
APIS_PKG="$1"
34-
unset GROUPS
35-
IFS=' ' read -ra GROUPS <<< "$2"
36-
join_char=""
37-
res=""
38-
39-
for G in "${GROUPS[@]}"; do
40-
res="$res$join_char$APIS_PKG/$G"
41-
join_char=","
42-
done
43-
44-
echo "$res"
45-
}
46-
4733
VGOPATH="$VGOPATH"
4834
MODELS_SCHEMA="$MODELS_SCHEMA"
49-
CLIENT_GEN="$CLIENT_GEN"
50-
DEEPCOPY_GEN="$DEEPCOPY_GEN"
51-
LISTER_GEN="$LISTER_GEN"
52-
INFORMER_GEN="$INFORMER_GEN"
53-
DEFAULTER_GEN="$DEFAULTER_GEN"
54-
CONVERSION_GEN="$CONVERSION_GEN"
5535
OPENAPI_GEN="$OPENAPI_GEN"
56-
APPLYCONFIGURATION_GEN="$APPLYCONFIGURATION_GEN"
5736

5837
VIRTUAL_GOPATH="$(mktemp -d)"
5938
trap 'rm -rf "$GOPATH"' EXIT
6039

6140
# Setup virtual GOPATH so the codegen tools work as expected.
62-
(cd "$SCRIPT_DIR/.."; go mod download && "$VGOPATH" -o "$VIRTUAL_GOPATH")
41+
(cd "$PROJECT_ROOT"; go mod download && "$VGOPATH" -o "$VIRTUAL_GOPATH")
6342

6443
export GOROOT="${GOROOT:-"$(go env GOROOT)"}"
6544
export GOPATH="$VIRTUAL_GOPATH"
66-
export GO111MODULE=off
45+
46+
CODE_GEN_DIR=$(go list -m -f '{{.Dir}}' k8s.io/code-generator)
47+
source "${CODE_GEN_DIR}/kube_codegen.sh"
6748

6849
IRONCORE_NET_ROOT="github.com/ironcore-dev/ironcore-net"
6950
ALL_GROUPS="core"
7051
ALL_VERSION_GROUPS="core:v1alpha1"
7152

7253
echo "${bold}Public types${normal}"
7354

74-
echo "Generating ${blue}deepcopy${normal}"
75-
"$DEEPCOPY_GEN" \
76-
--output-base "$GOPATH/src" \
77-
--go-header-file "$SCRIPT_DIR/boilerplate.go.txt" \
78-
--input-dirs "$(qualify-gvs "$IRONCORE_NET_ROOT/api" "$ALL_VERSION_GROUPS")" \
79-
-O zz_generated.deepcopy
55+
echo "Generating ${blue}deepcopy, defaulter and conversion${normal}"
56+
kube::codegen::gen_helpers \
57+
--boilerplate "$SCRIPT_DIR/boilerplate.go.txt" \
58+
"$PROJECT_ROOT/api"
8059

8160
echo "Generating ${blue}openapi${normal}"
61+
input_dirs=($(qualify-gvs "${IRONCORE_NET_ROOT}/api" "$ALL_VERSION_GROUPS"))
62+
input_dirs+=("${IRONCORE_NET_ROOT}/apimachinery/api/net")
8263
"$OPENAPI_GEN" \
83-
--output-base "$GOPATH/src" \
64+
--output-dir "$PROJECT_ROOT/client-go/openapi" \
65+
--output-pkg "${IRONCORE_NET_ROOT}/client-go/openapi" \
66+
--output-file "zz_generated.openapi.go" \
67+
--report-filename "$PROJECT_ROOT/client-go/openapi/api_violations.report" \
8468
--go-header-file "$SCRIPT_DIR/boilerplate.go.txt" \
85-
--input-dirs "$(qualify-gvs "$IRONCORE_NET_ROOT/api" "$ALL_VERSION_GROUPS")" \
86-
--input-dirs "$IRONCORE_NET_ROOT/apimachinery/api/net" \
87-
--input-dirs "k8s.io/apimachinery/pkg/apis/meta/v1,k8s.io/apimachinery/pkg/runtime,k8s.io/apimachinery/pkg/version" \
88-
--input-dirs "k8s.io/api/core/v1" \
89-
--input-dirs "k8s.io/apimachinery/pkg/api/resource" \
90-
--output-package "$IRONCORE_NET_ROOT/client-go/openapi" \
91-
-O zz_generated.openapi \
92-
--report-filename "$SCRIPT_DIR/../client-go/openapi/api_violations.report"
93-
94-
echo "Generating ${blue}applyconfiguration${normal}"
95-
applyconfigurationgen_external_apis+=("k8s.io/apimachinery/pkg/apis/meta/v1")
96-
applyconfigurationgen_external_apis+=("$(qualify-gvs "$IRONCORE_NET_ROOT/api" "$ALL_VERSION_GROUPS")")
69+
"k8s.io/apimachinery/pkg/apis/meta/v1" \
70+
"k8s.io/apimachinery/pkg/runtime" \
71+
"k8s.io/apimachinery/pkg/version" \
72+
"k8s.io/api/core/v1" \
73+
"k8s.io/apimachinery/pkg/api/resource" \
74+
"${input_dirs[@]}"
75+
76+
echo "Generating ${blue}client, lister, informer and applyconfiguration${normal}"
77+
applyconfigurationgen_external_apis=()
78+
for GV in ${ALL_VERSION_GROUPS}; do
79+
IFS=: read -r G V <<<"${GV}"
80+
applyconfigurationgen_external_apis+=("${IRONCORE_NET_ROOT}/api/${G}/${V}:${IRONCORE_NET_ROOT}/client-go/applyconfigurations/${G}/${V}")
81+
done
9782
applyconfigurationgen_external_apis_csv=$(IFS=,; echo "${applyconfigurationgen_external_apis[*]}")
98-
"$APPLYCONFIGURATION_GEN" \
99-
--output-base "$GOPATH/src" \
100-
--go-header-file "$SCRIPT_DIR/boilerplate.go.txt" \
101-
--input-dirs "${applyconfigurationgen_external_apis_csv}" \
102-
--openapi-schema <("$MODELS_SCHEMA" --openapi-package "$IRONCORE_NET_ROOT/client-go/openapi" --openapi-title "ironcore-net") \
103-
--output-package "$IRONCORE_NET_ROOT/client-go/applyconfigurations"
10483

105-
echo "Generating ${blue}client${normal}"
106-
"$CLIENT_GEN" \
107-
--output-base "$GOPATH/src" \
108-
--go-header-file "$SCRIPT_DIR/boilerplate.go.txt" \
109-
--input "$(qualify-gvs "$IRONCORE_NET_ROOT/api" "$ALL_VERSION_GROUPS")" \
110-
--output-package "$IRONCORE_NET_ROOT/client-go" \
111-
--apply-configuration-package "$IRONCORE_NET_ROOT/client-go/applyconfigurations" \
112-
--clientset-name "ironcorenet" \
113-
--input-base ""
114-
115-
echo "Generating ${blue}lister${normal}"
116-
"$LISTER_GEN" \
117-
--output-base "$GOPATH/src" \
118-
--go-header-file "$SCRIPT_DIR/boilerplate.go.txt" \
119-
--input-dirs "$(qualify-gvs "$IRONCORE_NET_ROOT/api" "$ALL_VERSION_GROUPS")" \
120-
--output-package "$IRONCORE_NET_ROOT/client-go/listers"
84+
# Do not rely on process substitution / GNU bash
85+
tmp_schema_file=$(mktemp)
86+
trap 'rm -f "$tmp_schema_file"' EXIT
87+
"$MODELS_SCHEMA" --openapi-package "${IRONCORE_NET_ROOT}/client-go/openapi" --openapi-title "ironcore-net" > "$tmp_schema_file"
12188

122-
echo "Generating ${blue}informer${normal}"
123-
"$INFORMER_GEN" \
124-
--output-base "$GOPATH/src" \
125-
--go-header-file "$SCRIPT_DIR/boilerplate.go.txt" \
126-
--input-dirs "$(qualify-gvs "$IRONCORE_NET_ROOT/api" "$ALL_VERSION_GROUPS")" \
127-
--versioned-clientset-package "$IRONCORE_NET_ROOT/client-go/ironcorenet" \
128-
--listers-package "$IRONCORE_NET_ROOT/client-go/listers" \
129-
--output-package "$IRONCORE_NET_ROOT/client-go/informers" \
130-
--single-directory
89+
kube::codegen::gen_client \
90+
--with-applyconfig \
91+
--applyconfig-name "applyconfigurations" \
92+
--applyconfig-externals "${applyconfigurationgen_external_apis_csv}" \
93+
--applyconfig-openapi-schema <("$MODELS_SCHEMA" --openapi-package "${IRONCORE_NET_ROOT}/client-go/openapi" --openapi-title "ironcore-net") \
94+
--clientset-name "ironcorenet" \
95+
--listers-name "listers" \
96+
--informers-name "informers" \
97+
--with-watch \
98+
--output-dir "$PROJECT_ROOT/client-go" \
99+
--output-pkg "${IRONCORE_NET_ROOT}/client-go" \
100+
--boilerplate "$SCRIPT_DIR/boilerplate.go.txt" \
101+
"$PROJECT_ROOT/api"
131102

132103
echo "${bold}Internal types${normal}"
133104

134-
echo "Generating ${blue}deepcopy${normal}"
135-
"$DEEPCOPY_GEN" \
136-
--output-base "$GOPATH/src" \
137-
--go-header-file "$SCRIPT_DIR/boilerplate.go.txt" \
138-
--input-dirs "$(qualify-gs "$IRONCORE_NET_ROOT/internal/apis" "$ALL_GROUPS")" \
139-
-O zz_generated.deepcopy
140-
141-
echo "Generating ${blue}defaulter${normal}"
142-
"$DEFAULTER_GEN" \
143-
--output-base "$GOPATH/src" \
144-
--go-header-file "$SCRIPT_DIR/boilerplate.go.txt" \
145-
--input-dirs "$(qualify-gvs "$IRONCORE_NET_ROOT/internal/apis" "$ALL_VERSION_GROUPS")" \
146-
-O zz_generated.defaults
147-
148-
echo "Generating ${blue}conversion${normal}"
149-
"$CONVERSION_GEN" \
150-
--output-base "$GOPATH/src" \
151-
--go-header-file "$SCRIPT_DIR/boilerplate.go.txt" \
152-
--input-dirs "$(qualify-gs "$IRONCORE_NET_ROOT/internal/apis" "$ALL_GROUPS")" \
153-
--input-dirs "$(qualify-gvs "$IRONCORE_NET_ROOT/internal/apis" "$ALL_VERSION_GROUPS")" \
154-
-O zz_generated.conversion
105+
echo "Generating ${blue}deepcopy, defaulter and conversion${normal}"
106+
kube::codegen::gen_helpers \
107+
--boilerplate "$SCRIPT_DIR/boilerplate.go.txt" \
108+
"$PROJECT_ROOT/internal/apis"

0 commit comments

Comments
 (0)