@@ -19,6 +19,7 @@ MAJOR_MINOR_PATCH := $(word 1,$(subst -, ,$(TAG_VERSION)))
1919FFMPEG_TAG_VERSION := $(or $(FFMPEG_TAG_VERSION ) ,$(FFMPEG_TAG_VERSION ) ,ffmpeg-6.1)
2020FFMPEG_BASED_NAME := $(or $(FFMPEG_BASED_NAME ) ,$(FFMPEG_BASED_NAME ) ,ndviet)
2121FFMPEG_BASED_TAG := $(or $(FFMPEG_BASED_TAG ) ,$(FFMPEG_BASED_TAG ) ,6.1-ubuntu2204)
22+ PLATFORMS := $(or $(PLATFORMS ) ,$(PLATFORMS ) ,linux/arm64)
2223
2324all : hub \
2425 distributor \
@@ -134,6 +135,77 @@ video:
134135 cd ./Video && docker build $(BUILD_ARGS ) --build-arg NAMESPACE=$(FFMPEG_BASED_NAME ) --build-arg BASED_TAG=$(FFMPEG_BASED_TAG ) -t $(NAME ) /video:$(FFMPEG_TAG_VERSION ) -$(BUILD_DATE ) .
135136
136137
138+ # Register linux/arm64 and linux/arm/v7 architectures for building with BuildKit
139+ # docker run --rm --privileged aptman/qus -s -- -p # for actions
140+ qemu_user_static :
141+ docker run --rm --privileged aptman/qus -- -r ; \
142+ docker run --rm --privileged aptman/qus -s -- -p
143+
144+ # Build multi-arch images
145+ all_multi : base_multi \
146+ hub_multi \
147+ chromium_multi \
148+ firefox_multi \
149+ docker_multi \
150+ standalone_chromium_multi \
151+ standalone_firefox_multi \
152+ standalone_docker_multi \
153+ distributor_multi \
154+ router_multi \
155+ sessions_multi \
156+ sessionqueue_multi \
157+ event_bus_multi \
158+ video_multi
159+
160+ build_multi : all_multi
161+
162+ ci_multi : build_multi test_multi_arch
163+
164+ base_multi : qemu_user_static
165+ cd ./Base && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) --build-arg VERSION=$(BASE_VERSION ) --build-arg RELEASE=$(BASE_RELEASE ) -t $(NAME ) /base:$(TAG_VERSION ) .
166+
167+ hub_multi : base_multi
168+ cd ./Hub && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /hub:$(TAG_VERSION ) .
169+
170+ distributor_multi :
171+ cd ./Distributor && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /distributor:$(TAG_VERSION ) .
172+
173+ router_multi :
174+ cd ./Router && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /router:$(TAG_VERSION ) .
175+
176+ sessions_multi :
177+ cd ./Sessions && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /sessions:$(TAG_VERSION ) .
178+
179+ sessionqueue_multi :
180+ cd ./SessionQueue && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /session-queue:$(TAG_VERSION ) .
181+
182+ event_bus_multi : base_multi
183+ cd ./EventBus && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /event-bus:$(TAG_VERSION ) .
184+
185+ node_base_multi : base_multi
186+ cd ./NodeBase && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /node-base:$(TAG_VERSION ) .
187+
188+ chromium_multi : node_base_multi
189+ cd ./NodeChromium && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /node-chromium:$(TAG_VERSION ) .
190+
191+ firefox_multi : node_base_multi
192+ cd ./NodeFirefox && docker buildx build -f Dockerfile.multi-arch --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /node-firefox:$(TAG_VERSION ) .
193+
194+ docker_multi : base_multi
195+ cd ./NodeDocker && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /node-docker:$(TAG_VERSION ) .
196+
197+ standalone_firefox_multi : firefox_multi
198+ cd ./Standalone && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) --build-arg BASE=node-firefox -t $(NAME ) /standalone-firefox:$(TAG_VERSION ) .
199+
200+ standalone_chromium_multi : chromium_multi
201+ cd ./Standalone && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) --build-arg BASE=node-chromium -t $(NAME ) /standalone-chromium:$(TAG_VERSION ) .
202+
203+ standalone_docker_multi : docker_multi
204+ cd ./StandaloneDocker && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /standalone-docker:$(TAG_VERSION ) .
205+
206+ video_multi :
207+ 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 ) .
208+
137209# https://github.com/SeleniumHQ/docker-selenium/issues/992
138210# Additional tags for browser images
139211tag_and_push_browser_images : tag_and_push_chrome_images tag_and_push_firefox_images tag_and_push_edge_images
@@ -166,6 +238,58 @@ tag_latest:
166238 docker tag $(NAME ) /standalone-docker:$(TAG_VERSION ) $(NAME ) /standalone-docker:latest
167239 docker tag $(NAME ) /video:$(FFMPEG_TAG_VERSION ) -$(BUILD_DATE ) $(NAME ) /video:latest
168240
241+ # Additional tags for browser images
242+ tag_and_push_multi_arch_browser_images : tag_and_push_multi_arch_chromium_images tag_and_push_multi_arch_firefox_images
243+
244+ tag_and_push_multi_arch_chromium_images :
245+ ./tag_and_push_multi-arch_browser_images.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) chromium
246+
247+ tag_and_push_multi_arch_firefox_images :
248+ ./tag_and_push_multi-arch_browser_images.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) firefox
249+
250+ tag_major_minor_multi_arch :
251+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) base
252+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) hub
253+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) node-base
254+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) node-docker
255+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) standalone-docker
256+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) sessions
257+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) session-queue
258+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) event-bus
259+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) router
260+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) distributor
261+
262+ tag_multi_arch_latest :
263+ docker buildx imagetools create -t ${NAMESPACE} /base:latest ${NAMESPACE} /base:${TAG_VERSION}
264+ docker buildx imagetools create -t ${NAMESPACE} /hub:latest ${NAMESPACE} /hub:${TAG_VERSION}
265+ docker buildx imagetools create -t ${NAMESPACE} /node-base:latest ${NAMESPACE} /node-base:${TAG_VERSION}
266+ docker buildx imagetools create -t ${NAMESPACE} /node-chromium:latest ${NAMESPACE} /node-chromium:${TAG_VERSION}
267+ docker buildx imagetools create -t ${NAMESPACE} /node-firefox:latest ${NAMESPACE} /node-firefox:${TAG_VERSION}
268+ docker buildx imagetools create -t ${NAMESPACE} /standalone-chromium:latest ${NAMESPACE} /standalone-chromium:${TAG_VERSION}
269+ docker buildx imagetools create -t ${NAMESPACE} /standalone-firefox:latest ${NAMESPACE} /standalone-firefox:${TAG_VERSION}
270+ docker buildx imagetools create -t ${NAMESPACE} /node-docker:latest ${NAMESPACE} /node-docker:${TAG_VERSION}
271+ docker buildx imagetools create -t ${NAMESPACE} /standalone-docker:latest ${NAMESPACE} /standalone-docker:${TAG_VERSION}
272+ docker buildx imagetools create -t ${NAMESPACE} /sessions:latest ${NAMESPACE} /sessions:${TAG_VERSION}
273+ docker buildx imagetools create -t ${NAMESPACE} /session-queue:latest ${NAMESPACE} /session-queue:${TAG_VERSION}
274+ docker buildx imagetools create -t ${NAMESPACE} /event-bus:latest ${NAMESPACE} /event-bus:${TAG_VERSION}
275+ docker buildx imagetools create -t ${NAMESPACE} /router:latest ${NAMESPACE} /router:${TAG_VERSION}
276+ docker buildx imagetools create -t ${NAMESPACE} /distributor:latest ${NAMESPACE} /distributor:${TAG_VERSION}
277+
278+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) base latest
279+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) hub latest
280+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-base latest
281+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-chromium latest
282+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-firefox latest
283+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) standalone-chromium latest
284+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) standalone-firefox latest
285+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-docker latest
286+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) standalone-docker latest
287+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) sessions latest
288+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) session-queue latest
289+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) event-bus latest
290+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) router latest
291+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) distributor latest
292+
169293release_latest :
170294 docker push $(NAME ) /base:latest
171295 docker push $(NAME ) /hub:latest
@@ -382,6 +506,25 @@ test_firefox:
382506test_firefox_standalone :
383507 VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) ./tests/bootstrap.sh StandaloneFirefox
384508
509+ # Test multi-arch container images
510+ test_multi_arch : test_chromium_multi \
511+ test_firefox_multi \
512+ test_chromium_standalone_multi \
513+ test_firefox_standalone_multi
514+
515+
516+ test_chromium_multi :
517+ VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) ./tests/bootstrap.sh NodeChromium
518+
519+ test_chromium_standalone_multi :
520+ VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) ./tests/bootstrap.sh StandaloneChromium
521+
522+ test_firefox_multi :
523+ VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) ./tests/bootstrap.sh NodeFirefox
524+
525+ test_firefox_standalone_multi :
526+ VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) ./tests/bootstrap.sh StandaloneFirefox
527+
385528test_parallel : hub chrome firefox edge
386529 for node in DeploymentAutoscaling JobAutoscaling ; do \
387530 cd ./tests || true ; \
0 commit comments