1# Makefile
2.PHONY: build run test docker-build docker-run docker-stop clean help
3
4APP_NAME=plcdns
5DOCKER_IMAGE=$(APP_NAME):latest
6DOCKER_CONTAINER=$(APP_NAME)
7
8help: ## Show this help message
9 @echo 'Usage: make [target]'
10 @echo ''
11 @echo 'Available targets:'
12 @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " %-15s %s\n", $$1, $$2}' $(MAKEFILE_LIST)
13
14build: ## Build the Go binary
15 go build -o $(APP_NAME) .
16
17run: ## Run the application locally
18 go run . -port 8053
19
20test: ## Run tests
21 go test -v -race -cover ./...
22
23test-coverage: ## Run tests with coverage report
24 go test -v -race -coverprofile=coverage.out ./...
25 go tool cover -html=coverage.out -o coverage.html
26 @echo "Coverage report generated: coverage.html"
27
28docker-build: ## Build Docker image
29 docker build -t $(DOCKER_IMAGE) .
30
31docker-run: ## Run Docker container (port 8053)
32 docker-compose up -d
33
34docker-run-prod: ## Run Docker container on port 53
35 docker-compose -f docker-compose.prod.yml up -d
36
37docker-stop: ## Stop Docker container
38 docker-compose down
39
40docker-logs: ## Show Docker container logs
41 docker-compose logs -f
42
43docker-shell: ## Open shell in running container
44 docker exec -it $(DOCKER_CONTAINER) sh
45
46clean: ## Clean build artifacts
47 rm -f $(APP_NAME)
48 rm -f coverage.out coverage.html
49 go clean
50
51fmt: ## Format code
52 go fmt ./...
53
54lint: ## Run linter
55 golangci-lint run
56
57deps: ## Download dependencies
58 go mod download
59 go mod tidy
60
61.DEFAULT_GOAL := help