From 4c676c3a3f92c4d5a0fa85543a14afdf37a11745 Mon Sep 17 00:00:00 2001 From: Abdullah Alaqeel Date: Sun, 16 Aug 2026 14:01:01 +0300 Subject: [PATCH] fix(chart): set preserveUnknownFields: false on CRDs Kube-apiserver fills spec.preserveUnknownFields: false in server-side on v1 CRDs where omitted, causing ArgoCD server-side-apply to flag every CRD as OutOfSync. Add the field explicitly to all CRDs in config/base/generated-crds/ (kustomize path) and the Helm chart CRD bundles. controller-gen never emits the field, so re-add it in the generate-crds Makefile target right after controller-gen writes generated-crds/: a bare `make generate-crds` can no longer drop it from the kustomize source of truth, and the Helm bundles assembled by hack/sync-helm-crds.sh inherit it. Signed-off-by: Abdullah Alaqeel Assisted-by: GLM-5.2 (via opencode) --- Makefile | 7 +++++++ .../tekton-operator/templates/kubernetes-crds.yaml | 13 +++++++++++++ .../tekton-operator/templates/openshift-crds.yaml | 13 +++++++++++++ .../operator.tekton.dev_manualapprovalgates.yaml | 1 + ...erator.tekton.dev_openshiftpipelinesascodes.yaml | 1 + .../operator.tekton.dev_syncerservices.yaml | 1 + .../operator.tekton.dev_tektonaddons.yaml | 1 + .../operator.tekton.dev_tektonchains.yaml | 1 + .../operator.tekton.dev_tektonconfigs.yaml | 1 + .../operator.tekton.dev_tektondashboards.yaml | 1 + .../operator.tekton.dev_tektoninstallersets.yaml | 1 + ...ator.tekton.dev_tektonmulticlusterproxyaaes.yaml | 1 + .../operator.tekton.dev_tektonpipelines.yaml | 1 + .../operator.tekton.dev_tektonpruners.yaml | 1 + .../operator.tekton.dev_tektonresults.yaml | 1 + .../operator.tekton.dev_tektonschedulers.yaml | 1 + .../operator.tekton.dev_tektontriggers.yaml | 1 + 17 files changed, 47 insertions(+) diff --git a/Makefile b/Makefile index 6865d120a2..667b0912b7 100644 --- a/Makefile +++ b/Makefile @@ -125,9 +125,16 @@ generated: | vendor ; $(info $(M) update generated files) ## Update generated fi $Q ./hack/update-codegen.sh ##@ CRD Generation +# Inject preserveUnknownFields: false (the explicit default) right after +# controller-gen writes generated-crds/: the apiserver fills this field in +# server-side, so omitting it makes ArgoCD server-side-apply flag every CRD +# as OutOfSync. Done here, not in sync-helm-crds.sh, so a bare +# `make generate-crds` cannot silently drop the field from the kustomize +# source of truth. .PHONY: generate-crds generate-crds: | $(CONTROLLER_GEN) ; $(info $(M) generating CRDs from Go types…) ## Generate CRD manifests from Go types $Q $(CONTROLLER_GEN) crd:allowDangerousTypes=true paths="./pkg/apis/operator/v1alpha1/..." output:crd:artifacts:config=config/base/generated-crds + $Q for f in config/base/generated-crds/*.yaml; do grep -q '^ preserveUnknownFields:' $$f || perl -i -pe 's/^spec:\n/spec:\n preserveUnknownFields: false\n/' $$f; done .PHONY: sync-helm-crds sync-helm-crds: generate-crds ; $(info $(M) syncing CRDs to config and Helm chart…) ## Sync generated CRDs to config/ and Helm chart diff --git a/charts/tekton-operator/templates/kubernetes-crds.yaml b/charts/tekton-operator/templates/kubernetes-crds.yaml index 5b9c28ea07..915cde1b10 100644 --- a/charts/tekton-operator/templates/kubernetes-crds.yaml +++ b/charts/tekton-operator/templates/kubernetes-crds.yaml @@ -10,6 +10,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: ManualApprovalGate @@ -655,6 +656,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: OpenShiftPipelinesAsCode @@ -1378,6 +1380,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonChain @@ -2350,6 +2353,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonConfig @@ -4452,6 +4456,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonDashboard @@ -4667,6 +4672,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonInstallerSet @@ -4781,6 +4787,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonPipeline @@ -5652,6 +5659,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonResult @@ -6541,6 +6549,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonTrigger @@ -7244,6 +7253,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonPruner @@ -8067,6 +8077,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonScheduler @@ -8742,6 +8753,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonMulticlusterProxyAAE @@ -9386,6 +9398,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: SyncerService diff --git a/charts/tekton-operator/templates/openshift-crds.yaml b/charts/tekton-operator/templates/openshift-crds.yaml index 1f2a8aaf32..edad195dd0 100644 --- a/charts/tekton-operator/templates/openshift-crds.yaml +++ b/charts/tekton-operator/templates/openshift-crds.yaml @@ -10,6 +10,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: ManualApprovalGate @@ -655,6 +656,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: OpenShiftPipelinesAsCode @@ -1378,6 +1380,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonAddon @@ -1572,6 +1575,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonChain @@ -2544,6 +2548,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonConfig @@ -4646,6 +4651,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonInstallerSet @@ -4760,6 +4766,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonPipeline @@ -5631,6 +5638,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonResult @@ -6520,6 +6528,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonTrigger @@ -7223,6 +7232,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonPruner @@ -8046,6 +8056,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonScheduler @@ -8721,6 +8732,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonMulticlusterProxyAAE @@ -9365,6 +9377,7 @@ metadata: version: "devel" operator.tekton.dev/release: "devel" spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: SyncerService diff --git a/config/base/generated-crds/operator.tekton.dev_manualapprovalgates.yaml b/config/base/generated-crds/operator.tekton.dev_manualapprovalgates.yaml index 3dcf235d6e..95c8a34d13 100644 --- a/config/base/generated-crds/operator.tekton.dev_manualapprovalgates.yaml +++ b/config/base/generated-crds/operator.tekton.dev_manualapprovalgates.yaml @@ -6,6 +6,7 @@ metadata: controller-gen.kubebuilder.io/version: v0.18.0 name: manualapprovalgates.operator.tekton.dev spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: ManualApprovalGate diff --git a/config/base/generated-crds/operator.tekton.dev_openshiftpipelinesascodes.yaml b/config/base/generated-crds/operator.tekton.dev_openshiftpipelinesascodes.yaml index 7f606398f4..8acc9ffa28 100644 --- a/config/base/generated-crds/operator.tekton.dev_openshiftpipelinesascodes.yaml +++ b/config/base/generated-crds/operator.tekton.dev_openshiftpipelinesascodes.yaml @@ -6,6 +6,7 @@ metadata: controller-gen.kubebuilder.io/version: v0.18.0 name: openshiftpipelinesascodes.operator.tekton.dev spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: OpenShiftPipelinesAsCode diff --git a/config/base/generated-crds/operator.tekton.dev_syncerservices.yaml b/config/base/generated-crds/operator.tekton.dev_syncerservices.yaml index 607a7354ef..492b329bbf 100644 --- a/config/base/generated-crds/operator.tekton.dev_syncerservices.yaml +++ b/config/base/generated-crds/operator.tekton.dev_syncerservices.yaml @@ -6,6 +6,7 @@ metadata: controller-gen.kubebuilder.io/version: v0.18.0 name: syncerservices.operator.tekton.dev spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: SyncerService diff --git a/config/base/generated-crds/operator.tekton.dev_tektonaddons.yaml b/config/base/generated-crds/operator.tekton.dev_tektonaddons.yaml index 319cd5d48b..503c3891e3 100644 --- a/config/base/generated-crds/operator.tekton.dev_tektonaddons.yaml +++ b/config/base/generated-crds/operator.tekton.dev_tektonaddons.yaml @@ -6,6 +6,7 @@ metadata: controller-gen.kubebuilder.io/version: v0.18.0 name: tektonaddons.operator.tekton.dev spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonAddon diff --git a/config/base/generated-crds/operator.tekton.dev_tektonchains.yaml b/config/base/generated-crds/operator.tekton.dev_tektonchains.yaml index bcdbbcaba5..41eb3da3cf 100644 --- a/config/base/generated-crds/operator.tekton.dev_tektonchains.yaml +++ b/config/base/generated-crds/operator.tekton.dev_tektonchains.yaml @@ -6,6 +6,7 @@ metadata: controller-gen.kubebuilder.io/version: v0.18.0 name: tektonchains.operator.tekton.dev spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonChain diff --git a/config/base/generated-crds/operator.tekton.dev_tektonconfigs.yaml b/config/base/generated-crds/operator.tekton.dev_tektonconfigs.yaml index 87eec9f4f5..32642994a0 100644 --- a/config/base/generated-crds/operator.tekton.dev_tektonconfigs.yaml +++ b/config/base/generated-crds/operator.tekton.dev_tektonconfigs.yaml @@ -6,6 +6,7 @@ metadata: controller-gen.kubebuilder.io/version: v0.18.0 name: tektonconfigs.operator.tekton.dev spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonConfig diff --git a/config/base/generated-crds/operator.tekton.dev_tektondashboards.yaml b/config/base/generated-crds/operator.tekton.dev_tektondashboards.yaml index 6c41a960d8..32e3a2a27c 100644 --- a/config/base/generated-crds/operator.tekton.dev_tektondashboards.yaml +++ b/config/base/generated-crds/operator.tekton.dev_tektondashboards.yaml @@ -6,6 +6,7 @@ metadata: controller-gen.kubebuilder.io/version: v0.18.0 name: tektondashboards.operator.tekton.dev spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonDashboard diff --git a/config/base/generated-crds/operator.tekton.dev_tektoninstallersets.yaml b/config/base/generated-crds/operator.tekton.dev_tektoninstallersets.yaml index 309902ffd6..e22aef1a2c 100644 --- a/config/base/generated-crds/operator.tekton.dev_tektoninstallersets.yaml +++ b/config/base/generated-crds/operator.tekton.dev_tektoninstallersets.yaml @@ -6,6 +6,7 @@ metadata: controller-gen.kubebuilder.io/version: v0.18.0 name: tektoninstallersets.operator.tekton.dev spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonInstallerSet diff --git a/config/base/generated-crds/operator.tekton.dev_tektonmulticlusterproxyaaes.yaml b/config/base/generated-crds/operator.tekton.dev_tektonmulticlusterproxyaaes.yaml index a6cb2a06c7..61c6b5f00a 100644 --- a/config/base/generated-crds/operator.tekton.dev_tektonmulticlusterproxyaaes.yaml +++ b/config/base/generated-crds/operator.tekton.dev_tektonmulticlusterproxyaaes.yaml @@ -6,6 +6,7 @@ metadata: controller-gen.kubebuilder.io/version: v0.18.0 name: tektonmulticlusterproxyaaes.operator.tekton.dev spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonMulticlusterProxyAAE diff --git a/config/base/generated-crds/operator.tekton.dev_tektonpipelines.yaml b/config/base/generated-crds/operator.tekton.dev_tektonpipelines.yaml index 72ddd655ee..bc6ca28e3e 100644 --- a/config/base/generated-crds/operator.tekton.dev_tektonpipelines.yaml +++ b/config/base/generated-crds/operator.tekton.dev_tektonpipelines.yaml @@ -6,6 +6,7 @@ metadata: controller-gen.kubebuilder.io/version: v0.18.0 name: tektonpipelines.operator.tekton.dev spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonPipeline diff --git a/config/base/generated-crds/operator.tekton.dev_tektonpruners.yaml b/config/base/generated-crds/operator.tekton.dev_tektonpruners.yaml index 494660790d..97ea094b15 100644 --- a/config/base/generated-crds/operator.tekton.dev_tektonpruners.yaml +++ b/config/base/generated-crds/operator.tekton.dev_tektonpruners.yaml @@ -6,6 +6,7 @@ metadata: controller-gen.kubebuilder.io/version: v0.18.0 name: tektonpruners.operator.tekton.dev spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonPruner diff --git a/config/base/generated-crds/operator.tekton.dev_tektonresults.yaml b/config/base/generated-crds/operator.tekton.dev_tektonresults.yaml index 74dbe2b844..996fc4c51e 100644 --- a/config/base/generated-crds/operator.tekton.dev_tektonresults.yaml +++ b/config/base/generated-crds/operator.tekton.dev_tektonresults.yaml @@ -6,6 +6,7 @@ metadata: controller-gen.kubebuilder.io/version: v0.18.0 name: tektonresults.operator.tekton.dev spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonResult diff --git a/config/base/generated-crds/operator.tekton.dev_tektonschedulers.yaml b/config/base/generated-crds/operator.tekton.dev_tektonschedulers.yaml index a00957cc83..12925ea050 100644 --- a/config/base/generated-crds/operator.tekton.dev_tektonschedulers.yaml +++ b/config/base/generated-crds/operator.tekton.dev_tektonschedulers.yaml @@ -6,6 +6,7 @@ metadata: controller-gen.kubebuilder.io/version: v0.18.0 name: tektonschedulers.operator.tekton.dev spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonScheduler diff --git a/config/base/generated-crds/operator.tekton.dev_tektontriggers.yaml b/config/base/generated-crds/operator.tekton.dev_tektontriggers.yaml index 6d5171f8aa..31ef90ad44 100644 --- a/config/base/generated-crds/operator.tekton.dev_tektontriggers.yaml +++ b/config/base/generated-crds/operator.tekton.dev_tektontriggers.yaml @@ -6,6 +6,7 @@ metadata: controller-gen.kubebuilder.io/version: v0.18.0 name: tektontriggers.operator.tekton.dev spec: + preserveUnknownFields: false group: operator.tekton.dev names: kind: TektonTrigger