diff --git a/Makefile.common b/Makefile.common index eaee9f0b..c9d83237 100644 --- a/Makefile.common +++ b/Makefile.common @@ -36,17 +36,28 @@ pkgs = ./... PREFIX ?= $(shell pwd) BIN_DIR ?= $(shell pwd) DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD)) +DOCKER_REPO ?= prom .PHONY: all all: style staticcheck unused build test -.PHONY: style -style: - @echo ">> checking code style" - ! $(GOFMT) -d $$(find . -path ./vendor -prune -o -name '*.go' -print) | grep '^' +# This rule is used to forward a target like "build" to "common-build". This +# allows a new "build" target to be defined in a Makefile which includes this +# one and override "common-build" without override warnings. +%: common-% ; -.PHONY: check_license -check_license: +.PHONY: common-style +common-style: + @echo ">> checking code style" + @fmtRes=$$($(GOFMT) -d $$(find . -path ./vendor -prune -o -name '*.go' -print)); \ + if [ -n "$${fmtRes}" ]; then \ + echo "gofmt checking failed!"; echo "$${fmtRes}"; echo; \ + echo "Please ensure you are using $$($(GO) version) for formatting code."; \ + exit 1; \ + fi + +.PHONY: common-check_license +common-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; \ @@ -56,49 +67,57 @@ check_license: exit 1; \ fi -.PHONY: test-short -test-short: +.PHONY: common-test-short +common-test-short: @echo ">> running short tests" $(GO) test -short $(pkgs) -.PHONY: test -test: +.PHONY: common-test +common-test: @echo ">> running all tests" $(GO) test -race $(pkgs) -.PHONY: format -format: +.PHONY: common-format +common-format: @echo ">> formatting code" $(GO) fmt $(pkgs) -.PHONY: vet -vet: +.PHONY: common-vet +common-vet: @echo ">> vetting code" $(GO) vet $(pkgs) -.PHONY: staticcheck -staticcheck: $(STATICCHECK) +.PHONY: common-staticcheck +common-staticcheck: $(STATICCHECK) @echo ">> running staticcheck" $(STATICCHECK) -ignore "$(STATICCHECK_IGNORE)" $(pkgs) -.PHONY: unused -unused: $(GOVENDOR) +.PHONY: common-unused +common-unused: $(GOVENDOR) @echo ">> running check for unused packages" @$(GOVENDOR) list +unused | grep . && exit 1 || echo 'No unused packages' -.PHONY: build -build: promu +.PHONY: common-build +common-build: promu @echo ">> building binaries" $(PROMU) build --prefix $(PREFIX) -.PHONY: tarball -tarball: promu +.PHONY: common-tarball +common-tarball: promu @echo ">> building release tarball" $(PROMU) tarball --prefix $(PREFIX) $(BIN_DIR) -.PHONY: docker -docker: - docker build -t "$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" . +.PHONY: common-docker +common-docker: + docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" . + +.PHONY: common-docker-publish +common-docker-publish: + docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)" + +.PHONY: common-docker-tag-latest +common-docker-tag-latest: + docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):latest" .PHONY: promu promu: