mirror of
https://github.com/jimeh/go-golden.git
synced 2026-02-18 19:06:39 +00:00
Add new Do function whihc ecapsulates the common pattern of writing to golden file if the update mechnism evaluates to true, followed by immediately reading the file. Compresses four lines into one.
185 lines
3.2 KiB
Makefile
185 lines
3.2 KiB
Makefile
GOMODNAME := $(shell grep 'module' go.mod | sed -e 's/^module //')
|
|
SOURCES := $(shell find . -name "*.go" -or -name "go.mod" -or -name "go.sum" \
|
|
-or -name "Makefile")
|
|
|
|
# Verbose output
|
|
ifdef VERBOSE
|
|
V = -v
|
|
endif
|
|
|
|
#
|
|
# Environment
|
|
#
|
|
|
|
BINDIR := bin
|
|
TOOLDIR := $(BINDIR)/tools
|
|
|
|
# Global environment variables for all targets
|
|
SHELL ?= /bin/bash
|
|
SHELL := env \
|
|
GO111MODULE=on \
|
|
GOBIN=$(CURDIR)/$(TOOLDIR) \
|
|
CGO_ENABLED=1 \
|
|
PATH='$(CURDIR)/$(BINDIR):$(CURDIR)/$(TOOLDIR):$(PATH)' \
|
|
$(SHELL)
|
|
|
|
#
|
|
# Defaults
|
|
#
|
|
|
|
# Default target
|
|
.DEFAULT_GOAL := test
|
|
|
|
#
|
|
# Tools
|
|
#
|
|
|
|
# external tool
|
|
define tool # 1: binary-name, 2: go-import-path
|
|
TOOLS += $(TOOLDIR)/$(1)
|
|
|
|
$(TOOLDIR)/$(1): Makefile
|
|
GOBIN="$(CURDIR)/$(TOOLDIR)" go install "$(2)"
|
|
endef
|
|
|
|
$(eval $(call tool,godoc,golang.org/x/tools/cmd/godoc@latest))
|
|
$(eval $(call tool,gofumpt,mvdan.cc/gofumpt@latest))
|
|
$(eval $(call tool,goimports,golang.org/x/tools/cmd/goimports@latest))
|
|
$(eval $(call tool,golangci-lint,github.com/golangci/golangci-lint/cmd/golangci-lint@v1.64))
|
|
$(eval $(call tool,gomod,github.com/Helcaraxan/gomod@latest))
|
|
|
|
.PHONY: tools
|
|
tools: $(TOOLS)
|
|
|
|
#
|
|
# Development
|
|
#
|
|
|
|
BENCH ?= .
|
|
TESTARGS ?=
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -f $(TOOLS)
|
|
rm -f ./coverage.out ./go.mod.tidy-check ./go.sum.tidy-check
|
|
|
|
.PHONY: test
|
|
test:
|
|
go test $(V) -count=1 -race $(TESTARGS) ./...
|
|
|
|
.PHONY: test-deps
|
|
test-deps:
|
|
go test all
|
|
|
|
.PHONY: lint
|
|
lint: $(TOOLDIR)/golangci-lint
|
|
golangci-lint $(V) run
|
|
|
|
.PHONY: format
|
|
format: $(TOOLDIR)/goimports $(TOOLDIR)/gofumpt
|
|
goimports -w . && gofumpt -w .
|
|
|
|
.SILENT: bench
|
|
.PHONY: bench
|
|
bench:
|
|
go test $(V) -count=1 -bench=$(BENCH) $(TESTARGS) ./...
|
|
|
|
.PHONY: golden-update
|
|
golden-update:
|
|
GOLDEN_UPDATE=1 $(MAKE) test
|
|
|
|
.PHONY: golden-clean
|
|
golden-clean:
|
|
find . -type f -name '*.golden' -path '*/testdata/*' -delete
|
|
find . -type d -empty -path '*/testdata/*' -delete
|
|
|
|
.PHONY: golden-regen
|
|
golden-regen: golden-clean golden-update
|
|
|
|
#
|
|
# Code Generation
|
|
#
|
|
|
|
.PHONY: generate
|
|
generate:
|
|
go generate ./...
|
|
|
|
.PHONY: check-generate
|
|
check-generate:
|
|
$(eval CHKDIR := $(shell mktemp -d))
|
|
cp -av . "$(CHKDIR)"
|
|
make -C "$(CHKDIR)/" generate
|
|
( diff -rN . "$(CHKDIR)" && rm -rf "$(CHKDIR)" ) || \
|
|
( rm -rf "$(CHKDIR)" && exit 1 )
|
|
|
|
#
|
|
# Coverage
|
|
#
|
|
|
|
.PHONY: cov
|
|
cov: coverage.out
|
|
|
|
.PHONY: cov-html
|
|
cov-html: coverage.out
|
|
go tool cover -html=./coverage.out
|
|
|
|
.PHONY: cov-func
|
|
cov-func: coverage.out
|
|
go tool cover -func=./coverage.out
|
|
|
|
coverage.out: $(SOURCES)
|
|
go test $(V) -covermode=count -coverprofile=./coverage.out ./...
|
|
|
|
#
|
|
# Dependencies
|
|
#
|
|
|
|
.PHONY: deps
|
|
deps:
|
|
go mod download
|
|
|
|
.PHONY: deps-update
|
|
deps-update:
|
|
go get -u -t ./...
|
|
|
|
.PHONY: deps-analyze
|
|
deps-analyze: $(TOOLDIR)/gomod
|
|
gomod analyze
|
|
|
|
.PHONY: tidy
|
|
tidy:
|
|
go mod tidy $(V)
|
|
|
|
.PHONY: verify
|
|
verify:
|
|
go mod verify
|
|
|
|
.SILENT: check-tidy
|
|
.PHONY: check-tidy
|
|
check-tidy:
|
|
cp go.mod go.mod.tidy-check
|
|
cp go.sum go.sum.tidy-check
|
|
go mod tidy
|
|
( \
|
|
diff go.mod go.mod.tidy-check && \
|
|
diff go.sum go.sum.tidy-check && \
|
|
rm -f go.mod go.sum && \
|
|
mv go.mod.tidy-check go.mod && \
|
|
mv go.sum.tidy-check go.sum \
|
|
) || ( \
|
|
rm -f go.mod go.sum && \
|
|
mv go.mod.tidy-check go.mod && \
|
|
mv go.sum.tidy-check go.sum; \
|
|
exit 1 \
|
|
)
|
|
|
|
#
|
|
# Documentation
|
|
#
|
|
|
|
# Serve docs
|
|
.PHONY: docs
|
|
docs: $(TOOLDIR)/godoc
|
|
$(info serviing docs on http://127.0.0.1:6060/pkg/$(GOMODNAME)/)
|
|
@godoc -http=127.0.0.1:6060
|