| # TODO: Fix this on windows. |
| ALL_SRC := $(shell find . -name '*.go' \ |
| -not -path './vendor/*' \ |
| -not -path '*/gen-go/*' \ |
| -type f | sort) |
| ALL_PKGS := $(shell go list $(sort $(dir $(ALL_SRC)))) |
| |
| GOTEST_OPT?=-v -race -timeout 30s |
| GOTEST_OPT_WITH_COVERAGE = $(GOTEST_OPT) -coverprofile=coverage.txt -covermode=atomic |
| GOTEST=go test |
| GOFMT=gofmt |
| GOLINT=golint |
| GOVET=go vet |
| EMBEDMD=embedmd |
| # TODO decide if we need to change these names. |
| TRACE_ID_LINT_EXCEPTION="type name will be used as trace.TraceID by other packages" |
| TRACE_OPTION_LINT_EXCEPTION="type name will be used as trace.TraceOptions by other packages" |
| README_FILES := $(shell find . -name '*README.md' | sort | tr '\n' ' ') |
| |
| .DEFAULT_GOAL := fmt-lint-vet-embedmd-test |
| |
| .PHONY: fmt-lint-vet-embedmd-test |
| fmt-lint-vet-embedmd-test: fmt lint vet embedmd test |
| |
| # TODO enable test-with-coverage in tavis |
| .PHONY: travis-ci |
| travis-ci: fmt lint vet embedmd test test-386 |
| |
| all-pkgs: |
| @echo $(ALL_PKGS) | tr ' ' '\n' | sort |
| |
| all-srcs: |
| @echo $(ALL_SRC) | tr ' ' '\n' | sort |
| |
| .PHONY: test |
| test: |
| $(GOTEST) $(GOTEST_OPT) $(ALL_PKGS) |
| |
| .PHONY: test-386 |
| test-386: |
| GOARCH=386 $(GOTEST) -v -timeout 30s $(ALL_PKGS) |
| |
| .PHONY: test-with-coverage |
| test-with-coverage: |
| $(GOTEST) $(GOTEST_OPT_WITH_COVERAGE) $(ALL_PKGS) |
| |
| .PHONY: fmt |
| fmt: |
| @FMTOUT=`$(GOFMT) -s -l $(ALL_SRC) 2>&1`; \ |
| if [ "$$FMTOUT" ]; then \ |
| echo "$(GOFMT) FAILED => gofmt the following files:\n"; \ |
| echo "$$FMTOUT\n"; \ |
| exit 1; \ |
| else \ |
| echo "Fmt finished successfully"; \ |
| fi |
| |
| .PHONY: lint |
| lint: |
| @LINTOUT=`$(GOLINT) $(ALL_PKGS) | grep -v $(TRACE_ID_LINT_EXCEPTION) | grep -v $(TRACE_OPTION_LINT_EXCEPTION) 2>&1`; \ |
| if [ "$$LINTOUT" ]; then \ |
| echo "$(GOLINT) FAILED => clean the following lint errors:\n"; \ |
| echo "$$LINTOUT\n"; \ |
| exit 1; \ |
| else \ |
| echo "Lint finished successfully"; \ |
| fi |
| |
| .PHONY: vet |
| vet: |
| # TODO: Understand why go vet downloads "github.com/google/go-cmp v0.2.0" |
| @VETOUT=`$(GOVET) ./... | grep -v "go: downloading" 2>&1`; \ |
| if [ "$$VETOUT" ]; then \ |
| echo "$(GOVET) FAILED => go vet the following files:\n"; \ |
| echo "$$VETOUT\n"; \ |
| exit 1; \ |
| else \ |
| echo "Vet finished successfully"; \ |
| fi |
| |
| .PHONY: embedmd |
| embedmd: |
| @EMBEDMDOUT=`$(EMBEDMD) -d $(README_FILES) 2>&1`; \ |
| if [ "$$EMBEDMDOUT" ]; then \ |
| echo "$(EMBEDMD) FAILED => embedmd the following files:\n"; \ |
| echo "$$EMBEDMDOUT\n"; \ |
| exit 1; \ |
| else \ |
| echo "Embedmd finished successfully"; \ |
| fi |
| |
| .PHONY: install-tools |
| install-tools: |
| go get -u golang.org/x/tools/cmd/cover |
| go get -u golang.org/x/lint/golint |
| go get -u github.com/rakyll/embedmd |