feat: refactor Makefile to streamline build process and enhance target descriptions

gosunuts committed Feb 24, 2026 at 22:28 UTC b71ba6edf538ba582fc05964cff4116aa0ccf6b7
1 file changed +47 -62
Makefile
+47 -62
@@ -1,86 +1,71 @@
1 -.PHONY: help fmt vet lint test tidy build release clean
1 +.PHONY: help fmt vet lint test vuln tidy all run build build-frontend build-tunnel build-server clean
2
3 .DEFAULT_GOAL := help
4
5 -VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
6 -LDFLAGS := -s -w -X main.version=$(VERSION)
7 -
5 help:
6 @echo "Available targets:"
10 - @echo " make build - Build relay-server and portal-tunnel for current platform"
11 - @echo " make build-all - Build all binaries for all platforms (linux/darwin/windows, amd64/arm64)"
12 - @echo " make release - Create release archives in dist/"
13 - @echo " make test - Run tests"
14 - @echo " make lint - Run linter"
15 - @echo " make fmt - Format code"
16 - @echo " make clean - Remove build artifacts"
17 - @echo " make run - Run relay server locally"
7 + @echo " make build - Build everything (frontend, tunnel, server)"
8 + @echo " make build-frontend - Build React frontend (Tailwind CSS 4)"
9 + @echo " make build-tunnel - Build portal-tunnel binaries"
10 + @echo " make build-server - Build Go relay server (includes frontend build)"
11 + @echo " make run - Run relay server"
12 + @echo " make clean - Remove build artifacts"
13
14 fmt:
20 - @gofmt -w .
21 - @echo "Formatted"
15 + gofmt -w .
16 + goimports -w .
17
18 vet:
24 - @go vet ./...
25 - @echo "Vet passed"
19 + go vet ./...
20
21 lint:
28 - @golangci-lint run
22 + golangci-lint run
23
24 test:
31 - @go test -v -race ./...
25 + go test -v -race -coverprofile=coverage.out ./...
26 +
27 +vuln:
28 + govulncheck ./...
29
30 tidy:
34 - @go mod tidy
35 - @go mod verify
31 + go mod tidy
32 + go mod verify
33
37 -build:
38 - @mkdir -p bin
39 - @echo "Building relay-server..."
40 - @CGO_ENABLED=0 go build -trimpath -ldflags "$(LDFLAGS)" -o bin/relay-server ./cmd/relay-server
41 - @echo "Building portal-tunnel..."
42 - @CGO_ENABLED=0 go build -trimpath -ldflags "$(LDFLAGS)" -o bin/portal-tunnel ./cmd/portal-tunnel
43 - @echo "Build complete: bin/"
34 +all: fmt vet lint test vuln build
35
45 -build-all:
46 - @mkdir -p dist
47 - @echo "Building for all platforms..."
48 - @for os in linux darwin windows; do \
49 - for arch in amd64 arm64; do \
50 - EXT=""; \
51 - if [ "$$os" = "windows" ]; then EXT=".exe"; fi; \
52 - echo " $$os/$$arch..."; \
53 - CGO_ENABLED=0 GOOS=$$os GOARCH=$$arch go build -trimpath -ldflags "$(LDFLAGS)" -o "dist/relay-server-$$os-$$arch$$EXT" ./cmd/relay-server; \
54 - CGO_ENABLED=0 GOOS=$$os GOARCH=$$arch go build -trimpath -ldflags "$(LDFLAGS)" -o "dist/portal-tunnel-$$os-$$arch$$EXT" ./cmd/portal-tunnel; \
55 - done; \
56 - done
57 - @echo "All builds complete: dist/"
36 +run:
37 + ./bin/relay-server
38 +
39 +# Convenience target
40 +build: build-frontend build-tunnel build-server
41 +
42 +# Build React frontend with Tailwind CSS 4
43 +build-frontend:
44 + @echo "[frontend] building React frontend..."
45 + @mkdir -p cmd/relay-server/dist/app
46 + @cd cmd/relay-server/frontend && npm i && npm run build
47 + @echo "[frontend] build complete"
48
59 -release: clean build-all
60 - @echo "Creating release archives..."
61 - @mkdir -p dist/release
62 - @for os in linux darwin windows; do \
63 - for arch in amd64 arm64; do \
49 +# Build portal-tunnel binaries for distribution
50 +build-tunnel:
51 + @echo "[tunnel] building portal-tunnel binaries..."
52 + @mkdir -p cmd/relay-server/dist/tunnel
53 + @for GOOS in linux darwin windows; do \
54 + for GOARCH in amd64 arm64; do \
55 EXT=""; \
65 - if [ "$$os" = "windows" ]; then EXT=".exe"; fi; \
66 - DIR="portal-$(VERSION)-$$os-$$arch"; \
67 - mkdir -p "dist/release/$$DIR"; \
68 - cp "dist/relay-server-$$os-$$arch$$EXT" "dist/release/$$DIR/relay-server$$EXT"; \
69 - cp "dist/portal-tunnel-$$os-$$arch$$EXT" "dist/release/$$DIR/portal-tunnel$$EXT"; \
70 - cp README.md LICENSE "dist/release/$$DIR/"; \
71 - if [ "$$os" = "windows" ]; then \
72 - (cd dist/release && zip -q "$$DIR.zip" "$$DIR"/*); \
73 - else \
74 - (cd dist/release && tar -czf "$$DIR.tar.gz" "$$DIR"); \
75 - fi; \
76 - rm -rf "dist/release/$$DIR"; \
56 + if [ "$${GOOS}" = "windows" ]; then EXT=".exe"; fi; \
57 + OUT="cmd/relay-server/dist/tunnel/portal-tunnel-$${GOOS}-$${GOARCH}$${EXT}"; \
58 + echo " - $${OUT}"; \
59 + CGO_ENABLED=0 GOOS=$${GOOS} GOARCH=$${GOARCH} go build -trimpath -ldflags "-s -w" -o "$${OUT}" ./cmd/portal-tunnel; \
60 done; \
61 done
79 - @echo "Release archives created: dist/release/"
62
81 -run: build
82 - @./bin/relay-server
63 +# Build Go relay server
64 +build-server:
65 + @echo "[server] building Go portal..."
66 + CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o bin/relay-server ./cmd/relay-server
67
68 clean:
85 - @rm -rf bin dist
86 - @echo "Cleaned"
69 + rm -rf bin
70 + rm -rf cmd/relay-server/dist/app
71 + rm -rf cmd/relay-server/dist/tunnel
\ No newline at end of file