111 lines
2.5 KiB
Makefile
111 lines
2.5 KiB
Makefile
# Variables
|
|
BINARY_NAME=myapp
|
|
GO=go
|
|
GOFLAGS=-v
|
|
|
|
# Build variables
|
|
VERSION?=$(shell git describe --tags --always --dirty)
|
|
LDFLAGS=-ldflags "-X main.Version=$(VERSION)"
|
|
|
|
.PHONY: all build clean test lint run install help
|
|
.PHONY: benchmark lint-fix outdated weight audit
|
|
.PHONY: watch-test watch-build watch-run
|
|
|
|
all: clean lint test build
|
|
|
|
## build: Build the application
|
|
build:
|
|
@echo "Building $(BINARY_NAME)..."
|
|
$(GO) build $(GOFLAGS) $(LDFLAGS) -o bin/$(BINARY_NAME) ./cmd/server
|
|
|
|
## build-all: Build all binaries in cmd/
|
|
build-all:
|
|
@echo "Building all binaries..."
|
|
$(GO) build $(GOFLAGS) $(LDFLAGS) -o bin/ ./cmd/...
|
|
|
|
## clean: Clean build artifacts
|
|
clean:
|
|
@echo "Cleaning..."
|
|
rm -rf bin/
|
|
rm -f coverage.out
|
|
|
|
## test: Run all tests
|
|
test:
|
|
@echo "Running tests..."
|
|
$(GO) test -v -race -coverprofile=coverage.out ./...
|
|
$(GO) tool cover -html=coverage.out -o coverage.html
|
|
|
|
## test-short: Run tests without long-running ones
|
|
test-short:
|
|
$(GO) test -v -short ./...
|
|
|
|
## benchmark: Run benchmarks
|
|
benchmark:
|
|
@echo "Running benchmarks..."
|
|
$(GO) test -bench=. -benchmem ./...
|
|
|
|
## lint: Run linter
|
|
lint:
|
|
@echo "Running linter..."
|
|
golangci-lint run ./...
|
|
|
|
## lint-fix: Run linter and auto-fix issues
|
|
lint-fix:
|
|
@echo "Running linter with auto-fix..."
|
|
golangci-lint run --fix ./...
|
|
|
|
## fmt: Format code
|
|
fmt:
|
|
$(GO) fmt ./...
|
|
$(GO) vet ./...
|
|
|
|
## outdated: Check for outdated dependencies
|
|
outdated:
|
|
@echo "Checking for outdated dependencies..."
|
|
go list -u -m -json all | go-mod-outdated -update -direct
|
|
|
|
## weight: Analyze package dependencies
|
|
weight:
|
|
@echo "Analyzing package weight..."
|
|
goweight
|
|
|
|
## audit: Audit dependencies for security vulnerabilities
|
|
audit:
|
|
@echo "Auditing dependencies..."
|
|
govulncheck ./...
|
|
|
|
## run: Build and run the application
|
|
run: build
|
|
@echo "Running $(BINARY_NAME)..."
|
|
./bin/$(BINARY_NAME)
|
|
|
|
## install: Install dependencies
|
|
install:
|
|
$(GO) mod download
|
|
$(GO) mod tidy
|
|
|
|
## deps-update: Update dependencies (patch only for safety)
|
|
deps-update:
|
|
$(GO) get -u=patch ./...
|
|
$(GO) mod tidy
|
|
|
|
## watch-test: Run tests on file changes (requires air)
|
|
watch-test:
|
|
@echo "Watching for changes to run tests..."
|
|
air -test
|
|
|
|
## watch-build: Rebuild on file changes (requires air)
|
|
watch-build:
|
|
@echo "Watching for changes to rebuild..."
|
|
air -build
|
|
|
|
## watch-run: Rebuild and run on file changes (requires air)
|
|
watch-run:
|
|
@echo "Watching for changes to run..."
|
|
air
|
|
|
|
## help: Show this help message
|
|
help:
|
|
@echo "Usage: make [target]"
|
|
@sed -n 's/^##//p' $(MAKEFILE_LIST) | column -t -s ':' | sed -e 's/^/ /'
|