68 lines
2.0 KiB
Makefile
68 lines
2.0 KiB
Makefile
.DEFAULT_GOAL := help
|
|
|
|
GO = go
|
|
ALL_GO_MOD_DIRS := $(shell $(GO) work edit -json | jq -r '.Use[].DiskPath')
|
|
WORK_LINT_TARGETS := $(patsubst %, %/..., $(ALL_GO_MOD_DIRS))
|
|
TIMEOUT = 300
|
|
|
|
help: ## Show help
|
|
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
|
.PHONY: help
|
|
|
|
build: ## Build all workspace modules
|
|
$(GO) build work
|
|
.PHONY: build
|
|
|
|
test: ## Run tests across all workspace modules
|
|
$(GO) test -count=1 -timeout $(TIMEOUT)s work
|
|
.PHONY: test
|
|
|
|
test-race: ## Run tests with race detection
|
|
$(GO) test -count=1 -timeout $(TIMEOUT)s -race work
|
|
.PHONY: test-race
|
|
|
|
COVERAGE_MODE = atomic
|
|
COVERAGE_DIR = .coverage
|
|
COVERAGE_PROFILE = $(COVERAGE_DIR)/coverage.out
|
|
|
|
$(COVERAGE_DIR):
|
|
mkdir -p $(COVERAGE_DIR)
|
|
|
|
test-coverage: $(COVERAGE_DIR) ## Test with coverage enabled
|
|
rm -f $(COVERAGE_DIR)/*
|
|
$(GO) test -count=1 -timeout $(TIMEOUT)s -covermode=$(COVERAGE_MODE) -coverprofile=$(COVERAGE_PROFILE) work
|
|
.PHONY: test-coverage
|
|
|
|
test-race-coverage: $(COVERAGE_DIR) ## Run tests with race detection and coverage
|
|
rm -f $(COVERAGE_DIR)/*
|
|
$(GO) test -count=1 -timeout $(TIMEOUT)s -race -covermode=$(COVERAGE_MODE) -coverprofile=$(COVERAGE_PROFILE) work
|
|
.PHONY: test-race-coverage
|
|
|
|
vet: ## Run "go vet" across all workspace modules
|
|
$(GO) vet work
|
|
.PHONY: vet
|
|
|
|
mod-tidy: ## Check go.mod tidiness
|
|
@set -e ; \
|
|
for dir in $(ALL_GO_MOD_DIRS); do \
|
|
MOD_GO=$$(sed -n 's/^go \([0-9.]*\)/\1/p' "$${dir}/go.mod"); \
|
|
echo ">>> Running 'go mod tidy' for module: $${dir} (go $${MOD_GO})"; \
|
|
(cd "$${dir}" && GOTOOLCHAIN=local $(GO) mod tidy -go=$${MOD_GO} -compat=$${MOD_GO}); \
|
|
done; \
|
|
git diff --exit-code
|
|
.PHONY: mod-tidy
|
|
|
|
gotidy: $(ALL_GO_MOD_DIRS:%=gotidy/%) ## Run go mod tidy across all modules
|
|
gotidy/%: DIR=$*
|
|
gotidy/%:
|
|
@echo "==> $(DIR)" && (cd "$(DIR)" && $(GO) mod tidy)
|
|
.PHONY: gotidy
|
|
|
|
lint: ## Lint (using "golangci-lint")
|
|
golangci-lint run $(WORK_LINT_TARGETS)
|
|
.PHONY: lint
|
|
|
|
fmt: ## Format all Go files
|
|
gofmt -l -w -s .
|
|
.PHONY: fmt
|