Skip to content

Commit

Permalink
build: Makefile.
Browse files Browse the repository at this point in the history
  • Loading branch information
jwalton committed Mar 20, 2021
1 parent dd6fdbf commit 13b8151
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 4 deletions.
97 changes: 97 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
# Adapted from https://github.com/vincentbernat/hellogopher

MODULE = $(shell env GO111MODULE=on $(GO) list -m)
DATE ?= $(shell date +%FT%T%z)
VERSION ?= $(shell git describe --tags --always --dirty --match=v* | cut -c2- 2> /dev/null || \
cat $(CURDIR)/.version 2> /dev/null || echo v0)
COMMIT ?= $(shell git rev-parse HEAD)
PKGS = $(or $(PKG),$(shell env GO111MODULE=on $(GO) list ./...))
TESTPKGS = $(shell env GO111MODULE=on $(GO) list -f \
'{{ if or .TestGoFiles .XTestGoFiles }}{{ .ImportPath }}{{ end }}' \
$(PKGS))
GO_FILES := $(shell find . -name '*.go' | grep -v /vendor/)

GO = go
GOLINT = golint
GOLANGCILINT = golangci-lint
GOCOV = gocov
GOCOVXML = gocov-xml

TIMEOUT = 15
V = 0
Q = $(if $(filter 1,$V),,@)
# Prompt shown before each item
M = $(shell printf "\033[34;1m▶\033[0m")

export GO111MODULE=on

.PHONY: all
all: generate fmt lint test ## Build, format, and test

.PHONY: generate
generate: ; $(info $(M) generating source…) @ ## Generate source code
$Q go generate ./...
$Q cp ./internal/generator/gchalkgen/gchalkgen.go.txt ./internal/generator/gchalkgen/gchalkgen.go
$Q go run ./internal/generator/gchalkgen/gchalkgen.go > generated.go
$Q gofmt -s -w generated.go

# Tests

TEST_TARGETS := test-default test-bench test-short test-verbose test-race
.PHONY: $(TEST_TARGETS) check test tests
test-bench: ARGS=-run=__absolutelynothing__ -bench=. ## Run benchmarks
test-short: ARGS=-short ## Run only short tests
test-verbose: ARGS=-v ## Run tests in verbose mode with coverage reporting
test-race: ARGS=-race ## Run tests with race detector
$(TEST_TARGETS): NAME=$(MAKECMDGOALS:test-%=%)
$(TEST_TARGETS): test
test: lint ; $(info $(M) running $(NAME:%=% )tests…) @ ## Run tests
$Q $(GO) test -timeout $(TIMEOUT)s $(ARGS) $(TESTPKGS)

COVERAGE_MODE = atomic
COVERAGE_PROFILE = $(COVERAGE_DIR)/profile.out
COVERAGE_XML = $(COVERAGE_DIR)/coverage.xml
COVERAGE_HTML = $(COVERAGE_DIR)/index.html
.PHONY: test-coverage test-coverage-tools
test-coverage-tools: | $(GOCOV) $(GOCOVXML)
test-coverage: COVERAGE_DIR := $(CURDIR)/test/coverage.$(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
test-coverage: lint test-coverage-tools ; $(info $(M) running coverage tests…) @ ## Run coverage tests
$Q mkdir -p $(COVERAGE_DIR)
$Q $(GO) test \
-coverpkg=$$($(GO) list -f '{{ join .Deps "\n" }}' $(TESTPKGS) | \
grep '^$(MODULE)/' | \
tr '\n' ',' | sed 's/,$$//') \
-covermode=$(COVERAGE_MODE) \
-coverprofile="$(COVERAGE_PROFILE)" $(TESTPKGS)
$Q $(GO) tool cover -html=$(COVERAGE_PROFILE) -o $(COVERAGE_HTML)
$Q $(GOCOV) convert $(COVERAGE_PROFILE) | $(GOCOVXML) > $(COVERAGE_XML)

.PHONY: lint
lint: golint golangci-lint ## Run linters

golint: | ; $(info $(M) running golint…) @ ## Run golint
$Q $(GOLINT) -set_exit_status ./...

.PHONY: golangci-lint
golangci-lint: | ; $(info $(M) running golangci-lint…) @ ## Run golangci-lint
$Q $(GOLANGCILINT) run

.PHONY: fmt
fmt: ; $(info $(M) running gofmt…) @ ## Run gofmt on all source files
$Q $(GO) fmt $(PKGS)

# Misc

.PHONY: clean
clean: ; $(info $(M) cleaning…) @ ## Cleanup everything
@rm -rf dist $(basename $(MODULE))
@rm -rf test/tests.* test/coverage.*

.PHONY: help
help:
@grep -hE '^[ a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-17s\033[0m %s\n", $$1, $$2}'

.PHONY: version
version:
@echo $(VERSION)
4 changes: 0 additions & 4 deletions generate.sh

This file was deleted.

0 comments on commit 13b8151

Please sign in to comment.