@@ -61,35 +61,53 @@ compile_client_node_ts: clean_client_node_ts
6161compile_wsproxy : compile_client_node_ts
6262 @pnpm -w exec webpack-cli --config src/wsproxy/webpack.config.js
6363all : dep
64- @make mac_x64
65- @make mac_arm64
66- @make win_x64
67- @make win_arm64
68- @make linux_x64
69- @make linux_arm64
64+ @make compile_all_localproxy
65+ @make mac_x64_package
66+ @make mac_arm64_package
67+ @make win_x64_package
68+ @make win_arm64_package
69+ @make linux_x64_package
70+ @make linux_arm64_package
7071 @make bundle
71- dep :
72+ # Build all local proxy binaries in parallel (saves ~3-4 min vs sequential)
73+ compile_all_localproxy :
74+ @printf " $( GREEN) Compiling all local proxy binaries in parallel...$( NC) \n"
75+ @make compile_localproxy os=macos arch=x64 local_proxy_postfix= & \
76+ make compile_localproxy os=macos arch=arm64 local_proxy_postfix= & \
77+ make compile_localproxy os=win arch=x64 local_proxy_postfix=.exe & \
78+ make compile_localproxy os=win arch=arm64 local_proxy_postfix=.exe & \
79+ make compile_localproxy os=linux arch=x64 local_proxy_postfix= & \
80+ make compile_localproxy os=linux arch=arm64 local_proxy_postfix= & \
81+ wait
82+ @printf " $( YELLOW) All local proxy binaries compiled$( NC) \n"
83+ # Build only the web bundle (no Electron setup). Used by CI web job.
84+ dep_web :
7285 @if [ ! -f " ./config.toml" ]; then \
7386 cp config.toml.sample config.toml; \
7487 fi
7588 @mkdir -p ./app
76- @if [ ! -d " ./build/web/" ] || ! grep -q ' es6://static/js/main ' react/build/index.html ; then \
89+ @if [ ! -d " ./build/web/" ]; then \
7790 make compile; \
7891 make compile_wsproxy; \
92+ fi
93+ # Prepare the Electron app directory. Requires dep_web to have run first.
94+ # Uses publicPath patching instead of a full second React build (~4-8 min savings).
95+ dep_electron : dep_web
96+ @if [ ! -d " ./build/electron-app/app" ]; then \
7997 rm -rf build/electron-app; \
8098 mkdir -p build/electron-app; \
81- cp -r electron-app/* build/electron-app/; \
82- cp electron-app/.npmrc build/electron-app/; \
83- pnpm i --prefix ./build/electron-app --ignore-workspace; \
99+ cp -r electron-app/* build/electron-app/; \
100+ cp electron-app/.npmrc build/electron-app/; \
101+ pnpm i --prefix ./build/electron-app --ignore-workspace; \
84102 cp -Rp build/web build/electron-app/app; \
85103 cp -Rp build/web/resources build/electron-app; \
86104 cp -Rp build/web/manifest build/electron-app; \
87- BUILD_TARGET=electron pnpm run build:react-only; \
88- cp -Rp react/build/* build/electron-app/app/; \
105+ node scripts/patch-electron-publicpath.js build/electron-app/app; \
89106 mkdir -p ./build/electron-app/app/wsproxy; \
90107 cp ./src/wsproxy/dist/wsproxy.js ./build/electron-app/app/wsproxy/wsproxy.js; \
91108 cp ./preload.js ./build/electron-app/preload.js; \
92109 fi
110+ dep : dep_electron
93111web :
94112 @if [ ! -d " ./build/web/" ]; then \
95113 make compile; \
@@ -123,13 +141,13 @@ compile_localproxy:
123141 @rm -rf ./app/backend.ai-local-proxy-$(BUILD_VERSION ) -$(os ) -$(arch )$(local_proxy_postfix )
124142 @pnpm exec pkg ./src/wsproxy/local_proxy.js --targets node18-$(os ) -$(arch ) --output ./app/backend.ai-local-proxy-$(BUILD_VERSION ) -$(os ) -$(arch )$(local_proxy_postfix ) --compress Brotli
125143 @rm -rf ./app/backend.ai-local-proxy$(local_proxy_postfix ) ; cp ./app/backend.ai-local-proxy-$(BUILD_VERSION ) -$(os ) -$(arch )$(local_proxy_postfix ) ./app/backend.ai-local-proxy$(local_proxy_postfix )
126- @cd app; zip -r -9 ./backend.ai-local-proxy-$(BUILD_VERSION ) -$(os ) -$(arch ) .zip " ./backend.ai-local-proxy$( local_proxy_postfix) "
144+ @cd app; zip -r -6 ./backend.ai-local-proxy-$(BUILD_VERSION ) -$(os ) -$(arch ) .zip " ./backend.ai-local-proxy$( local_proxy_postfix) "
127145 @rm -rf ./app/backend.ai-local-proxy$(local_proxy_postfix )
128146package_zip :
129147 @printf " $( GREEN) Packaging as ZIP archive...$( NC) "
130148 @cp ./configs/$(site ) .toml ./build/electron-app/app/config.toml
131149 @node ./app-packager.js $(os ) $(arch )
132- @cd app; zip -r -9 ./backend.ai-desktop-$(os ) -$(arch ) -$(BUILD_DATE ) .zip " ./Backend.AI Desktop-$( os_api) -$( arch) "
150+ @cd app; zip -r -6 ./backend.ai-desktop-$(os ) -$(arch ) -$(BUILD_DATE ) .zip " ./Backend.AI Desktop-$( os_api) -$( arch) "
133151ifeq ($(site ) ,main)
134152 @mv ./app/backend.ai-desktop-$(os)-$(arch)-$(BUILD_DATE).zip ./app/backend.ai-desktop-$(BUILD_VERSION)-$(os)-$(arch).zip
135153else
@@ -152,9 +170,10 @@ else
152170 @mv ./app/backend.ai-desktop-$(arch)-$(BUILD_DATE).dmg ./app/backend.ai-desktop-$(BUILD_VERSION)-$(site)-$(os)-$(arch).dmg
153171endif
154172 @printf "$(YELLOW)Finished$(NC)\n"
155- bundle : dep
173+ bundle : dep_web
156174 @printf " $( GREEN) Bundling...$( NC) "
157- @cd build/web; zip -r -9 ../../app/backend.ai-webui-bundle-$(BUILD_DATE ) .zip . > /dev/null
175+ @mkdir -p ./app
176+ @cd build/web; zip -r -6 ../../app/backend.ai-webui-bundle-$(BUILD_DATE ) .zip . > /dev/null
158177 @mv ./app/backend.ai-webui-bundle-$(BUILD_DATE ) .zip ./app/backend.ai-webui-bundle-$(BUILD_VERSION ) .zip
159178 @printf " $( YELLOW) Finished$( NC) \n"
160179mac : dep
@@ -170,6 +189,16 @@ mac_arm64: arch := arm64
170189mac_arm64 : local_proxy_postfix :=
171190mac_arm64 : dep mac_load_keychain compile_localproxy package_dmg
172191 @printf " $( GREEN) Build finished$( NC) : macOS arm64\n"
192+ # Package-only targets: assume dep + compile_all_localproxy already done.
193+ # Used by `make all` which pre-builds all local proxies in parallel.
194+ mac_x64_package : os := macos
195+ mac_x64_package : arch := x64
196+ mac_x64_package : mac_load_keychain package_dmg
197+ @printf " $( GREEN) Build finished$( NC) : macOS x64\n"
198+ mac_arm64_package : os := macos
199+ mac_arm64_package : arch := arm64
200+ mac_arm64_package : mac_load_keychain package_dmg
201+ @printf " $( GREEN) Build finished$( NC) : macOS arm64\n"
173202win : dep
174203 @make win_x64
175204 @make win_arm64
@@ -185,6 +214,17 @@ win_arm64: arch := arm64
185214win_arm64 : local_proxy_postfix := .exe
186215win_arm64 : dep compile_localproxy package_zip
187216 @printf " $( GREEN) Build finished$( NC) : Windows arm64\n"
217+ # Package-only targets for CI parallel jobs
218+ win_x64_package : os := win
219+ win_x64_package : os_api := win32
220+ win_x64_package : arch := x64
221+ win_x64_package : package_zip
222+ @printf " $( GREEN) Build finished$( NC) : Windows x64\n"
223+ win_arm64_package : os := win
224+ win_arm64_package : os_api := win32
225+ win_arm64_package : arch := arm64
226+ win_arm64_package : package_zip
227+ @printf " $( GREEN) Build finished$( NC) : Windows arm64\n"
188228linux : dep
189229 @make linux_x64
190230 @make linux_arm64
@@ -200,6 +240,17 @@ linux_arm64: arch := arm64
200240linux_arm64 : local_proxy_postfix :=
201241linux_arm64 : dep compile_localproxy package_zip
202242 @printf " $( GREEN) Build finished$( NC) : Linux arm64\n"
243+ # Package-only targets for CI parallel jobs
244+ linux_x64_package : os := linux
245+ linux_x64_package : os_api := linux
246+ linux_x64_package : arch := x64
247+ linux_x64_package : package_zip
248+ @printf " $( GREEN) Build finished$( NC) : Linux x64\n"
249+ linux_arm64_package : os := linux
250+ linux_arm64_package : os_api := linux
251+ linux_arm64_package : arch := arm64
252+ linux_arm64_package : package_zip
253+ @printf " $( GREEN) Build finished$( NC) : Linux arm64\n"
203254build_docker : compile
204255 docker build -t backend.ai-webui:$(BUILD_DATE ) .
205256i18n :
0 commit comments