@@ -11,6 +11,9 @@ DOCKER_PLUGINS_IMAGE_NAME ?= plugins
1111DOCKER_IMAGE_VERSION ?= $(shell git describe --tags --always --dirty)
1212DOCKER_PLATFORM ?= local
1313DOCKER_PUSH ?= false
14+ EMBED_BINARY_NAME := headlamp_app
15+ # embed build flags
16+ EMBED_BUILD_FLAGS := -trimpath -ldflags="-s -w" -tags embed
1417
1518ifeq ($(OS ) , Windows_NT)
1619 SERVER_EXE_EXT = .exe
@@ -66,6 +69,122 @@ app-tsc:
6669backend :
6770 cd backend && go build -o ./headlamp-server${SERVER_EXE_EXT} ./cmd
6871
72+ .PHONY : backend-embed
73+ backend-embed :
74+ REACT_APP_HEADLAMP_SIDEBAR_DEFAULT_OPEN=false $(MAKE ) frontend-build
75+ $(MAKE ) backend-embed-prepare
76+ cd backend && go build $(EMBED_BUILD_FLAGS ) -o ./headlamp-server${SERVER_EXE_EXT} ./cmd
77+
78+ # New multi-platform build targets
79+ .PHONY : backend-embed-all
80+ backend-embed-all :
81+ REACT_APP_HEADLAMP_SIDEBAR_DEFAULT_OPEN=false $(MAKE ) frontend-build
82+ $(MAKE ) backend-embed-prepare
83+ $(MAKE ) backend-embed-clean
84+ @echo " Building all platforms with version: $( VERSION) "
85+ $(MAKE ) backend-embed-windows VERSION=$(VERSION )
86+ $(MAKE ) backend-embed-darwin VERSION=$(VERSION )
87+ $(MAKE ) backend-embed-linux VERSION=$(VERSION )
88+ @echo " All builds completed successfully for version $( VERSION) !"
89+
90+ .PHONY : backend-embed-all-compressed
91+ backend-embed-all-compressed : backend-embed-all
92+ @echo " Compressing all binaries with version: $( VERSION) ..."
93+ cd backend/dist && for file in * ; do \
94+ if [ -f " $$ file" ] && [[ ! " $$ file" == * .tar.gz ]]; then \
95+ tar -czf " $$ file.tar.gz" " $$ file" && \
96+ rm " $$ file" ; \
97+ fi \
98+ done
99+ @echo " ✓ All binaries compressed successfully for version $( VERSION) !"
100+
101+ .PHONY : backend-embed-prepare
102+ backend-embed-prepare :
103+ @echo " Preparing static files for embedding..."
104+ @if [ -d backend/pkg/spa/static ]; then rm -rf backend/pkg/spa/static; fi
105+ @mkdir -p backend/pkg/spa/static
106+ ifeq ($(OS ) ,Windows_NT)
107+ @echo "Copying frontend dist to backend/static..."
108+ # /E: Copies directories and subdirectories, including empty ones
109+ # /I: Assumes destination is a directory if copying multiple files
110+ # /Y: Suppresses prompting to confirm overwriting existing files
111+ @xcopy /E /I /Y frontend\build backend\pkg\spa\static
112+ else
113+ @echo "Copying frontend dist to backend/static..."
114+ @cp -R frontend/build/* backend/pkg/spa/static/
115+ endif
116+
117+ .PHONY : backend-embed-clean
118+ backend-embed-clean :
119+ @cd backend && rm -rf dist
120+ @mkdir -p backend/dist
121+
122+ # Windows builds
123+ .PHONY : backend-embed-windows
124+ backend-embed-windows :
125+ @echo " Building all Windows architectures with version $( VERSION) ..."
126+ $(MAKE ) backend-embed-windows-arm64 VERSION=$(VERSION )
127+ $(MAKE ) backend-embed-windows-amd64 VERSION=$(VERSION )
128+ $(MAKE ) backend-embed-windows-386 VERSION=$(VERSION )
129+ @echo " ✓ Completed all Windows builds for version $( VERSION) "
130+
131+ backend-embed-windows-arm64 :
132+ @echo " Building for windows/arm64 with version $( VERSION) ..."
133+ cd backend && CGO_ENABLED=0 GOOS=windows GOARCH=arm64 go build $(EMBED_BUILD_FLAGS ) -o dist/$(EMBED_BINARY_NAME ) _$(VERSION ) _windows_arm64.exe ./cmd
134+ @echo " ✓ Built: $( EMBED_BINARY_NAME) _$( VERSION) _windows_arm64.exe"
135+
136+ backend-embed-windows-amd64 :
137+ @echo " Building for windows/amd64 with version $( VERSION) ..."
138+ cd backend && CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build $(EMBED_BUILD_FLAGS ) -o dist/$(EMBED_BINARY_NAME ) _$(VERSION ) _windows_amd64.exe ./cmd
139+ @echo " ✓ Built: $( EMBED_BINARY_NAME) _$( VERSION) _windows_amd64.exe"
140+
141+ backend-embed-windows-386 :
142+ @echo " Building for windows/386 with version $( VERSION) ..."
143+ cd backend && CGO_ENABLED=0 GOOS=windows GOARCH=386 go build $(EMBED_BUILD_FLAGS ) -o dist/$(EMBED_BINARY_NAME ) _$(VERSION ) _windows_386.exe ./cmd
144+ @echo " ✓ Built: $( EMBED_BINARY_NAME) _$( VERSION) _windows_386.exe"
145+
146+ # macOS(darwin) builds
147+ .PHONY : backend-embed-darwin
148+ backend-embed-darwin :
149+ @echo " Building all Darwin architectures with version $( VERSION) ..."
150+ $(MAKE ) backend-embed-darwin-amd64 VERSION=$(VERSION )
151+ $(MAKE ) backend-embed-darwin-arm64 VERSION=$(VERSION )
152+ @echo " ✓ Completed all Darwin builds for version $( VERSION) "
153+
154+ backend-embed-darwin-amd64 :
155+ @echo " Building for darwin/amd64 with version $( VERSION) ..."
156+ cd backend && CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build $(EMBED_BUILD_FLAGS ) -o dist/$(EMBED_BINARY_NAME ) _$(VERSION ) _darwin_amd64 ./cmd
157+ @echo " ✓ Built: $( EMBED_BINARY_NAME) _$( VERSION) _darwin_amd64"
158+
159+ backend-embed-darwin-arm64 :
160+ @echo " Building for darwin/arm64 with version $( VERSION) ..."
161+ cd backend && CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build $(EMBED_BUILD_FLAGS ) -o dist/$(EMBED_BINARY_NAME ) _$(VERSION ) _darwin_arm64 ./cmd
162+ @echo " ✓ Built: $( EMBED_BINARY_NAME) _$( VERSION) _darwin_arm64"
163+
164+ # Linux builds
165+ .PHONY : backend-embed-linux
166+ backend-embed-linux :
167+ @echo " Building all Linux architectures with version $( VERSION) ..."
168+ $(MAKE ) backend-embed-linux-amd64 VERSION=$(VERSION )
169+ $(MAKE ) backend-embed-linux-arm64 VERSION=$(VERSION )
170+ $(MAKE ) backend-embed-linux-386 VERSION=$(VERSION )
171+ @echo " ✓ Completed all Linux builds for version $( VERSION) "
172+
173+ backend-embed-linux-amd64 :
174+ @echo " Building for linux/amd64 with version $( VERSION) ..."
175+ cd backend && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build $(EMBED_BUILD_FLAGS ) -o dist/$(EMBED_BINARY_NAME ) _$(VERSION ) _linux_amd64 ./cmd
176+ @echo " ✓ Built: $( EMBED_BINARY_NAME) _$( VERSION) _linux_amd64"
177+
178+ backend-embed-linux-arm64 :
179+ @echo " Building for linux/arm64 with version $( VERSION) ..."
180+ cd backend && CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build $(EMBED_BUILD_FLAGS ) -o dist/$(EMBED_BINARY_NAME ) _$(VERSION ) _linux_arm64 ./cmd
181+ @echo " ✓ Built: $( EMBED_BINARY_NAME) _$( VERSION) _linux_arm64"
182+
183+ backend-embed-linux-386 :
184+ @echo " Building for linux/386 with version $( VERSION) ..."
185+ cd backend && CGO_ENABLED=0 GOOS=linux GOARCH=386 go build $(EMBED_BUILD_FLAGS ) -o dist/$(EMBED_BINARY_NAME ) _$(VERSION ) _linux_386 ./cmd
186+ @echo " ✓ Built: $( EMBED_BINARY_NAME) _$( VERSION) _linux_386"
187+
69188.PHONY : backend-test
70189backend-test :
71190 cd backend && go test -v -p 1 ./...
0 commit comments