stamm/dep_radar

View on GitHub
Makefile

Summary

Maintainability
Test Coverage
# SHELL := /bin/sh
LAST_GOPATH_DIR:=$(lastword $(subst :, ,$(GOPATH)))
GOBIN:=$(LAST_GOPATH_DIR)/bin
TEST_ARGS?=
MIN_GO_VERSION:=1.9
DEP_VERSION=v0.4.1
DEP_BIN=$(GOPATH)/bin/dep-$(DEP_VERSION)
TMP_DIR=tmp/
COVERAGE_FILE=$(TMP_DIR)coverage.txt
PKGS=$(shell go list -f '{{if len .TestGoFiles}}test-{{.ImportPath}}{{end}}' ./...)
RELEASE?=no_version

PARALLEL_COUNT?=$(shell getconf _NPROCESSORS_ONLN) #CPU cores

APP?=dep_radar
CONTAINER_IMAGE?=docker.io/stamm/${APP}
APP_BIN=$(GOPATH)/bin/$(APP)

GOMETALINTER_BIN:=$(GOBIN)/gometalinter.v2
GOLINT_BIN:=$(GOBIN)/golint

GO_BINDATA_BIN=$(GOPATH)/bin/go-bindata


UNAME_S=$(shell uname -s)
ifeq ($(UNAME_S),Linux)
    OS=linux
endif
ifeq ($(UNAME_S),Darwin)
    OS=darwin
endif
UNAME_M=$(shell uname -m)
ARCH=386
ifeq ($(UNAME_M),x86_64)
    ARCH=amd64
endif
# GOVER:=$(shell go version | cut -f3 -d " " | sed 's/go//')
# IS_DESIRE_VERSION = $(shell expr $(GOVER) \>= $(MIN_GO_VERSION))
# ifeq ($(IS_DESIRE_VERSION),0)
# $(error You have go version $(GOVER), need at least $(MIN_GO_VERSION))
# endif

.PHONY: generate
generate:
    go generate $(TEST_ARGS) ./...

.PHONY: dep_install
dep_install: $(DEP_BIN)

$(DEP_BIN):
    curl -L -o $(DEP_BIN) "https://github.com/golang/dep/releases/download/$(DEP_VERSION)/dep-$(OS)-$(ARCH)"
    chmod +x $(DEP_BIN)

.PHONY: deps
deps: vendor/touch

vendor/touch: $(DEP_BIN) Gopkg.toml Gopkg.lock
    $(DEP_BIN) ensure
    touch $@

.PHONY: bindata
bindata:
    @$(MAKE) -B html/templates/bindata.go

html/templates/bindata.go: html/templates/*.html $(GO_BINDATA_BIN)
    $(GO_BINDATA_BIN) -o "./$@" -ignore "\.go" -pkg "templates" ./html/templates/

$(GO_BINDATA_BIN):
    go get -u github.com/jteeuwen/go-bindata/...

.PHONY: build
build: $(APP_BIN)

$(APP_BIN): vendor/touch html/templates/bindata.go
    go build -ldflags="-s -w" -o $@ $(GOPATH)/src/github.com/stamm/dep_radar/cmd/dep_radar/main.go

run: html/templates/bindata.go
    go run ./cmd/dep_radar/main.go


### RELEASE
release: mkdir_release
    git tag $(RELEASE)
    git push --tags
    @$(MAKE) -B -j3 tmp/release/$(RELEASE)/$(APP)-darwin-amd64.tar.gz tmp/release/$(RELEASE)/$(APP)-linux-amd64.tar.gz docker_latest

build_release: mkdir_release
    @$(MAKE) -B -j3 tmp/release/$(RELEASE)/$(APP)-darwin-amd64.tar.gz tmp/release/$(RELEASE)/$(APP)-linux-amd64.tar.gz

.PHONY: mkdir_release
mkdir_release:
    mkdir -p tmp/release/$(RELEASE)
    rm -rf tmp/release/*

tmp/release/$(RELEASE)/$(APP)-darwin-amd64:
    env GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w" -o $@ ./cmd/dep_radar/main.go

tmp/release/$(RELEASE)/$(APP)-darwin-amd64.tar.gz: tmp/release/$(RELEASE)/$(APP)-darwin-amd64
    tar -czf $@ tmp/release/$(RELEASE)/$(APP)-darwin-amd64

tmp/release/$(RELEASE)/$(APP)-linux-amd64:
    env GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o $@ ./cmd/dep_radar/main.go

tmp/release/$(RELEASE)/$(APP)-linux-amd64.tar.gz: tmp/release/$(RELEASE)/$(APP)-linux-amd64
    tar -czf $@ tmp/release/$(RELEASE)/$(APP)-linux-amd64

### DOCKER IMAGES
.PHONY: docker_build
docker_build:
    docker build -t $(CONTAINER_IMAGE):$(RELEASE) .

.PHONY: docker_push
docker_push: docker_build
    docker push $(CONTAINER_IMAGE):$(RELEASE)

.PHONY: docker_latest
docker_latest: docker_push
    docker tag $(CONTAINER_IMAGE):$(RELEASE) $(CONTAINER_IMAGE):latest
    docker push $(CONTAINER_IMAGE):latest



### TESTS
.PHONY: test
test: vendor/touch
    env GOGC=off go test $(TEST_ARGS) ./...

.PHONY: test
test-race:
    env GOGC=off CGO_ENABLED=1 go test -race $(TEST_ARGS) ./...

.PHONY: coverage
coverage: $(TMP_DIR) vendor/touch
    env CGO_ENABLED=1 go test -race -coverprofile=$(COVERAGE_FILE) -covermode=atomic ./...

$(TMP_DIR):
    mkdir -p $(TMP_DIR)



### LINTERS
## install gometalinter
$(GOMETALINTER_BIN):
    go get -u gopkg.in/alecthomas/gometalinter.v2

$(GOLINT_BIN):
    go get -u golang.org/x/lint/golint

lint: $(GOLINT_BIN) $(GOMETALINTER_BIN) | $(TEST_TMP_DIR)
    $(GOMETALINTER_BIN) --no-config --disable-all --enable=golint --deadline=5m -e "html/templates/bindata.go" -e "^vendor/" ./...