src.dualinventive.com/go/common/Makefile

76 lines
2.1 KiB
Makefile

.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