diff --git a/Makefile b/Makefile index 393d1b62a..5a3b7543b 100644 --- a/Makefile +++ b/Makefile @@ -169,7 +169,7 @@ docs-pull-images: .PHONY: generate-crd #? generate-crd: Generate CRD clientset and CRD manifests generate-crd: - @$(CURDIR)/script/code-gen-docker.sh + @$(CURDIR)/script/code-gen.sh .PHONY: generate-genconf #? generate-genconf: Generate code from dynamic configuration github.com/traefik/genconf diff --git a/script/code-gen-docker.sh b/script/code-gen-docker.sh deleted file mode 100755 index 501957c65..000000000 --- a/script/code-gen-docker.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env bash -# shellcheck disable=SC2046 - -set -e -o pipefail - -export PROJECT_MODULE="github.com/traefik/traefik" -export MODULE_VERSION="v2" -IMAGE_NAME="kubernetes-codegen:latest" -CURRENT_DIR="$(pwd)" - -echo "Building codegen Docker image..." -docker build --build-arg KUBE_VERSION=v0.29.8 \ - --build-arg USER="${USER}" \ - --build-arg UID="$(id -u)" \ - --build-arg GID="$(id -g)" \ - -f "./script/codegen.Dockerfile" \ - -t "${IMAGE_NAME}" \ - "." - -echo "Generating Traefik clientSet code and DeepCopy code ..." -docker run --rm \ - -v "${CURRENT_DIR}:/go/src/${PROJECT_MODULE}" \ - -w "/go/src/${PROJECT_MODULE}" \ - -e "PROJECT_MODULE=${PROJECT_MODULE}" \ - -e "MODULE_VERSION=${MODULE_VERSION}" \ - "${IMAGE_NAME}" \ - bash ./script/code-gen.sh - -echo "Generating the CRD definitions for the documentation ..." -docker run --rm \ - -v "${CURRENT_DIR}:/go/src/${PROJECT_MODULE}" \ - -w "/go/src/${PROJECT_MODULE}" \ - "${IMAGE_NAME}" \ - controller-gen crd:crdVersions=v1 \ - paths={./pkg/provider/kubernetes/crd/traefikio/v1alpha1/...,./pkg/provider/kubernetes/crd/traefikcontainous/v1alpha1/...} \ - output:dir=./docs/content/reference/dynamic-configuration/ - -echo "Concatenate the CRD definitions for publication and integration tests ..." -cat "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/traefik.io_*.yaml > "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml -cat "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/traefik.containo.us_*.yaml >> "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml -cp -f "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml "${CURRENT_DIR}"/integration/fixtures/k8s/01-traefik-crd.yml diff --git a/script/code-gen.sh b/script/code-gen.sh index f03f3f0a0..4edd54f58 100755 --- a/script/code-gen.sh +++ b/script/code-gen.sh @@ -2,30 +2,36 @@ set -e -o pipefail +PROJECT_MODULE="github.com/traefik/traefik" +MODULE_VERSION="v2" +KUBE_VERSION=v0.30.10 +CURRENT_DIR="$(pwd)" + +go install "k8s.io/code-generator/cmd/deepcopy-gen@${KUBE_VERSION}" +go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.16.1 + +CODEGEN_PKG="$(go env GOPATH)/pkg/mod/k8s.io/code-generator@${KUBE_VERSION}" # shellcheck disable=SC1091 # Cannot check source of this file -source /go/src/k8s.io/code-generator/kube_codegen.sh - -git config --global --add safe.directory "/go/src/${PROJECT_MODULE}" - -rm -rf "/go/src/${PROJECT_MODULE}/${MODULE_VERSION}" -mkdir -p "/go/src/${PROJECT_MODULE}/${MODULE_VERSION}/" - -# TODO: remove the workaround when the issue is solved in the code-generator -# (https://github.com/kubernetes/code-generator/issues/165). -# Here, we create the soft link named "${PROJECT_MODULE}" to the parent directory of -# Traefik to ensure the layout required by the kube_codegen.sh script. -ln -s "/go/src/${PROJECT_MODULE}/pkg" "/go/src/${PROJECT_MODULE}/${MODULE_VERSION}/" +source "${CODEGEN_PKG}/kube_codegen.sh" +echo "# Generating Traefik clientset and deepcopy code ..." kube::codegen::gen_helpers \ - --input-pkg-root "${PROJECT_MODULE}/pkg" \ - --output-base "$(dirname "${BASH_SOURCE[0]}")/../../../.." \ - --boilerplate "/go/src/${PROJECT_MODULE}/script/boilerplate.go.tmpl" + --boilerplate "$(dirname "${BASH_SOURCE[0]}")/boilerplate.go.tmpl" \ + "${CURRENT_DIR}" kube::codegen::gen_client \ --with-watch \ - --input-pkg-root "${PROJECT_MODULE}/${MODULE_VERSION}/pkg/provider/kubernetes/crd" \ - --output-pkg-root "${PROJECT_MODULE}/${MODULE_VERSION}/pkg/provider/kubernetes/crd/generated" \ - --output-base "$(dirname "${BASH_SOURCE[0]}")/../../../.." \ - --boilerplate "/go/src/${PROJECT_MODULE}/script/boilerplate.go.tmpl" + --output-dir "${CURRENT_DIR}/pkg/provider/kubernetes/crd/generated" \ + --output-pkg "${PROJECT_MODULE}/${MODULE_VERSION}/pkg/provider/kubernetes/crd/generated" \ + --boilerplate "$(dirname "${BASH_SOURCE[0]}")/boilerplate.go.tmpl" \ + "${CURRENT_DIR}/pkg/provider/kubernetes/crd" -rm -rf "/go/src/${PROJECT_MODULE}/${MODULE_VERSION}" +echo "# Generating the CRD definitions for the documentation ..." +controller-gen crd:crdVersions=v1 \ + paths={./pkg/provider/kubernetes/crd/traefikio/v1alpha1/...,./pkg/provider/kubernetes/crd/traefikcontainous/v1alpha1/...} \ + output:dir=./docs/content/reference/dynamic-configuration/ + +echo "# Concatenate the CRD definitions for publication and integration tests ..." +cat "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/traefik.io_*.yaml > "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml +cat "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/traefik.containo.us_*.yaml >> "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml +cp -f "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml "${CURRENT_DIR}"/integration/fixtures/k8s/01-traefik-crd.yml diff --git a/script/codegen.Dockerfile b/script/codegen.Dockerfile deleted file mode 100644 index 0d36ef63f..000000000 --- a/script/codegen.Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -FROM golang:1.23 - -ARG USER=$USER -ARG UID=$UID -ARG GID=$GID -RUN useradd -l -m ${USER} --uid=${UID} && echo "${USER}:" chpasswd -USER ${UID}:${GID} - -ARG KUBE_VERSION - -RUN go install k8s.io/code-generator/cmd/defaulter-gen@$KUBE_VERSION -RUN go install k8s.io/code-generator/cmd/client-gen@$KUBE_VERSION -RUN go install k8s.io/code-generator/cmd/lister-gen@$KUBE_VERSION -RUN go install k8s.io/code-generator/cmd/informer-gen@$KUBE_VERSION -RUN go install k8s.io/code-generator/cmd/deepcopy-gen@$KUBE_VERSION -RUN go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.16.1 - -RUN mkdir -p $GOPATH/src/k8s.io/code-generator -RUN cp -R $GOPATH/pkg/mod/k8s.io/code-generator@$KUBE_VERSION/* $GOPATH/src/k8s.io/code-generator/ -RUN chmod +x $GOPATH/src/k8s.io/code-generator/kube_codegen.sh - -WORKDIR $GOPATH/src/k8s.io/code-generator