github.com/kilianc/pretender@v1.7.0/Makefile (about) 1 PROJECT_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) 2 GOTESTSUM_VERSION := v1.11.0 3 GOFUMPT_VERSION := v0.6.0 4 GOLANGCI_LINT_VERSION := v1.57.2 5 RESPONSES_FILE ?= examples/example.json 6 BINARY_NAME := pretender 7 OS_LIST := darwin linux 8 ARCH_LIST := arm64 amd64 9 BUILD_TARGETS := $(foreach os,$(OS_LIST),$(foreach arch,$(ARCH_LIST),bin/$(BINARY_NAME)-$(os)-$(arch))) 10 RELEASE_TARGETS := $(foreach os,$(OS_LIST),$(foreach arch,$(ARCH_LIST),bin/$(BINARY_NAME)-$(os)-$(arch).tar.gz)) 11 12 # - install binary dependencies 13 14 bin/golangci-lint: 15 @mkdir -p $(@D) 16 GOBIN=$(PROJECT_DIR)/$(@D) go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION) 17 18 bin/gofumpt: 19 @mkdir -p $(@D) 20 GOBIN=$(PROJECT_DIR)/$(@D) go install mvdan.cc/gofumpt@$(GOFUMPT_VERSION) 21 22 bin/gotestsum: 23 @mkdir -p $(@D) 24 GOBIN=$(PROJECT_DIR)/$(@D) go install gotest.tools/gotestsum@$(GOTESTSUM_VERSION) 25 26 bin/git-chglog: 27 @mkdir -p $(@D) 28 GOBIN=$(PROJECT_DIR)/$(@D) go install github.com/git-chglog/git-chglog/cmd/git-chglog@latest 29 30 # - run, test, lint, format etc. 31 32 .PHONY: run 33 run: 34 go run cmd/$(BINARY_NAME)/main.go --responses $(RESPONSES_FILE) 35 36 .PHONY: lint 37 lint: bin/golangci-lint 38 @bin/golangci-lint run 39 40 .PHONY: format 41 format: bin/gofumpt 42 @bin/gofumpt -w . 43 44 .PHONY: test 45 test: bin/gotestsum lint 46 @echo "" 47 @cd $(PROJECT_DIR) && $(PROJECT_DIR)/bin/gotestsum --format testdox -- -coverprofile=cover.out -coverpkg=./... $(shell go list ./... | grep -v /tools/ | grep -v /cmd/) 48 49 cover.out: 50 @if [ ! -f cover.out ]; then $(MAKE) test; fi 51 52 cover.txt: cover.out 53 @cd $(PROJECT_DIR) && go tool cover -func=cover.out -o cover.txt 54 55 .PHONY: open-cover 56 open-cover: cover.out 57 @cd $(PROJECT_DIR) && go tool cover -html=cover.out 58 59 # - build and release 60 61 .PHONY: build 62 build: $(BUILD_TARGETS) 63 64 .PHONY: $(BUILD_TARGETS) 65 $(BUILD_TARGETS): 66 @$(eval os = $(word 2, $(subst -, ,$@))) 67 @$(eval arch = $(word 3, $(subst -, ,$@))) 68 GOOS=$(os) GOARCH=$(arch) CGO_ENABLED=0 go build -ldflags "-s -w" -o $@ cmd/$(BINARY_NAME)/main.go 69 70 .PHONY: release 71 release: VERSION = $(shell go run cmd/$(BINARY_NAME)/main.go --responses $(RESPONSES_FILE) --version) 72 release: $(RELEASE_TARGETS) 73 GOPROXY=proxy.golang.org go list -m github.com/kilianc/$(BINARY_NAME)@$(VERSION) 74 75 .PHONY: $(RELEASE_TARGETS) 76 $(RELEASE_TARGETS): clean build 77 @cp $(shell echo $@ | sed s/.tar.gz//) bin/$(BINARY_NAME) 78 cd bin && tar -czf $(shell basename $@) $(BINARY_NAME) 79 @rm bin/$(BINARY_NAME) 80 81 .PHONY: docker-build 82 docker-build: 83 docker build $(PROJECT_DIR) -t $(BINARY_NAME):latest 84 85 .PHONY: docker-run 86 docker-run: docker-build 87 docker run --rm -v $(PROJECT_DIR)/$(RESPONSES_FILE):/$(RESPONSES_FILE) -p 8080:8080 $(BINARY_NAME):latest --responses /$(RESPONSES_FILE) 88 89 # - tools 90 91 .PHONY: changelog 92 changelog: bin/git-chglog 93 @git tag -l | xargs git tag -d > /dev/null 2>&1 94 @git fetch --tags > /dev/null 2>&1 95 @bin/git-chglog --no-emoji -o CHANGELOG.md --next-tag $(tag) 96 97 .PHONY: version-check 98 version-check: 99 @echo "" 100 @go run tools/versioncheck/main.go $(tag) 101 102 .PHONY: cover-check 103 cover-check: cover.txt 104 @echo "" 105 @cat cover.txt 106 @go run tools/covercheck/main.go 107 108 .PHONY: commit-check 109 commit-check: 110 @echo "" 111 @go run tools/commitcheck/main.go '$(message)' 112 113 # - clean 114 115 .PHONY: clean 116 clean: 117 rm -rf bin/* 118 rm -rf cover.*