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