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