2018-04-19 12:07:10 +03:00
# Copyright 2018 The Prometheus Authors
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# A common Makefile that includes rules to be reused in different prometheus projects.
# !!! Open PRs only against the prometheus/prometheus/Makefile.common repository!
# Example usage :
# Create the main Makefile in the root project directory.
# include Makefile.common
# customTarget:
# @echo ">> Runnig customTarget"
#
# Ensure GOBIN is not set during build so that promu is installed to the correct path
u n export GOBIN
GO ?= go
GOFMT ?= $( GO) fmt
FIRST_GOPATH := $( firstword $( subst :, ,$( shell $( GO) env GOPATH) ) )
PROMU := $( FIRST_GOPATH) /bin/promu
STATICCHECK := $( FIRST_GOPATH) /bin/staticcheck
GOVENDOR := $( FIRST_GOPATH) /bin/govendor
2018-04-19 13:38:01 +03:00
pkgs = ./...
2018-04-19 12:07:10 +03:00
PREFIX ?= $( shell pwd )
BIN_DIR ?= $( shell pwd )
DOCKER_IMAGE_TAG ?= $( subst /,-,$( shell git rev-parse --abbrev-ref HEAD) )
all : format staticcheck unused build test
style :
@echo ">> checking code style"
! $( GOFMT) -d $$ ( find . -path ./vendor -prune -o -name '*.go' -print) | grep '^'
check_license :
@echo ">> checking license header"
@licRes= $$ ( for file in $$ ( find . -type f -iname '*.go' ! -path './vendor/*' ) ; do \
awk 'NR<=3' $$ file | grep -Eq "(Copyright|generated|GENERATED)" || echo $$ file; \
done ) ; \
if [ -n " $$ {licRes} " ] ; then \
echo "license header checking failed:" ; echo " $$ {licRes} " ; \
exit 1; \
fi
test-short :
@echo ">> running short tests"
$( GO) test -short $( pkgs)
test :
@echo ">> running all tests"
$( GO) test -race $( pkgs)
format :
@echo ">> formatting code"
$( GO) fmt $( pkgs)
vet :
@echo ">> vetting code"
$( GO) vet $( pkgs)
staticcheck : $( STATICCHECK )
@echo ">> running staticcheck"
$( STATICCHECK) -ignore " $( STATICCHECK_IGNORE) " $( pkgs)
unused : $( GOVENDOR )
@echo ">> running check for unused packages"
@$( GOVENDOR) list +unused
build : promu
@echo ">> building binaries"
$( PROMU) build --prefix $( PREFIX)
tarball : promu
@echo ">> building release tarball"
$( PROMU) tarball --prefix $( PREFIX) $( BIN_DIR)
docker :
docker build -t " $( DOCKER_IMAGE_NAME) : $( DOCKER_IMAGE_TAG) " .
promu :
GOOS = GOARCH = $( GO) get -u github.com/prometheus/promu
$(FIRST_GOPATH)/bin/staticcheck :
GOOS = GOARCH = $( GO) get -u honnef.co/go/tools/cmd/staticcheck
$(FIRST_GOPATH)/bin/govendor :
GOOS = GOARCH = $( GO) get -u github.com/kardianos/govendor
.PHONY : all style check_license format build test vet assets tarball docker promu staticcheck $( FIRST_GOPATH ) /bin /staticcheck govendor $( FIRST_GOPATH ) /bin /govendor