Files
gibidify/Makefile
Ismo Vuorinen 3f65b813bd feat: update go to 1.25, add permissions and envs (#49)
* chore(ci): update go to 1.25, add permissions and envs
* fix(ci): update pr-lint.yml
* chore: update go, fix linting
* fix: tests and linting
* fix(lint): lint fixes, renovate should now pass
* fix: updates, security upgrades
* chore: workflow updates, lint
* fix: more lint, checkmake, and other fixes
* fix: more lint, convert scripts to POSIX compliant
* fix: simplify codeql workflow
* tests: increase test coverage, fix found issues
* fix(lint): editorconfig checking, add to linters
* fix(lint): shellcheck, add to linters
* fix(lint): apply cr comment suggestions
* fix(ci): remove step-security/harden-runner
* fix(lint): remove duplication, apply cr fixes
* fix(ci): tests in CI/CD pipeline
* chore(lint): deduplication of strings
* fix(lint): apply cr comment suggestions
* fix(ci): actionlint
* fix(lint): apply cr comment suggestions
* chore: lint, add deps management
2025-10-10 12:14:42 +03:00

199 lines
5.8 KiB
Makefile

.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!"