cw-infra-apps/grafana/charts/feature-integrations/Makefile

88 lines
3.7 KiB
Makefile

HAS_HELM_DOCS := $(shell command -v helm-docs;)
HAS_HELM_UNITTEST := $(shell helm plugin list | grep unittest 2> /dev/null)
SCHEMA_MODS_JSON_FILES = $(shell find schema-mods -name "*.json")
SCHEMA_MODS_JQ_FILES = $(shell find schema-mods -name "*.jq")
INTEGRATION_VALUES_FILES = $(shell find integrations -name "*-values.yaml" | sort -u)
INTEGRATION_DOCS_FILES = $(INTEGRATION_VALUES_FILES:integrations/%-values.yaml=./docs/integrations/%.md)
INTEGRATION_SCHEMA_FILES = $(INTEGRATION_VALUES_FILES:integrations/%-values.yaml=./schema-mods/definitions/%-integration.schema.json)
templates/secrets/_helpers.tpl: ../../templates/secrets/_helpers.tpl
cp $< $@
templates/secrets/_secret.alloy.tpl: ../../templates/secrets/_secret.alloy.tpl
cp $< $@
Chart.lock: Chart.yaml
helm dependency update .
touch Chart.lock # Ensure the timestamp is updated
.SECONDEXPANSION:
docs/integrations/%.md: integrations/%-values.yaml $$(wildcard docs/integrations/.doc_templates/%.gotmpl)
docker run --platform linux/amd64 --rm -v $(shell pwd):/src ghcr.io/grafana/helm-docs-and-schema-gen $(shell echo $< | sed 's/integrations\/\([-a-z]*\)-values.yaml/\1/') integration
schema-mods/definitions/%-integration.schema.json: integrations/%-values.yaml
docker run --platform linux/amd64 --rm -v $(shell pwd):/src ghcr.io/grafana/helm-docs-and-schema-gen $(shell echo $< | sed 's/integrations\/\([-a-z]*\)-values.yaml/\1/') integration
NUMBER_OF_INTEGRATION_VALUES_FILES := $(words $(INTEGRATION_VALUES_FILES))
schema-mods/integration-list.json: $(INTEGRATION_VALUES_FILES)
@echo '{' > $@
@echo ' "definitions": {' >> $@
@echo ' "integration-list": {' >> $@
@echo ' "type": "array",' >> $@
@echo ' "items": {' >> $@
@echo ' "anyOf": [' >> $@
@count=0; \
for file in $(INTEGRATION_VALUES_FILES); do \
count=$$((count + 1)); \
if [ $$count -eq $(NUMBER_OF_INTEGRATION_VALUES_FILES) ]; then \
echo ' { "$$ref": "#/definitions/'$$(echo $${file} | sed 's/integrations\/\([-a-z]*\)-values.yaml/\1/')'-integration"}' >> $@; \
else \
echo ' { "$$ref": "#/definitions/'$$(echo $${file} | sed 's/integrations\/\([-a-z]*\)-values.yaml/\1/')'-integration"},' >> $@; \
fi; \
done
@echo ' ]' >> $@
@echo ' }' >> $@
@echo ' }' >> $@
@echo ' }' >> $@
@echo '}' >> $@
templates/_integration_types.tpl: $(INTEGRATION_VALUES_FILES)
echo '{{/* Do not edit this file. It is generated by the Makefile */}}' > $@
echo '{{- define "integrations.types" -}}' >> $@
for file in $(INTEGRATION_VALUES_FILES); do \
echo - $$(echo $${file} | sed 's/integrations\/\([-a-z]*\)-values.yaml/\1/') >> $@; \
done
echo '{{- end -}}' >> $@
values.schema.json: values.yaml $(INTEGRATION_SCHEMA_FILES) $(SCHEMA_MODS_JSON_FILES) $(SCHEMA_MODS_JQ_FILES) schema-mods/integration-list.json
../../../../scripts/schema-gen.sh .
README.md: values.yaml Chart.yaml $$(wildcard README.md.gotmpl)
ifdef HAS_HELM_DOCS
helm-docs
else
docker run --rm --volume "$(shell pwd):/helm-docs" -u $(shell id -u) jnorwood/helm-docs:latest
endif
.PHONY: clean
clean:
rm -f README.md values.schema.json schema-mods/integration-list.json templates/_integration_types.tpl templates/secrets/_helpers.tpl templates/secrets/_secret.alloy.tpl
rm -f $(INTEGRATION_SCHEMA_FILES)
rm -f $(INTEGRATION_DOCS_FILES)
.PHONY: build
build: README.md $(INTEGRATION_DOCS_FILES) Chart.lock values.schema.json templates/_integration_types.tpl templates/secrets/_helpers.tpl templates/secrets/_secret.alloy.tpl
.PHONY: test
test: build
helm lint .
ct lint --lint-conf ../../../../.configs/lintconf.yaml --helm-dependency-extra-args=--skip-refresh --charts .
ifdef HAS_HELM_UNITTEST
helm unittest .
else
docker run --rm --volume $(shell pwd):/apps helmunittest/helm-unittest:3.17.0-0.7.1 .
endif