github.com/mgoltzsche/khelm@v1.0.1/Makefile (about) 1 IMAGE ?= mgoltzsche/khelm:latest 2 3 BUILD_DIR := $(CURDIR)/build 4 BIN_DIR := $(BUILD_DIR)/bin 5 KHELM := $(BIN_DIR)/khelm 6 GOLANGCI_LINT = $(BIN_DIR)/golangci-lint 7 GORELEASER = $(BIN_DIR)/goreleaser 8 KPT := $(BIN_DIR)/kpt 9 KUSTOMIZE := $(BIN_DIR)/kustomize 10 11 GORELEASER_VERSION ?= v0.182.1 12 GOLANGCI_LINT_VERSION ?= v1.42.1 13 KPT_VERSION ?= v0.39.2 14 KUSTOMIZE_VERSION ?= v4.1.3 15 BATS_VERSION = v1.3.0 16 17 BATS_DIR = $(BUILD_DIR)/tools/bats 18 BATS = $(BIN_DIR)/bats 19 20 REV := $(shell git rev-parse --short HEAD 2> /dev/null || echo 'unknown') 21 VERSION ?= $(shell echo "$$(git describe --exact-match --tags $(git log -n1 --pretty='%h') 2> /dev/null || echo dev)-$(REV)" | sed 's/^v//') 22 HELM_VERSION := $(shell grep k8s\.io/helm go.mod | sed -E -e 's!k8s\.io/helm|\s+|\+.*!!g; s!^v!!' | cut -d " " -f2 | grep -E .+) 23 GO_LDFLAGS := -X main.khelmVersion=$(VERSION) -X main.helmVersion=$(HELM_VERSION) -s -w -extldflags '-static' 24 BUILDTAGS ?= 25 CGO_ENABLED ?= 0 26 DOCKER ?= docker 27 28 all: clean khelm test check 29 30 khelm: 31 CGO_ENABLED=$(CGO_ENABLED) go build -o $(BUILD_DIR)/bin/khelm -ldflags "$(GO_LDFLAGS)" -tags "$(BUILDTAGS)" ./cmd/khelm 32 33 install: 34 cp $(BUILD_DIR)/bin/khelm /usr/local/bin/khelm 35 chmod +x /usr/local/bin/khelm 36 37 install-kustomize-plugin: 38 mkdir -p $${XDG_CONFIG_HOME:-$$HOME/.config}/kustomize/plugin/khelm.mgoltzsche.github.com/v1/chartrenderer 39 cp $(BUILD_DIR)/bin/khelm $${XDG_CONFIG_HOME:-$$HOME/.config}/kustomize/plugin/khelm.mgoltzsche.github.com/v1/chartrenderer/ChartRenderer 40 41 image: khelm 42 $(DOCKER) build --force-rm -t $(IMAGE) -f ./Dockerfile $(BIN_DIR) 43 44 test: $(BUILD_DIR) 45 go test -coverprofile $(BUILD_DIR)/coverage.out -cover ./... 46 47 coverage: test 48 go tool cover -html=$(BUILD_DIR)/coverage.out -o $(BUILD_DIR)/coverage.html 49 50 e2e-test: kpt kustomize | $(BATS) 51 @echo 'Running e2e tests (PATH=$(BUILD_DIR)/bin)' 52 @{ \ 53 export PATH="$(BIN_DIR):$$PATH" IMAGE=$(IMAGE); \ 54 $(BATS) -T ./e2e; \ 55 } 56 57 fmt: 58 go fmt ./... 59 60 clean: 61 rm -f $(BUILD_DIR)/bin/khelm 62 rm -f $(BUILD_DIR)/bin/khelm-static 63 rm -rf example/localrefref/charts 64 rm -rf example/kpt/linkerd/dep 65 66 clean-all: clean 67 rm -rf $(BUILD_DIR) 68 find . -name charts -type d -exec rm -rf {} \; 69 70 check: $(GOLANGCI_LINT) ## Runs linters 71 $(GOLANGCI_LINT) run ./... 72 73 snapshot: $(GORELEASER) ## Builds a snapshot release but does not publish it 74 HELM_VERSION="$(HELM_VERSION)" $(GORELEASER) release --snapshot --rm-dist 75 76 register-qemu-binfmt: ## Enable multiarch support on the host 77 $(DOCKER) run --rm --privileged multiarch/qemu-user-static:5.2.0-2 --reset -p yes 78 79 kpt: $(KPT) 80 81 kustomize: $(KUSTOMIZE) 82 83 golangci-lint: $(GOLANGCI_LINT) 84 85 goreleaser: $(GORELEASER) 86 87 $(GOLANGCI_LINT): 88 $(call go-get-tool,$(GOLANGCI_LINT),github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION)) 89 90 $(KPT): 91 $(call download-bin,$(KPT),"https://github.com/GoogleContainerTools/kpt/releases/download/$(KPT_VERSION)/kpt_$$(uname | tr '[:upper:]' '[:lower:]')_amd64") 92 93 $(KUSTOMIZE): 94 $(call go-get-tool,$(KUSTOMIZE),sigs.k8s.io/kustomize/kustomize/v4@$(KUSTOMIZE_VERSION)) 95 96 $(GORELEASER): 97 $(call go-get-tool,$(GORELEASER),github.com/goreleaser/goreleaser@$(GORELEASER_VERSION)) 98 99 $(BATS): 100 @echo Downloading bats 101 @{ \ 102 set -e ;\ 103 mkdir -p $(BIN_DIR) ;\ 104 TMP_DIR=$$(mktemp -d) ;\ 105 cd $$TMP_DIR ;\ 106 git clone -c 'advice.detachedHead=false' --branch $(BATS_VERSION) https://github.com/bats-core/bats-core.git . >/dev/null;\ 107 ./install.sh $(BATS_DIR) ;\ 108 ln -s $(BATS_DIR)/bin/bats $(BATS) ;\ 109 } 110 111 $(BUILD_DIR): 112 @mkdir -p $(BUILD_DIR)/bin 113 114 # go-get-tool will 'go get' any package $2 and install it to $1. 115 PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST)))) 116 define go-get-tool 117 @[ -f $(1) ] || { \ 118 set -e ;\ 119 TMP_DIR=$$(mktemp -d) ;\ 120 cd $$TMP_DIR ;\ 121 go mod init tmp ;\ 122 echo "Downloading $(2)" ;\ 123 GOBIN=$(PROJECT_DIR)/build/bin go get $(2) ;\ 124 rm -rf $$TMP_DIR ;\ 125 } 126 endef 127 128 # download-bin downloads a binary into the location given as first argument 129 define download-bin 130 @[ -f $(1) ] || { \ 131 set -e ;\ 132 mkdir -p `dirname $(1)` ;\ 133 TMP_FILE=$$(mktemp) ;\ 134 echo "Downloading $(2)" ;\ 135 curl -fsSLo $$TMP_FILE $(2) ;\ 136 chmod +x $$TMP_FILE ;\ 137 mv $$TMP_FILE $(1) ;\ 138 } 139 endef