@@ -20,6 +20,7 @@ MAJOR_MINOR_PATCH := $(word 1,$(subst -, ,$(TAG_VERSION)))
2020FFMPEG_TAG_VERSION := $(or $(FFMPEG_TAG_VERSION ) ,$(FFMPEG_TAG_VERSION ) ,ffmpeg-7.0)
2121FFMPEG_BASED_NAME := $(or $(FFMPEG_BASED_NAME ) ,$(FFMPEG_BASED_NAME ) ,ndviet)
2222FFMPEG_BASED_TAG := $(or $(FFMPEG_BASED_TAG ) ,$(FFMPEG_BASED_TAG ) ,7.0-ubuntu2204)
23+ PLATFORMS := $(or $(PLATFORMS ) ,$(PLATFORMS ) ,linux/arm64)
2324
2425all : hub \
2526 distributor \
@@ -178,6 +179,77 @@ edge_upgrade_version:
178179 docker run --rm $(NAME ) /standalone-edge:$(TAG_VERSION ) microsoft-edge --version
179180 docker run --rm $(NAME ) /standalone-edge:$(TAG_VERSION ) msedgedriver --version
180181
182+ # Register linux/arm64 and linux/arm/v7 architectures for building with BuildKit
183+ # docker run --rm --privileged aptman/qus -s -- -p # for actions
184+ qemu_user_static :
185+ docker run --rm --privileged aptman/qus -- -r ; \
186+ docker run --rm --privileged aptman/qus -s -- -p
187+
188+ # Build multi-arch images
189+ all_multi : base_multi \
190+ hub_multi \
191+ chromium_multi \
192+ firefox_multi \
193+ docker_multi \
194+ standalone_chromium_multi \
195+ standalone_firefox_multi \
196+ standalone_docker_multi \
197+ distributor_multi \
198+ router_multi \
199+ sessions_multi \
200+ sessionqueue_multi \
201+ event_bus_multi \
202+ video_multi
203+
204+ build_multi : all_multi
205+
206+ ci_multi : build_multi test_multi_arch
207+
208+ base_multi : qemu_user_static
209+ cd ./Base && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) --build-arg VERSION=$(BASE_VERSION ) --build-arg RELEASE=$(BASE_RELEASE ) -t $(NAME ) /base:$(TAG_VERSION ) .
210+
211+ hub_multi : base_multi
212+ cd ./Hub && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /hub:$(TAG_VERSION ) .
213+
214+ distributor_multi :
215+ cd ./Distributor && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /distributor:$(TAG_VERSION ) .
216+
217+ router_multi :
218+ cd ./Router && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /router:$(TAG_VERSION ) .
219+
220+ sessions_multi :
221+ cd ./Sessions && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /sessions:$(TAG_VERSION ) .
222+
223+ sessionqueue_multi :
224+ cd ./SessionQueue && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /session-queue:$(TAG_VERSION ) .
225+
226+ event_bus_multi : base_multi
227+ cd ./EventBus && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /event-bus:$(TAG_VERSION ) .
228+
229+ node_base_multi : base_multi
230+ cd ./NodeBase && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /node-base:$(TAG_VERSION ) .
231+
232+ chromium_multi : node_base_multi
233+ cd ./NodeChromium && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /node-chromium:$(TAG_VERSION ) .
234+
235+ firefox_multi : node_base_multi
236+ cd ./NodeFirefox && docker buildx build -f Dockerfile.multi-arch --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /node-firefox:$(TAG_VERSION ) .
237+
238+ docker_multi : base_multi
239+ cd ./NodeDocker && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /node-docker:$(TAG_VERSION ) .
240+
241+ standalone_firefox_multi : firefox_multi
242+ cd ./Standalone && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) --build-arg BASE=node-firefox -t $(NAME ) /standalone-firefox:$(TAG_VERSION ) .
243+
244+ standalone_chromium_multi : chromium_multi
245+ cd ./Standalone && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) --build-arg BASE=node-chromium -t $(NAME ) /standalone-chromium:$(TAG_VERSION ) .
246+
247+ standalone_docker_multi : docker_multi
248+ cd ./StandaloneDocker && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /standalone-docker:$(TAG_VERSION ) .
249+
250+ video_multi :
251+ cd ./Video && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) --build-arg NAMESPACE=$(FFMPEG_BASED_NAME ) --build-arg BASED_TAG=$(FFMPEG_BASED_TAG ) -t $(NAME ) /video:$(FFMPEG_TAG_VERSION ) -$(BUILD_DATE ) .
252+
181253# https://github.com/SeleniumHQ/docker-selenium/issues/992
182254# Additional tags for browser images
183255tag_and_push_browser_images : tag_and_push_chrome_images tag_and_push_firefox_images tag_and_push_edge_images
@@ -210,6 +282,58 @@ tag_latest:
210282 docker tag $(NAME ) /standalone-docker:$(TAG_VERSION ) $(NAME ) /standalone-docker:latest
211283 docker tag $(NAME ) /video:$(FFMPEG_TAG_VERSION ) -$(BUILD_DATE ) $(NAME ) /video:latest
212284
285+ # Additional tags for browser images
286+ tag_and_push_multi_arch_browser_images : tag_and_push_multi_arch_chromium_images tag_and_push_multi_arch_firefox_images
287+
288+ tag_and_push_multi_arch_chromium_images :
289+ ./tag_and_push_multi-arch_browser_images.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) chromium
290+
291+ tag_and_push_multi_arch_firefox_images :
292+ ./tag_and_push_multi-arch_browser_images.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) firefox
293+
294+ tag_major_minor_multi_arch :
295+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) base
296+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) hub
297+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) node-base
298+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) node-docker
299+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) standalone-docker
300+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) sessions
301+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) session-queue
302+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) event-bus
303+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) router
304+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) distributor
305+
306+ tag_multi_arch_latest :
307+ docker buildx imagetools create -t ${NAMESPACE} /base:latest ${NAMESPACE} /base:${TAG_VERSION}
308+ docker buildx imagetools create -t ${NAMESPACE} /hub:latest ${NAMESPACE} /hub:${TAG_VERSION}
309+ docker buildx imagetools create -t ${NAMESPACE} /node-base:latest ${NAMESPACE} /node-base:${TAG_VERSION}
310+ docker buildx imagetools create -t ${NAMESPACE} /node-chromium:latest ${NAMESPACE} /node-chromium:${TAG_VERSION}
311+ docker buildx imagetools create -t ${NAMESPACE} /node-firefox:latest ${NAMESPACE} /node-firefox:${TAG_VERSION}
312+ docker buildx imagetools create -t ${NAMESPACE} /standalone-chromium:latest ${NAMESPACE} /standalone-chromium:${TAG_VERSION}
313+ docker buildx imagetools create -t ${NAMESPACE} /standalone-firefox:latest ${NAMESPACE} /standalone-firefox:${TAG_VERSION}
314+ docker buildx imagetools create -t ${NAMESPACE} /node-docker:latest ${NAMESPACE} /node-docker:${TAG_VERSION}
315+ docker buildx imagetools create -t ${NAMESPACE} /standalone-docker:latest ${NAMESPACE} /standalone-docker:${TAG_VERSION}
316+ docker buildx imagetools create -t ${NAMESPACE} /sessions:latest ${NAMESPACE} /sessions:${TAG_VERSION}
317+ docker buildx imagetools create -t ${NAMESPACE} /session-queue:latest ${NAMESPACE} /session-queue:${TAG_VERSION}
318+ docker buildx imagetools create -t ${NAMESPACE} /event-bus:latest ${NAMESPACE} /event-bus:${TAG_VERSION}
319+ docker buildx imagetools create -t ${NAMESPACE} /router:latest ${NAMESPACE} /router:${TAG_VERSION}
320+ docker buildx imagetools create -t ${NAMESPACE} /distributor:latest ${NAMESPACE} /distributor:${TAG_VERSION}
321+
322+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) base latest
323+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) hub latest
324+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-base latest
325+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-chromium latest
326+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-firefox latest
327+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) standalone-chromium latest
328+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) standalone-firefox latest
329+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-docker latest
330+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) standalone-docker latest
331+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) sessions latest
332+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) session-queue latest
333+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) event-bus latest
334+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) router latest
335+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) distributor latest
336+
213337release_latest :
214338 docker push $(NAME ) /base:latest
215339 docker push $(NAME ) /hub:latest
@@ -426,6 +550,25 @@ test_firefox:
426550test_firefox_standalone :
427551 VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) BINDING_VERSION=$(BINDING_VERSION ) ./tests/bootstrap.sh StandaloneFirefox
428552
553+ # Test multi-arch container images
554+ test_multi_arch : test_chromium_multi \
555+ test_firefox_multi \
556+ test_chromium_standalone_multi \
557+ test_firefox_standalone_multi
558+
559+
560+ test_chromium_multi :
561+ VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) ./tests/bootstrap.sh NodeChromium
562+
563+ test_chromium_standalone_multi :
564+ VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) ./tests/bootstrap.sh StandaloneChromium
565+
566+ test_firefox_multi :
567+ VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) ./tests/bootstrap.sh NodeFirefox
568+
569+ test_firefox_standalone_multi :
570+ VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) ./tests/bootstrap.sh StandaloneFirefox
571+
429572test_parallel : hub chrome firefox edge
430573 sudo rm -rf ./tests/tests
431574 for node in DeploymentAutoscaling JobAutoscaling ; do \
0 commit comments