Makefile (4437B)
1 SHELL := $(shell which bash) 2 3 ## BOF define block 4 5 BINARIES := pluralize 6 BINARY = $(word 1, $@) 7 8 PLATFORMS := windows linux darwin 9 PLATFORM = $(word 1, $@) 10 11 ROOT_DIR := $(shell git rev-parse --show-toplevel) 12 BIN_DIR := $(ROOT_DIR)/bin 13 REL_DIR := $(ROOT_DIR)/release 14 SRC_DIR := $(ROOT_DIR)/cmd 15 INC_DIR := $(ROOT_DIR)/include 16 TMP_DIR := $(ROOT_DIR)/tmp 17 18 VERSION :=`git describe --tags 2>/dev/null` 19 COMMIT :=`git rev-parse --short HEAD 2>/dev/null` 20 DATE :=`date "+%FT%T%z"` 21 22 LDBASE := github.com/gertd/go-pluralize/pkg/version 23 LDFLAGS := -ldflags "-w -s -X $(LDBASE).ver=${VERSION} -X $(LDBASE).date=${DATE} -X $(LDBASE).commit=${COMMIT}" 24 25 GOARCH ?= amd64 26 GOOS ?= $(shell go env GOOS) 27 28 LINTER := $(BIN_DIR)/golangci-lint 29 LINTVERSION:= v1.27.0 30 31 TESTRUNNER := $(BIN_DIR)/gotestsum 32 TESTVERSION:= v0.5.0 33 34 PROTOC := $(BIN_DIR)/protoc 35 PROTOCVER := 3.12.3 36 37 NO_COLOR :=\033[0m 38 OK_COLOR :=\033[32;01m 39 ERR_COLOR :=\033[31;01m 40 WARN_COLOR :=\033[36;01m 41 ATTN_COLOR :=\033[33;01m 42 43 ## EOF define block 44 45 .PHONY: all 46 all: deps gen build test lint 47 48 deps: 49 @echo -e "$(ATTN_COLOR)==> $@ $(NO_COLOR)" 50 @GO111MODULE=on go mod download 51 52 .PHONY: gen 53 gen: deps $(BIN_DIR) 54 @echo -e "$(ATTN_COLOR)==> $@ $(NO_COLOR)" 55 @go generate ./... 56 57 .PHONY: dobuild 58 dobuild: 59 @echo -e "$(ATTN_COLOR)==> $@ $(B) GOOS=$(P) GOARCH=$(GOARCH) VERSION=$(VERSION) COMMIT=$(COMMIT) DATE=$(DATE) $(NO_COLOR)" 60 @GOOS=$(P) GOARCH=$(GOARCH) GO111MODULE=on go build $(LDFLAGS) -o $(T)/$(P)-$(GOARCH)/$(B)$(if $(findstring $(P),windows),".exe","") $(SRC_DIR)/$(B) 61 ifneq ($(P),windows) 62 @chmod +x $(T)/$(P)-$(GOARCH)/$(B) 63 endif 64 65 .PHONY: build 66 build: $(BIN_DIR) deps 67 @echo -e "$(ATTN_COLOR)==> $@ $(NO_COLOR)" 68 @for b in ${BINARIES}; \ 69 do \ 70 $(MAKE) dobuild B=$${b} P=${GOOS} T=${BIN_DIR}; \ 71 done 72 73 .PHONY: doinstall 74 doinstall: 75 @echo -e "$(ATTN_COLOR)==> $@ $(B) GOOS=$(P) GOARCH=$(GOARCH) VERSION=$(VERSION) COMMIT=$(COMMIT) DATE=$(DATE) $(NO_COLOR)" 76 @GOOS=$(P) GOARCH=$(GOARCH) GO111MODULE=on go install $(LDFLAGS) $(SRC_DIR)/$(B) 77 78 .PHONY: install 79 install: 80 @echo -e "$(ATTN_COLOR)==> $@ $(NO_COLOR)" 81 @for b in ${BINARIES}; \ 82 do \ 83 $(MAKE) doinstall B=$${b} P=${GOOS}; \ 84 done 85 86 .PHONY: dorelease 87 dorelease: 88 @echo -e "$(ATTN_COLOR)==> $@ build GOOS=$(P) GOARCH=$(GOARCH) VERSION=$(VERSION) COMMIT=$(COMMIT) DATE=$(DATE) $(NO_COLOR)" 89 @GOOS=$(P) GOARCH=$(GOARCH) GO111MODULE=on go build $(LDFLAGS) -o $(T)/$(P)-$(GOARCH)/$(B)$(if $(findstring $(P),windows),".exe","") $(SRC_DIR)/$(B) 90 ifneq ($(P),windows) 91 @chmod +x $(T)/$(P)-$(GOARCH)/$(B) 92 endif 93 @echo -e "$(ATTN_COLOR)==> $@ zip $(B)-$(P)-$(GOARCH).zip $(NO_COLOR)" 94 @zip -j $(T)/$(P)-$(GOARCH)/$(B)-$(P)-$(GOARCH).zip $(T)/$(P)-$(GOARCH)/$(B)$(if $(findstring $(P),windows),".exe","") >/dev/null 95 96 .PHONY: release 97 release: $(REL_DIR) 98 @echo -e "$(ATTN_COLOR)==> $@ $(NO_COLOR)" 99 @for b in ${BINARIES}; \ 100 do \ 101 for p in ${PLATFORMS}; \ 102 do \ 103 $(MAKE) dorelease B=$${b} P=$${p} T=${REL_DIR}; \ 104 done; \ 105 done \ 106 107 $(TESTRUNNER): 108 @echo -e "$(ATTN_COLOR)==> get $@ $(NO_COLOR)" 109 @GOBIN=$(BIN_DIR) go get -u gotest.tools/gotestsum 110 111 .PHONY: test 112 test: $(TESTRUNNER) 113 @echo -e "$(ATTN_COLOR)==> $@ $(NO_COLOR)" 114 @CGO_ENABLED=0 $(BIN_DIR)/gotestsum --format short-verbose -- -count=1 -v $(ROOT_DIR)/... 115 116 $(LINTER): 117 @echo -e "$(ATTN_COLOR)==> get $@ $(NO_COLOR)" 118 @curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s $(LINTVERSION) 119 120 .PHONY: lint 121 lint: $(LINTER) 122 @echo -e "$(ATTN_COLOR)==> $@ $(NO_COLOR)" 123 @CGO_ENABLED=0 $(LINTER) run --enable-all 124 @echo -e "$(NO_COLOR)\c" 125 126 .PHONY: doclean 127 doclean: 128 @echo -e "$(ATTN_COLOR)==> $@ $(B) GOOS=$(P) $(NO_COLOR)" 129 @if [ -a $(GOPATH)/bin/$(B)$(if $(findstring $(P),windows),".exe","") ];\ 130 then \ 131 rm $(GOPATH)/bin/$(B)$(if $(findstring $(P),windows),".exe",""); \ 132 fi 133 134 .PHONY: clean 135 clean: 136 @echo -e "$(ATTN_COLOR)==> $@ $(NO_COLOR)" 137 @rm -rf $(BIN_DIR) 138 @rm -rf $(REL_DIR) 139 @go clean 140 @for b in ${BINARIES}; \ 141 do \ 142 $(MAKE) doclean B=$${b} P=${GOOS}; \ 143 done 144 145 $(REL_DIR): 146 @echo -e "$(ATTN_COLOR)==> create REL_DIR $(REL_DIR) $(NO_COLOR)" 147 @mkdir -p $(REL_DIR) 148 149 $(BIN_DIR): 150 @echo -e "$(ATTN_COLOR)==> create BIN_DIR $(BIN_DIR) $(NO_COLOR)" 151 @mkdir -p $(BIN_DIR)