@@ -191,6 +191,8 @@ build-installer: manifests generate-ref kustomize related-image-fs ## Generate a
191191 mkdir -p dist
192192 cd config/manager && $(KUSTOMIZE ) edit set image controller=${IMG}
193193 $(KUSTOMIZE ) build config/default > dist/install.yaml
194+ # Generate dynamic Helm chart as part of release build flow
195+ $(MAKE ) helm-generate
194196
195197# #@ Deployment
196198
@@ -231,6 +233,7 @@ CRD_REF_DOCS ?= $(LOCALBIN)/crd-ref-docs
231233ENVTEST ?= $(LOCALBIN ) /setup-envtest
232234GOLANGCI_LINT = $(LOCALBIN ) /golangci-lint
233235ENVSUBST = $(LOCALBIN ) /envsubst
236+ HELMIFY ?= $(LOCALBIN ) /helmify
234237
235238# # Tool Versions
236239KUSTOMIZE_VERSION ?= v5.4.2
@@ -239,6 +242,7 @@ CRD_REF_DOCS_VERSION ?= v0.1.0
239242ENVTEST_VERSION ?= release-0.18
240243GOLANGCI_LINT_VERSION ?= v1.59.1
241244ENVSUBST_VERSION ?= v1.4.2
245+ HELMIFY_VERSION ?= v0.4.18
242246
243247.PHONY : kustomize
244248kustomize : $(KUSTOMIZE ) # # Download kustomize locally if necessary.
@@ -265,6 +269,11 @@ envsubst: $(ENVSUBST) ## Download envsubst locally if necessary.
265269$(ENVSUBST ) : $(LOCALBIN )
266270 $(call go-install-tool,$(ENVSUBST ) ,github.com/a8m/envsubst/cmd/envsubst,$(ENVSUBST_VERSION ) )
267271
272+ .PHONY : helmify
273+ helmify : $(HELMIFY ) # # Download helmify locally if necessary.
274+ $(HELMIFY ) : $(LOCALBIN )
275+ $(call go-install-tool,$(HELMIFY ) ,github.com/arttor/helmify/cmd/helmify,$(HELMIFY_VERSION ) )
276+
268277# go-install-tool will 'go install' any package with custom target and name of binary, if it doesn't exist
269278# $1 - target path with name of binary (ideally with version)
270279# $2 - package url which can be installed
@@ -367,3 +376,44 @@ catalog-push: ## Push a catalog image.
367376.PHONY : related-image-fs
368377related-image-fs : envsubst
369378 FS_IMG=$(FS_IMG ) CJ_IMG=$(CJ_IMG ) $(ENVSUBST ) < config/default/related_image_fs_patch.tmpl > config/default/related_image_fs_patch.yaml
379+
380+ # #@ Helm chart (operator)
381+
382+ .PHONY : chart-verify-crd
383+ chart-verify-crd : # # Verify Helm chart CRD matches generated CRD (ignoring Helm gate)
384+ @diff -u \
385+ <( grep -v ' ^{{-' ../charts/feast-operator/templates/crd.yaml | sed ' /^---$$/d;/^[[:space:]]*$$/d' ) \
386+ <( sed ' /^---$$/d;/^[[:space:]]*$$/d' config/crd/bases/feast.dev_featurestores.yaml)
387+
388+ .PHONY : chart-sync-crd
389+ chart-sync-crd : # # Sync generated CRD into Helm chart (wrapped in Values.crds.install)
390+ @{ \
391+ echo " {{- if .Values.crds.install }}" ; \
392+ echo ; \
393+ cat config/crd/bases/feast.dev_featurestores.yaml; \
394+ echo ; \
395+ echo " {{- end }}" ; \
396+ } > ../charts/feast-operator/templates/crd.yaml
397+
398+ .PHONY : chart-verify
399+ chart-verify : chart-verify-crd # # Aggregate chart checks (extend as needed)
400+
401+ # #@ Dynamic Helm chart generation
402+
403+ HELM_CHART_DIR ?= ../charts
404+ HELM_CHART_NAME ?= feast-operator
405+
406+ .PHONY : helm-generate
407+ helm-generate : kustomize helmify related-image-fs # # Generate Helm chart dynamically from kustomize output
408+ @echo " Generating dynamic Helm chart..."
409+ @rm -rf $(HELM_CHART_DIR ) /$(HELM_CHART_NAME )
410+ $(KUSTOMIZE ) build config/default | $(HELMIFY ) -crd-dir $(HELM_CHART_NAME )
411+ @mv $(HELM_CHART_NAME ) $(HELM_CHART_DIR ) /
412+ @echo " Dynamic Helm chart generated at $( HELM_CHART_DIR) /$( HELM_CHART_NAME) "
413+ @echo " Chart replaces the manually maintained chart - review and commit changes"
414+
415+ .PHONY : helm-package
416+ helm-package : helm-generate # # Package the dynamically generated Helm chart
417+ @echo " Packaging Helm chart..."
418+ @helm package $(HELM_CHART_DIR ) /$(HELM_CHART_NAME ) --destination ./dist/
419+ @echo " Helm chart packaged in ./dist/"
0 commit comments