@@ -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,81 @@ 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+ uploader_multi \
159+ video_multi
160+
161+ build_multi : all_multi
162+
163+ ci_multi : build_multi test_multi_arch
164+
165+ base_multi : qemu_user_static
166+ cd ./Base && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) --build-arg VERSION=$(BASE_VERSION ) --build-arg RELEASE=$(BASE_RELEASE ) -t $(NAME ) /base:$(TAG_VERSION ) .
167+
168+ hub_multi : base_multi
169+ cd ./Hub && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /hub:$(TAG_VERSION ) .
170+
171+ distributor_multi :
172+ cd ./Distributor && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /distributor:$(TAG_VERSION ) .
173+
174+ router_multi :
175+ cd ./Router && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /router:$(TAG_VERSION ) .
176+
177+ sessions_multi :
178+ cd ./Sessions && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /sessions:$(TAG_VERSION ) .
179+
180+ sessionqueue_multi :
181+ cd ./SessionQueue && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /session-queue:$(TAG_VERSION ) .
182+
183+ event_bus_multi : base_multi
184+ cd ./EventBus && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /event-bus:$(TAG_VERSION ) .
185+
186+ node_base_multi : base_multi
187+ cd ./NodeBase && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /node-base:$(TAG_VERSION ) .
188+
189+ chromium_multi : node_base_multi
190+ cd ./NodeChromium && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /node-chromium:$(TAG_VERSION ) .
191+
192+ firefox_multi : node_base_multi
193+ cd ./NodeFirefox && docker buildx build -f Dockerfile.multi-arch --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /node-firefox:$(TAG_VERSION ) .
194+
195+ docker_multi : base_multi
196+ cd ./NodeDocker && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /node-docker:$(TAG_VERSION ) .
197+
198+ standalone_firefox_multi : firefox_multi
199+ cd ./Standalone && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) --build-arg BASE=node-firefox -t $(NAME ) /standalone-firefox:$(TAG_VERSION ) .
200+
201+ standalone_chromium_multi : chromium_multi
202+ cd ./Standalone && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) --build-arg BASE=node-chromium -t $(NAME ) /standalone-chromium:$(TAG_VERSION ) .
203+
204+ standalone_docker_multi : docker_multi
205+ cd ./StandaloneDocker && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) $(FROM_IMAGE_ARGS ) -t $(NAME ) /standalone-docker:$(TAG_VERSION ) .
206+
207+ uploader_multi :
208+ cd ./Uploader && docker buildx build --platform $(PLATFORMS ) $(BUILD_ARGS ) --build-arg BASED_TAG=$(RCLONE_BASED_TAG ) -t $(NAME ) /uploader:$(RCLONE_TAG_VERSION ) -$(BUILD_DATE ) .
209+
210+ video_multi :
211+ 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 ) .
212+
137213# https://github.com/SeleniumHQ/docker-selenium/issues/992
138214# Additional tags for browser images
139215tag_and_push_browser_images : tag_and_push_chrome_images tag_and_push_firefox_images tag_and_push_edge_images
@@ -166,6 +242,58 @@ tag_latest:
166242 docker tag $(NAME ) /standalone-docker:$(TAG_VERSION ) $(NAME ) /standalone-docker:latest
167243 docker tag $(NAME ) /video:$(FFMPEG_TAG_VERSION ) -$(BUILD_DATE ) $(NAME ) /video:latest
168244
245+ # Additional tags for browser images
246+ tag_and_push_multi_arch_browser_images : tag_and_push_multi_arch_chromium_images tag_and_push_multi_arch_firefox_images
247+
248+ tag_and_push_multi_arch_chromium_images :
249+ ./tag_and_push_multi-arch_browser_images.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) chromium
250+
251+ tag_and_push_multi_arch_firefox_images :
252+ ./tag_and_push_multi-arch_browser_images.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) firefox
253+
254+ tag_major_minor_multi_arch :
255+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) base
256+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) hub
257+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) node-base
258+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) node-docker
259+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) standalone-docker
260+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) sessions
261+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) session-queue
262+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) event-bus
263+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) router
264+ ./tag_and_push_multi-arch_major_minor.sh $(VERSION ) $(BUILD_DATE ) $(NAMESPACE ) $(PUSH_IMAGE ) distributor
265+
266+ tag_multi_arch_latest :
267+ docker buildx imagetools create -t ${NAMESPACE} /base:latest ${NAMESPACE} /base:${TAG_VERSION}
268+ docker buildx imagetools create -t ${NAMESPACE} /hub:latest ${NAMESPACE} /hub:${TAG_VERSION}
269+ docker buildx imagetools create -t ${NAMESPACE} /node-base:latest ${NAMESPACE} /node-base:${TAG_VERSION}
270+ docker buildx imagetools create -t ${NAMESPACE} /node-chromium:latest ${NAMESPACE} /node-chromium:${TAG_VERSION}
271+ docker buildx imagetools create -t ${NAMESPACE} /node-firefox:latest ${NAMESPACE} /node-firefox:${TAG_VERSION}
272+ docker buildx imagetools create -t ${NAMESPACE} /standalone-chromium:latest ${NAMESPACE} /standalone-chromium:${TAG_VERSION}
273+ docker buildx imagetools create -t ${NAMESPACE} /standalone-firefox:latest ${NAMESPACE} /standalone-firefox:${TAG_VERSION}
274+ docker buildx imagetools create -t ${NAMESPACE} /node-docker:latest ${NAMESPACE} /node-docker:${TAG_VERSION}
275+ docker buildx imagetools create -t ${NAMESPACE} /standalone-docker:latest ${NAMESPACE} /standalone-docker:${TAG_VERSION}
276+ docker buildx imagetools create -t ${NAMESPACE} /sessions:latest ${NAMESPACE} /sessions:${TAG_VERSION}
277+ docker buildx imagetools create -t ${NAMESPACE} /session-queue:latest ${NAMESPACE} /session-queue:${TAG_VERSION}
278+ docker buildx imagetools create -t ${NAMESPACE} /event-bus:latest ${NAMESPACE} /event-bus:${TAG_VERSION}
279+ docker buildx imagetools create -t ${NAMESPACE} /router:latest ${NAMESPACE} /router:${TAG_VERSION}
280+ docker buildx imagetools create -t ${NAMESPACE} /distributor:latest ${NAMESPACE} /distributor:${TAG_VERSION}
281+
282+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) base latest
283+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) hub latest
284+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-base latest
285+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-chromium latest
286+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-firefox latest
287+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) standalone-chromium latest
288+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) standalone-firefox latest
289+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-docker latest
290+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) standalone-docker latest
291+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) sessions latest
292+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) session-queue latest
293+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) event-bus latest
294+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) router latest
295+ # ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) distributor latest
296+
169297release_latest :
170298 docker push $(NAME ) /base:latest
171299 docker push $(NAME ) /hub:latest
@@ -382,6 +510,27 @@ test_firefox:
382510test_firefox_standalone :
383511 VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) ./tests/bootstrap.sh StandaloneFirefox
384512
513+
514+ # Test multi-arch container images
515+ test_multi_arch : test_chromium_multi \
516+ test_firefox_multi \
517+ test_chromium_standalone_multi \
518+ test_firefox_standalone_multi
519+
520+
521+ test_chromium_multi :
522+ VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) ./tests/bootstrap.sh NodeChromium
523+
524+ test_chromium_standalone_multi :
525+ VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) ./tests/bootstrap.sh StandaloneChromium
526+
527+ test_firefox_multi :
528+ VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) ./tests/bootstrap.sh NodeFirefox
529+
530+ test_firefox_standalone_multi :
531+ VERSION=$(TAG_VERSION ) NAMESPACE=$(NAMESPACE ) ./tests/bootstrap.sh StandaloneFirefox
532+
533+
385534# This should run on its own CI job. There is no need to combine it with the other tests.
386535# Its main purpose is to check that a video file was generated.
387536test_video : video hub chrome firefox edge
0 commit comments