.PHONY: all test lint coverage ci get build clean ifneq ($(V),1) Q := @ NQMAKE := $(MAKE) --no-print-directory MAKE := $(Q)$(MAKE) --no-print-directory endif GOPATH := $(shell go env GOPATH) GOLANGCI_LINT_VERSION ?= 1.16.0 PACKAGE ?= yes VERSION_PACKAGE ?= main PROJECT_NAME ?= unknown-project BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD) mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) current_dir := $(patsubst %/,%,$(dir $(mkfile_path))) TARGETS := $(shell go list ./... | grep -v /vendor/) all: test ci: $(MAKE) get $(MAKE) lint $(MAKE) test $(MAKE) coverage $(MAKE) build ifeq ($(PACKAGE),yes) $(MAKE) deb $(MAKE) dist endif clean: $(Q)rm -rf build $(Q)rm -f *.deb VERSION := $(shell go run $(GOPATH)/src/src.dualinventive.com/go/common/version/main.go) LDFLAGS := -X $(VERSION_PACKAGE).ApplicationVersion=$(VERSION) -X $(VERSION_PACKAGE).ApplicationName=$(PROJECT_NAME) test: $(Q)echo " == Running go test ==" $(Q)go test -v -race $(TARGETS) build: $(Q)echo " == Running go build ==" $(Q)for i in $(TARGETS); do cd $(GOPATH)/src/$$i;go build -ldflags="-s -w $(LDFLAGS)" -v;cd ->/dev/null; done get: $(Q)echo " == Running go get ==" $(Q)go get -t -v $(TARGETS) lint: build/golangci-lint $(Q)echo " == Running golangci-lint ==" $(Q)bash -c "./build/golangci-lint run --config=$(GOPATH)/src/src.dualinventive.com/go/common/golangci.yml | tee build/golint.log; test \$${PIPESTATUS[0]} -eq 0" build/golangci-lint: $(Q)mkdir -p build $(Q)echo " == Downloading golangci-lint ==" $(Q)curl -sL https://github.com/golangci/golangci-lint/releases/download/v$(GOLANGCI_LINT_VERSION)/golangci-lint-$(GOLANGCI_LINT_VERSION)-linux-amd64.tar.gz | tar xvz --strip-components=1 -C build coverage: $(Q)mkdir -p build $(Q)go get github.com/axw/gocov/gocov $(Q)go get github.com/AlekSi/gocov-xml $(Q)gocov test $(TARGETS) > build/coverage.json $(Q)sed -i -e 's|'$WORKSPACE'/||g' build/coverage.json $(Q)gocov-xml < build/coverage.json > build/coverage.xml dist: $(current_dir)/dist.sh %: env PROJECT_NAME=$(PROJECT_NAME) go run $(GOPATH)/src/src.dualinventive.com/go/common/$@/main.go