mirror of
https://github.com/kubernetes-sigs/external-dns.git
synced 2026-03-01 05:51:00 +01:00
* chore(tools): refactor CRD generation and add validation workflow Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com> * chore(tools): refactor CRD generation and add validation workflow Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com> * chore(tools): refactor CRD generation and add validation workflow Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com> * chore(tools): refactor CRD generation and add validation workflow Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com> * chore(tools): refactor CRD generation and add validation workflow Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com> * chore(tools): refactor CRD generation and add validation workflow Co-authored-by: vflaux <38909103+vflaux@users.noreply.github.com> * chore(tools): refactor CRD generation and add validation workflow Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com> * chore(tools): refactor CRD generation and add validation workflow Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com> * chore(tools): refactor CRD generation and add validation workflow Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com> * chore(tools): refactor CRD generation and add validation workflow Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> * chore(tools): refactor CRD generation and add validation workflow Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com> * chore(tools): refactor CRD generation and add validation workflow Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> --------- Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com> Co-authored-by: vflaux <38909103+vflaux@users.noreply.github.com> Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>
78 lines
3.2 KiB
Bash
Executable File
78 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Copyright 2026 The Kubernetes 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.
|
|
|
|
# generate-crd.sh
|
|
#
|
|
# This script generates Kubernetes Custom Resource Definitions (CRDs) and related
|
|
# deepcopy code for external-dns using controller-gen from controller-tools.
|
|
#
|
|
## What this script does:
|
|
# 1. Generates DeepCopy methods for types in the endpoint package
|
|
# 2. Generates CRD manifests for API types in the apis package
|
|
# 3. Copies CRDs to the Helm chart directory
|
|
#
|
|
# Usage:
|
|
# ./scripts/generate-crd.sh
|
|
# make crd # calls this script
|
|
|
|
set -euo pipefail
|
|
|
|
# Get the script directory
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
# Get the project root (parent of scripts directory)
|
|
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
|
|
cd "${PROJECT_ROOT}"
|
|
|
|
# Define tool commands (using tools from go.tool.mod)
|
|
CONTROLLER_GEN="go tool -modfile=go.tool.mod controller-gen"
|
|
YQ="go tool -modfile=go.tool.mod yq"
|
|
YAMLFMT="go tool -modfile=go.tool.mod yamlfmt"
|
|
|
|
echo " Generating CRDs using controller-gen..."
|
|
|
|
# Step 1: Generate deepcopy methods for endpoint types
|
|
# This creates zz_generated.deepcopy.go with DeepCopy/DeepCopyInto/DeepCopyObject methods
|
|
# The 'object' generator adds these methods for types marked with +kubebuilder:object markers
|
|
echo " → Generating deepcopy for endpoint package..."
|
|
${CONTROLLER_GEN} object crd:crdVersions=v1 paths="./endpoint/..."
|
|
|
|
# Clean up empty import statements from generated files
|
|
# controller-gen sometimes adds empty import() blocks which create noise in diffs
|
|
find ./endpoint -name "zz_generated.deepcopy.go" -exec gofmt -s -w {} \;
|
|
|
|
# Step 2: Generate CRD manifests for API types
|
|
# - Generates CRDs from Go types with kubebuilder markers
|
|
# - Outputs to stdout, formats with yamlfmt, then splits into individual files
|
|
# - Each CRD is saved to config/crd/standard/<crd-name>.yaml
|
|
echo " → Generating CRDs for apis package..."
|
|
${CONTROLLER_GEN} object crd:crdVersions=v1 paths="./apis/..." output:crd:stdout | \
|
|
${YAMLFMT} - | \
|
|
${YQ} eval '.' --no-doc --split-exp '"./config/crd/standard/" + .metadata.name + ".yaml"'
|
|
|
|
# Clean up empty import statements from generated files
|
|
find ./apis -name "zz_generated.deepcopy.go" -exec gofmt -s -w {} \;
|
|
|
|
# Step 3: Copy CRDs to Helm chart with filtered annotations
|
|
# - Reads CRDs from config/crd/standard/
|
|
# - Filters annotations to only keep kubernetes.io/* (removes controller-gen annotations)
|
|
# - Splits and saves to charts/external-dns/crds/ for Helm chart packaging
|
|
echo " → Copying CRDs to chart directory..."
|
|
${YQ} eval '.metadata.annotations |= with_entries(select(.key | test("kubernetes\.io")))' \
|
|
--no-doc --split-exp '"./charts/external-dns/crds/" + .metadata.name + ".yaml"' \
|
|
./config/crd/standard/*.yaml
|
|
|
|
echo -e " ✅ CRD generation complete"
|