1- PROJECT := github.com/globalcyberalliance/domain-security-scanner/v3
2- GO := $(shell which go 2>/dev/null)
1+ # Project configuration.
2+ PROJECT := github.com/globalcyberalliance/domain-security-scanner/v3
3+ CGO_ENABLED := 0
4+
5+ # Tool paths.
6+ GO := $(shell which go 2>/dev/null)
37GOFIELDALIGNMENT := $(shell which betteralign 2>/dev/null)
4- GOFUMPT := $(shell which gofumpt 2>/dev/null)
5- GOLINTER := $(shell which golangci-lint 2>/dev/null)
6- GONILAWAY := $(shell which nilaway 2>/dev/null)
7- GO_BENCH_FLAGS := -short -bench=. -benchmem
8- GO_BENCH := $(GO ) test $(GO_BENCH_FLAGS )
9- GO_BUILD := CGO_ENABLED=0 $(GO ) build -ldflags "-s -w" -trimpath
10- GO_FORMAT := $(GOFUMPT ) -w
11- GO_OPTIMIZE := $(GOFIELDALIGNMENT ) -fix
12- GO_TEST := $(GO ) test -v -short
13- GO_TIDY := $(GO ) mod tidy
14- TARGETS := bin/dss
8+ GOFUMPT := $(shell which gofumpt 2>/dev/null)
9+ GOLINTER := $(shell which golangci-lint 2>/dev/null)
10+ GONILAWAY := $(shell which nilaway 2>/dev/null)
11+
12+ # Build configuration.
13+ GO_PRIVATE := GOPRIVATE=github.com/globalcyberalliance
14+ BUILD_FLAGS := -ldflags "-s -w" -trimpath
15+
16+ # Common build variables.
17+ GO_BUILD_BASE := $(GO_PRIVATE ) CGO_ENABLED=$(CGO_ENABLED )
18+ GO_BUILD := $(GO_BUILD_BASE ) $(GO ) build $(BUILD_FLAGS )
19+
20+ # Other tool commands.
21+ GO_FORMAT := $(GOFUMPT ) -w
22+ GO_OPTIMIZE := $(GOFIELDALIGNMENT ) -fix
23+ GO_TEST := $(GO ) test -v -short
24+ GO_TIDY := $(GO ) mod tidy
1525
26+ # Build targets.
27+ TARGETS := bin/dss
28+
29+ # Default target.
1630all : check-dependencies prepare optimize $(TARGETS ) clean
1731
32+ # Development build (no optimization).
1833dev : prepare $(TARGETS )
1934
35+ # Pattern rule for building binaries.
2036bin/% : $(shell find . -name "* .go" -type f)
2137 @echo " Building $@ ..."
2238 @if [ " $( MAKECMDGOALS) " != " dev" ]; then \
23- cd build && $(GO_BUILD) -o ../$@ $(PROJECT)/cmd/$*; \
24- else \
25- $(GO_BUILD) -o $@ $(PROJECT)/cmd/$*; \
26- fi
39+ cd build && $(GO_BUILD ) -o ../$@ $(PROJECT ) /cmd/$* ; \
40+ else \
41+ $(GO_BUILD ) -o $@ $(PROJECT ) /cmd/$* ; \
42+ fi
2743
44+ # Dependency checks.
2845check-dependencies :
2946 @echo " Checking dependencies..."
30- @if [ -z " ${GO} " ]; then \
31- echo " Cannot find 'go' in your $$ PATH" ; \
47+ @if [ -z " $( GO ) " ]; then \
48+ echo " Error: Cannot find 'go' in your PATH" ; \
3249 exit 1; \
3350 fi
34- @if [ -z " ${ GOFIELDALIGNMENT} " ]; then \
35- echo " Cannot find 'betteralign' in your $$ PATH" ; \
51+ @if [ -z " $( GOFIELDALIGNMENT) " ]; then \
52+ echo " Error: Cannot find 'betteralign' in your PATH" ; \
3653 exit 1; \
3754 fi
3855
56+ # Cleanup tasks.
3957clean :
4058 @echo " Cleaning temporary build directory..."
4159 @rm -rf build
4260
61+ clean-all : clean
62+ @echo " Cleaning all build artifacts..."
63+ @rm -rf bin
64+
65+ # Code formatting and optimization.
4366format :
44- @if [ -z " ${ GOFUMPT} " ]; then \
45- echo " Cannot find 'gofumpt' in your $$ PATH" ; \
67+ @if [ -z " $( GOFUMPT) " ]; then \
68+ echo " Error: Cannot find 'gofumpt' in your PATH" ; \
4669 exit 1; \
4770 fi
4871 @echo " Formatting code..."
4972 @$(GO_FORMAT ) $(PWD )
5073
5174lint :
52- @if [ -z " ${ GOLINTER} " ]; then \
53- echo " Cannot find 'golangci-lint' in your $$ PATH" ; \
75+ @if [ -z " $( GOLINTER) " ]; then \
76+ echo " Error: Cannot find 'golangci-lint' in your PATH" ; \
5477 exit 1; \
5578 fi
5679 @echo " Running linter..."
5780 @$(GOLINTER ) run ./...
5881
59- nil :
60- @if [ -z " ${GONILAWAY} " ]; then \
61- echo " Cannot find 'nilaway' in your $$ PATH" ; \
82+ lint-fix :
83+ @if [ -z " $( GOLINTER) " ]; then \
84+ echo " Error: Cannot find 'golangci-lint' in your PATH" ; \
85+ exit 1; \
86+ fi
87+ @echo " Running linter with autofix..."
88+ @$(GOLINTER ) run --fix ./...
89+
90+ nil-check :
91+ @if [ -z " $( GONILAWAY) " ]; then \
92+ echo " Error: Cannot find 'nilaway' in your PATH" ; \
6293 exit 1; \
6394 fi
6495 @echo " Running nilaway..."
6596 @$(GONILAWAY ) ./...
6697
6798optimize :
6899 @echo " Creating temporary build directory..."
69- @cp -r cmd go.* pkg ./ build/
100+ @cp -r cmd go.* pkg build/
70101 @echo " Optimizing struct field alignment..."
71102 @cd build && $(GO_OPTIMIZE ) ./... > /dev/null 2>&1 || true
72103
104+ # Preparation tasks.
73105prepare :
74106 @echo " Cleaning previous builds..."
75107 @rm -rf bin build
76108 @mkdir -p bin build
77- @$(GO_TIDY )
109+ @$(GO_TIDY )
110+
111+ # Development setup.
112+ setup :
113+ @echo " Installing development dependencies..."
114+ @$(GO ) install github.com/dkorunic/betteralign/cmd/betteralign@latest
115+ @$(GO ) install mvdan.cc/gofumpt@latest
116+ @$(GO ) install go.uber.org/nilaway/cmd/nilaway@latest
117+ @$(GO ) install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
118+
119+ # Testing.
120+ test :
121+ @echo " Running tests..."
122+ @$(GO_TEST ) ./...
123+
124+ benchmark :
125+ @echo " Running benchmarks..."
126+ @$(GO ) test -short -bench=. -benchmem ./...
127+
128+ # Help target.
129+ help :
130+ @echo " Available targets:"
131+ @echo " all - Build optimized binaries (default)"
132+ @echo " dev - Build development binaries (no optimization)"
133+ @echo " clean - Remove temporary build directory"
134+ @echo " clean-all - Remove all build artifacts"
135+ @echo " format - Format Go code"
136+ @echo " lint - Run linter"
137+ @echo " lint-fix - Run linter with autofix"
138+ @echo " nil-check - Run nilaway null pointer analysis"
139+ @echo " test - Run tests"
140+ @echo " benchmark - Run benchmarks"
141+ @echo " setup - Install development dependencies"
142+ @echo " help - Show this help message"
143+
144+ # Declare phony targets.
145+ .PHONY : all dev clean clean-all format lint lint-fix nil-check optimize prepare setup test benchmark help check-dependencies
0 commit comments