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.*