mirror of
https://github.com/jimeh/rands.git
synced 2026-02-19 03:16:39 +00:00
Upgrade to Go 1.17 and golangci-lint to 1.64, and fix the linting issues that were found. Also upgrade CI workflow actions to latest versions, and setup a test matrix for relevant Go versions. BREAKING CHANGE: Minimum Go version changed from 1.15 to 1.17.
157 lines
2.7 KiB
Makefile
157 lines
2.7 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) ./...
|
|
|
|
#
|
|
# 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
|