diff --git a/Makefile b/Makefile index d6095e6..f40f508 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,40 @@ -unit: +.PHONY: all help install clean test-unit test-mutation test-fuzz test docs lint-go lint-makefile + +help: ## Show this help + @grep -E '^[a-zA-Z_-]+:.*##' $(MAKEFILE_LIST) | awk -F ':.*## ' '{printf " %-15s %s\n", $$1, $$2}' + +install: ## Install dev tools + go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest + go install github.com/checkmake/checkmake/cmd/checkmake@latest + go install github.com/go-gremlins/gremlins/cmd/gremlins@latest + go install golang.org/x/tools/cmd/godoc@latest + go install golang.org/x/vuln/cmd/govulncheck@latest + +test-unit: ## Run unit tests with coverage go test ./... -cover -v -mutation: +test-mutation: ## Run mutation tests with gremlins gremlins unleash -fuzz: - go test ./... -fuzz=$(FN) +test-fuzz: ## Run all fuzz tests for 30s each + @for func in $$(grep -r --include='*_test.go' -oh 'func Fuzz\w*' . | sed 's/func //'); do \ + echo "Fuzzing $$func..."; \ + go test ./... -fuzz="^$$func$$" -fuzztime=30s; \ + done -docs: +test: test-unit test-mutation test-fuzz ## Run all tests + +lint-go: ## Lint Go code + golangci-lint run ./... + +lint-makefile: ## Lint the Makefile + checkmake Makefile + +docs: ## Serve godoc locally @echo ">>> Visit: http://localhost:6060/pkg/git.maximhutz.com/tools/dsa/" - godoc -http=:6060 \ No newline at end of file + godoc -http=:6060 + +clean: ## Clean build and test caches + go clean -cache -testcache + +all: lint-go lint-makefile test ## Run all checks and tests \ No newline at end of file