.PHONY: all clean test test-coverage build coverage help lint lint-fix \ lint-verbose install-tools benchmark benchmark-collection \ benchmark-concurrency benchmark-format benchmark-processing \ build-benchmark check-all ci-lint ci-test dev-setup security \ security-full vuln-check deps-update deps-check deps-tidy # Default target shows help .DEFAULT_GOAL := help # All target runs full workflow all: lint test build # Help target help: @cat scripts/help.txt # Install required tools install-tools: @echo "Installing golangci-lint..." @go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest @echo "Installing gofumpt..." @go install mvdan.cc/gofumpt@latest @echo "Installing golines..." @go install github.com/segmentio/golines@latest @echo "Installing goimports..." @go install golang.org/x/tools/cmd/goimports@latest @echo "Installing staticcheck..." @go install honnef.co/go/tools/cmd/staticcheck@latest @echo "Installing gosec..." @go install github.com/securego/gosec/v2/cmd/gosec@latest @echo "Installing gocyclo..." @go install github.com/fzipp/gocyclo/cmd/gocyclo@latest @echo "Installing revive..." @go install github.com/mgechev/revive@latest @echo "Installing checkmake..." @go install github.com/checkmake/checkmake/cmd/checkmake@latest @echo "Installing shellcheck..." @go install github.com/koalaman/shellcheck/cmd/shellcheck@latest @echo "Installing shfmt..." @go install mvdan.cc/sh/v3/cmd/shfmt@latest @echo "Installing yamllint (Go-based)..." @go install github.com/excilsploft/yamllint@latest @echo "Installing editorconfig-checker..." @go install github.com/editorconfig-checker/editorconfig-checker/\ cmd/editorconfig-checker@latest @echo "All tools installed successfully!" # Run linters lint: @./scripts/lint.sh # Run linters with auto-fix lint-fix: @echo "Running gofumpt..." @gofumpt -l -w . @echo "Running golines..." @golines -w -m 120 --base-formatter="gofumpt" --shorten-comments . @echo "Running goimports..." @goimports -w -local github.com/ivuorinen/gibidify . @echo "Running go fmt..." @go fmt ./... @echo "Running go mod tidy..." @go mod tidy @echo "Running shfmt formatting..." @shfmt -w -i 0 -ci . @echo "Running golangci-lint with --fix..." @golangci-lint run --fix ./... @echo "Auto-fix completed. Running final lint check..." @golangci-lint run ./... @echo "Running revive..." @revive -config revive.toml -formatter friendly ./... @echo "Running checkmake..." @checkmake --config=.checkmake Makefile @echo "Running yamllint..." @yamllint . # Run linters with verbose output lint-verbose: @echo "Running golangci-lint (verbose)..." @golangci-lint run -v ./... @echo "Running checkmake (verbose)..." @checkmake --config=.checkmake \ --format="{{.Line}}:{{.Rule}}:{{.Violation}}" Makefile @echo "Running shfmt check (verbose)..." @shfmt -d . @echo "Running yamllint (verbose)..." @yamllint . # Run tests test: @echo "Running tests..." @go test -race -v ./... # Run tests with coverage output test-coverage: @echo "Running tests with coverage..." @go test -race -v -coverprofile=coverage.out -covermode=atomic ./... @echo "" @echo "Coverage summary:" @go tool cover -func=coverage.out | grep total: @echo "" @echo "Full coverage report saved to: coverage.out" @echo "To view HTML report, run: make coverage" # Run tests with coverage coverage: @echo "Running tests with coverage..." @go test -race -coverprofile=coverage.out -covermode=atomic ./... @go tool cover -html=coverage.out -o coverage.html @echo "Coverage report generated: coverage.html" # Build the application build: @echo "Building gibidify..." @go build -ldflags="-s -w" -o gibidify . @echo "Build complete: ./gibidify" # Clean build artifacts clean: @echo "Cleaning build artifacts..." @rm -f gibidify gibidify-benchmark @rm -f coverage.out coverage.html @echo "Clean complete" # CI-specific targets ci-lint: @golangci-lint run --out-format=github-actions ./... ci-test: @go test -race -coverprofile=coverage.out -json ./... > test-results.json # Build benchmark binary build-benchmark: @echo "Building gibidify-benchmark..." @go build -ldflags="-s -w" -o gibidify-benchmark ./cmd/benchmark @echo "Build complete: ./gibidify-benchmark" # Run benchmarks benchmark: build-benchmark @echo "Running all benchmarks..." @./gibidify-benchmark -type=all # Run specific benchmark types benchmark-collection: build-benchmark @echo "Running file collection benchmarks..." @./gibidify-benchmark -type=collection benchmark-processing: build-benchmark @echo "Running file processing benchmarks..." @./gibidify-benchmark -type=processing benchmark-concurrency: build-benchmark @echo "Running concurrency benchmarks..." @./gibidify-benchmark -type=concurrency benchmark-format: build-benchmark @echo "Running format benchmarks..." @./gibidify-benchmark -type=format # Security targets security: @echo "Running comprehensive security scan..." @./scripts/security-scan.sh security-full: @echo "Running full security analysis..." @./scripts/security-scan.sh vuln-check: @echo "Checking for dependency vulnerabilities..." @go install golang.org/x/vuln/cmd/govulncheck@latest @govulncheck ./... # Dependency management targets deps-check: @echo "Checking for available dependency updates..." @echo "" @echo "Direct dependencies:" @go list -u -m all | grep -v "indirect" | column -t @echo "" @echo "Note: Run 'make deps-update' to update all dependencies" deps-update: @echo "Updating all dependencies to latest versions..." @go get -u ./... @go mod tidy @echo "" @echo "Dependencies updated successfully!" @echo "Running tests to verify compatibility..." @go test ./... @echo "" @echo "Update complete. Run 'make lint-fix && make test' to verify." deps-tidy: @echo "Cleaning up dependencies..." @go mod tidy @go mod verify @echo "Dependencies cleaned and verified successfully!"