|
| 1 | +##@ Helm Chart build targets |
| 2 | + |
| 3 | +HELM_CHART_DIR = ./charts/kubernetes-mcp-server |
| 4 | +HELM_CHART_VERSION = $(shell grep '^version:' $(HELM_CHART_DIR)/Chart.yaml | awk '{print $$2}') |
| 5 | +HELM_PACKAGE_DIR = ./_output/helm-packages |
| 6 | +HELM_REGISTRY ?= ghcr.io |
| 7 | +HELM_REGISTRY_ORG ?= containers |
| 8 | +HELM_CHART_NAME = kubernetes-mcp-server |
| 9 | + |
| 10 | +KUBECONFORM = $(shell pwd)/_output/tools/bin/kubeconform |
| 11 | +KUBECONFORM_VERSION ?= latest |
| 12 | + |
| 13 | +CLEAN_TARGETS += $(HELM_PACKAGE_DIR) |
| 14 | + |
| 15 | +.PHONY: helm-lint |
| 16 | +helm-lint: ## Lint the Helm chart |
| 17 | + helm lint $(HELM_CHART_DIR) |
| 18 | + |
| 19 | +.PHONY: helm-template |
| 20 | +helm-template: ## Render Helm chart templates (dry run) |
| 21 | + helm template test-release $(HELM_CHART_DIR) --set ingress.host=localhost --debug |
| 22 | + |
| 23 | +# Download and install kubeconform if not already installed |
| 24 | +.PHONY: kubeconform |
| 25 | +kubeconform: |
| 26 | + @[ -f $(KUBECONFORM) ] || { \ |
| 27 | + set -e ;\ |
| 28 | + echo "Installing kubeconform to $(KUBECONFORM)..." ;\ |
| 29 | + mkdir -p $(shell dirname $(KUBECONFORM)) ;\ |
| 30 | + TMPDIR=$$(mktemp -d) ;\ |
| 31 | + curl -L https://github.com/yannh/kubeconform/releases/$(KUBECONFORM_VERSION)/download/kubeconform-$(shell uname -s | tr '[:upper:]' '[:lower:]')-$(shell uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz | tar xz -C $$TMPDIR ;\ |
| 32 | + mv $$TMPDIR/kubeconform $(KUBECONFORM) ;\ |
| 33 | + rm -rf $$TMPDIR ;\ |
| 34 | + } |
| 35 | + |
| 36 | +.PHONY: helm-validate |
| 37 | +helm-validate: kubeconform ## Validate Helm chart manifests with kubeconform |
| 38 | + helm template test-release $(HELM_CHART_DIR) --set ingress.host=localhost | $(KUBECONFORM) -strict -summary -ignore-missing-schemas |
| 39 | + |
| 40 | +.PHONY: helm-package |
| 41 | +helm-package: helm-lint helm-template ## Package the Helm chart |
| 42 | + @mkdir -p $(HELM_PACKAGE_DIR) |
| 43 | + @echo "Updating appVersion to $(GIT_TAG_VERSION)..." |
| 44 | + @sed -i.bak "s/appVersion: .*/appVersion: \"$(GIT_TAG_VERSION)\"/" $(HELM_CHART_DIR)/Chart.yaml |
| 45 | + @echo "Updated Chart.yaml:" |
| 46 | + @cat $(HELM_CHART_DIR)/Chart.yaml |
| 47 | + helm package $(HELM_CHART_DIR) --destination $(HELM_PACKAGE_DIR) |
| 48 | + @mv $(HELM_CHART_DIR)/Chart.yaml.bak $(HELM_CHART_DIR)/Chart.yaml |
| 49 | + |
| 50 | +.PHONY: helm-push |
| 51 | +helm-push: helm-package ## Push Helm chart to OCI registry (assumes helm registry login has been performed) |
| 52 | + @chart_package=$$(ls $(HELM_PACKAGE_DIR)/$(HELM_CHART_NAME)-*.tgz 2>/dev/null | head -n 1); \ |
| 53 | + if [ -z "$$chart_package" ]; then echo "Error: No chart package found in $(HELM_PACKAGE_DIR)"; exit 1; fi; \ |
| 54 | + echo "Pushing chart package: $$chart_package"; \ |
| 55 | + helm push "$$chart_package" oci://$(HELM_REGISTRY)/$(HELM_REGISTRY_ORG)/charts |
| 56 | + |
| 57 | + |
| 58 | +.PHONY: helm-verify |
| 59 | +helm-verify: ## Verify chart installation from OCI registry |
| 60 | + @echo "Testing chart template rendering from OCI registry..." |
| 61 | + helm template test-install oci://$(HELM_REGISTRY)/$(HELM_REGISTRY_ORG)/charts/$(HELM_CHART_NAME) \ |
| 62 | + --set ingress.host=localhost --version $(HELM_CHART_VERSION) --debug |
| 63 | + |
| 64 | +.PHONY: helm-publish |
| 65 | +helm-publish: helm-package helm-push helm-verify ## Package, push, and verify Helm chart release |
| 66 | + @echo "Helm chart $(HELM_CHART_NAME) version $(HELM_CHART_VERSION) published successfully" |
| 67 | + |
| 68 | +# Print the Helm chart version |
| 69 | +.PHONY: helm-print-chart-version |
| 70 | +helm-print-chart-version: |
| 71 | + @echo $(HELM_CHART_VERSION) |
| 72 | + |
| 73 | +# Print the Helm chart name |
| 74 | +.PHONY: helm-print-chart-name |
| 75 | +helm-print-chart-name: |
| 76 | + @echo $(HELM_CHART_NAME) |
| 77 | + |
| 78 | +# Print the Helm registry |
| 79 | +.PHONY: helm-print-registry |
| 80 | +helm-print-registry: |
| 81 | + @echo $(HELM_REGISTRY) |
0 commit comments