@@ -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