Skip to content
This repository was archived by the owner on Jun 22, 2024. It is now read-only.

Commit 334c86e

Browse files
Merge pull request #30 from seleniumhq-community/full-grid
Adding the Full grid components to the build and deploy process We've been building off of this branch for months, and it's working as expected, with occasional issues related to either CircleCI runners or the fact that Debian Sid isn't always stable.
2 parents f7e55ef + 4041acc commit 334c86e

11 files changed

+643
-52
lines changed

.circleci/config.yml

Lines changed: 199 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ executors:
1010
machine:
1111
image: ubuntu-2004:current
1212
resource_class: medium
13+
ubuntu2004arm64large:
14+
machine:
15+
image: ubuntu-2004:current
16+
resource_class: arm-large
1317

1418
jobs:
1519
build-multi-arch:
@@ -181,6 +185,129 @@ jobs:
181185
export GITHUB_TOKEN=$(sh get-access-token.sh | tail -n 1)
182186
github-release release --tag $RELEASE_TAG --name $RELEASE_TAG --description "`cat release_notes.md`"
183187
188+
deploy-multi-arch-full-grid:
189+
parameters:
190+
platforms:
191+
type: string
192+
build-args:
193+
type: string
194+
machine-type:
195+
type: executor
196+
circle-job:
197+
type: env_var_name
198+
default: CIRCLE_JOB
199+
make-targets:
200+
type: string
201+
executor: << parameters.machine-type >>
202+
environment:
203+
NAMESPACE: seleniarm
204+
PLATFORMS: << parameters.platforms >>
205+
BUILD_ARGS: << parameters.build-args >>
206+
MAKE_TARGETS: << parameters.make-targets >>
207+
DEPLOY_BRANCH: full-grid
208+
GITHUB_USER: seleniumhq-community
209+
GITHUB_REPO: docker-seleniarm
210+
steps:
211+
- checkout
212+
- run:
213+
name: Debug
214+
command: |
215+
echo $CIRCLE_JOB
216+
echo ${<< parameters.circle-job >>}
217+
- when:
218+
condition:
219+
equal: [ base_multi, << parameters.make-targets >> ]
220+
steps:
221+
- run: echo "CIRCLE_JOB name is deploy-multi-arch-base"
222+
- when:
223+
condition:
224+
equal: [ tag_and_push_multi_arch_browser_images, << parameters.make-targets >> ]
225+
steps:
226+
- run: echo "CIRCLE_JOB name is release notes, so we proceed"
227+
- run:
228+
name: "Prepare workflow environment variables"
229+
command: |
230+
export SELENIUM_VERSION=$(grep selenium-server Base/Dockerfile | sed 's/.*-\([^-]*\)\.jar \\/\1/' | head -n 1)
231+
echo "Prepare workflow environment variables"
232+
echo 'export BRANCH='$SELENIUM_VERSION >> $BASH_ENV
233+
echo 'export BUILD_DATE=$(date '+%Y%m%d')' >> $BASH_ENV
234+
#echo 'export BUILD_DATE=20230110' >> $BASH_ENV
235+
echo 'export RELEASE_TAG="seleniarm-v`echo $BRANCH`-`echo $BUILD_DATE`"' >> $BASH_ENV
236+
source $BASH_ENV
237+
echo "Workflow environment variables:"
238+
echo BRANCH="$BRANCH"
239+
echo BUILD_DATE="$BUILD_DATE"
240+
echo RELEASE_TAG="$RELEASE_TAG"
241+
echo NAMESPACE="$NAMESPACE"
242+
echo PLATFORMS="$PLATFORMS"
243+
echo BUILD_ARGS="$BUILD_ARGS"
244+
echo DEPLOY_BRANCH="$DEPLOY_BRANCH"
245+
echo GITHUB_USER="$GITHUB_USER"
246+
echo GITHUB_REPO="$GITHUB_REPO"
247+
- run: uname -a
248+
- run: docker info
249+
- run:
250+
name: "Check if branch is deployable (contains [deploy] in commit msg on $DEPLOY_BRANCH"
251+
command: |
252+
echo BRANCH="$BRANCH"
253+
echo BUILD_DATE="$BUILD_DATE"
254+
echo RELEASE_TAG="$RELEASE_TAG"
255+
export CI_DEPLOY=`git log --format=oneline -n 1 | grep '\[deploy\]'` && echo "$CI_DEPLOY"
256+
if [ -z "$CI_DEPLOY" ] || [ "$CIRCLE_BRANCH" != "$DEPLOY_BRANCH" ]; then
257+
echo "Cancelling run. Pass [deploy] in commit message on $DEPLOY_BRANCH to deploy"
258+
circleci-agent step halt
259+
else
260+
echo "[deploy] is present in commit message to $DEPLOY_BRANCH. Running workflow to deploy container images"
261+
fi
262+
- run:
263+
name: "Build and Push Docker images"
264+
command: |
265+
echo "Login to Docker, and setup to use a buildx builder and push built multi-arch images"
266+
docker buildx use `docker buildx create`
267+
docker buildx ls
268+
# For release notes, we'll pull images anonymously without login.
269+
# if [ "$MAKE_TARGETS" != "tag_and_push_multi_arch_browser_images" ]; then
270+
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
271+
# fi
272+
echo BRANCH="$BRANCH"
273+
echo BUILD_DATE="$BUILD_DATE"
274+
echo RELEASE_TAG="$RELEASE_TAG"
275+
export CI_DEPLOY=`git log --format=oneline -n 1 | grep '\[deploy\]'` && echo "$CI_DEPLOY"
276+
#NAME=${NAMESPACE} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} PLATFORMS=${PLATFORMS} BUILD_ARGS=${BUILD_ARGS} sh build-and-push.sh $MAKE_TARGETS
277+
278+
export NAME=${NAMESPACE}
279+
export VERSION=${BRANCH}
280+
export BUILD_DATE=${BUILD_DATE}
281+
export PLATFORMS=${PLATFORMS}
282+
export BUILD_ARGS=${BUILD_ARGS}
283+
# If there are build errors, let's retry
284+
max=5; until sh build-and-push.sh $MAKE_TARGETS; do if [ $((--max)) = 0 ]; then echo Giving up; break; fi; done
285+
286+
- when:
287+
condition:
288+
equal: [ tag_and_push_multi_arch_browser_images, << parameters.make-targets >> ]
289+
steps:
290+
- run:
291+
name: "Push major/minor and browser tags to Docker Hub and update latest tag"
292+
command: |
293+
NAME=${NAMESPACE} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} PUSH_IMAGE=true make tag_and_push_multi_arch_browser_images
294+
NAME=${NAMESPACE} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} make tag_multi_arch_latest
295+
- run:
296+
name: "Push major/minor tags to Docker Hub for non-browser images"
297+
command: |
298+
NAME=${NAMESPACE} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} PUSH_IMAGE=true make tag_major_minor_multi_arch
299+
- run:
300+
name: "Generate release notes"
301+
command: |
302+
docker logout
303+
export LATEST_TAG=$(git describe --tags --abbrev=0)
304+
sh generate_multi-arch-release_notes.sh $LATEST_TAG $CIRCLE_BRANCH $BRANCH $BUILD_DATE
305+
sudo apt-get update -y && sudo apt-get install python3-venv
306+
go install github.com/github-release/[email protected]
307+
cat release_notes.md
308+
export GITHUB_TOKEN=$(sh get-access-token.sh | tail -n 1)
309+
github-release release --tag $RELEASE_TAG --name $RELEASE_TAG --description "`cat release_notes.md`"
310+
184311
workflows:
185312
build-and-test-multi-arch:
186313
jobs:
@@ -203,15 +330,82 @@ workflows:
203330
platforms: linux/amd64
204331
machine-type: ubuntu2004amd64
205332

206-
deploy-multi-arch:
333+
# deploy-multi-arch:
334+
# jobs:
335+
# - deploy-multi-arch:
336+
# name: deploy-multi-arch
337+
# platforms: linux/arm64,linux/amd64,linux/arm/v7
338+
# build-args: --push
339+
# machine-type: ubuntu2004arm64
340+
# filters:
341+
# branches:
342+
# only:
343+
# - trunk
344+
345+
deploy-multi-arch-full-grid:
207346
jobs:
208-
- deploy-multi-arch:
209-
name: deploy-multi-arch
347+
- deploy-multi-arch-full-grid:
348+
name: deploy-multi-arch-base
349+
platforms: linux/arm64,linux/amd64,linux/arm/v7
350+
build-args: --push
351+
make-targets: base_multi
352+
machine-type: ubuntu2004arm64large
353+
filters:
354+
branches:
355+
only:
356+
- full-grid
357+
- deploy-multi-arch-full-grid:
358+
name: deploy-multi-arch-full-grid
359+
requires: [deploy-multi-arch-base]
210360
platforms: linux/arm64,linux/amd64,linux/arm/v7
211361
build-args: --push
362+
make-targets: grid_multi
212363
machine-type: ubuntu2004arm64
213364
filters:
214365
branches:
215366
only:
216-
- trunk
217-
367+
- full-grid
368+
- deploy-multi-arch-full-grid:
369+
name: deploy-multi-arch-node-base
370+
requires: [deploy-multi-arch-base]
371+
platforms: linux/arm64,linux/amd64,linux/arm/v7
372+
build-args: --push
373+
make-targets: node_base_multi
374+
machine-type: ubuntu2004arm64large
375+
filters:
376+
branches:
377+
only:
378+
- full-grid
379+
- deploy-multi-arch-full-grid:
380+
name: deploy-multi-arch-firefox
381+
requires: [deploy-multi-arch-node-base]
382+
platforms: linux/arm64,linux/amd64,linux/arm/v7
383+
build-args: --push
384+
make-targets: firefox_multi
385+
machine-type: ubuntu2004arm64large
386+
filters:
387+
branches:
388+
only:
389+
- full-grid
390+
- deploy-multi-arch-full-grid:
391+
name: deploy-multi-arch-chromium
392+
requires: [deploy-multi-arch-node-base]
393+
platforms: linux/arm64,linux/amd64,linux/arm/v7
394+
build-args: --push
395+
make-targets: chromium_multi
396+
machine-type: ubuntu2004arm64large
397+
filters:
398+
branches:
399+
only:
400+
- full-grid
401+
- deploy-multi-arch-full-grid:
402+
name: deploy-multi-arch-release-notes
403+
requires: [deploy-multi-arch-firefox,deploy-multi-arch-chromium]
404+
platforms: linux/arm64,linux/amd64,linux/arm/v7
405+
build-args: --push
406+
make-targets: tag_and_push_multi_arch_browser_images
407+
machine-type: ubuntu2004arm64
408+
filters:
409+
branches:
410+
only:
411+
- full-grid

Base/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#FROM ubuntu:focal-20220415
66
#FROM ubuntu:focal-20220531
77
#FROM ubuntu:focal-20230301
8-
FROM debian:latest
8+
FROM debian:bullseye
99
LABEL authors="Selenium <[email protected]>"
1010

1111
#================================================

Makefile

Lines changed: 72 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -128,15 +128,21 @@ video:
128128
qemu_user_static:
129129
docker run --rm --privileged aptman/qus -- -r ; \
130130
docker run --rm --privileged aptman/qus -s -- -p
131-
#docker run --rm --privileged -v /home/debian/qemu-binfmt/qemu-binfmt-conf.sh:/qus/qemu-binfmt-conf.sh aptman/qus -s -- -p
132131

133-
# Generate and build multi-arch images
132+
# Build multi-arch images
134133
all_multi: base_multi \
135-
hub_multi \
134+
hub_multi \
136135
chromium_multi \
137136
firefox_multi \
137+
docker_multi \
138138
standalone_chromium_multi \
139-
standalone_firefox_multi
139+
standalone_firefox_multi \
140+
standalone_docker_multi \
141+
distributor_multi \
142+
router_multi \
143+
sessions_multi \
144+
sessionqueue_multi \
145+
event_bus_multi \
140146

141147
build_multi: all_multi
142148

@@ -148,6 +154,21 @@ base_multi: qemu_user_static
148154
hub_multi: base_multi
149155
cd ./Hub && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) -t $(NAME)/hub:$(TAG_VERSION) .
150156

157+
distributor_multi:
158+
cd ./Distributor && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) -t $(NAME)/distributor:$(TAG_VERSION) .
159+
160+
router_multi:
161+
cd ./Router && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) -t $(NAME)/router:$(TAG_VERSION) .
162+
163+
sessions_multi:
164+
cd ./Sessions && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) -t $(NAME)/sessions:$(TAG_VERSION) .
165+
166+
sessionqueue_multi:
167+
cd ./SessionQueue && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) -t $(NAME)/session-queue:$(TAG_VERSION) .
168+
169+
event_bus_multi: base_multi
170+
cd ./EventBus && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) -t $(NAME)/event-bus:$(TAG_VERSION) .
171+
151172
node_base_multi: base_multi
152173
cd ./NodeBase && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) -t $(NAME)/node-base:$(TAG_VERSION) .
153174

@@ -157,12 +178,18 @@ chromium_multi: node_base_multi
157178
firefox_multi: node_base_multi
158179
cd ./NodeFirefox && docker buildx build -f Dockerfile.multi-arch --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) -t $(NAME)/node-firefox:$(TAG_VERSION) .
159180

181+
docker_multi: base_multi
182+
cd ./NodeDocker && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) -t $(NAME)/node-docker:$(TAG_VERSION) .
183+
160184
standalone_firefox_multi: firefox_multi
161185
cd ./Standalone && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg BASE=node-firefox -t $(NAME)/standalone-firefox:$(TAG_VERSION) .
162186

163187
standalone_chromium_multi: chromium_multi
164188
cd ./Standalone && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg BASE=node-chromium -t $(NAME)/standalone-chromium:$(TAG_VERSION) .
165189

190+
standalone_docker_multi: docker_multi
191+
cd ./StandaloneDocker && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) -t $(NAME)/standalone-docker:$(TAG_VERSION) .
192+
166193
# https://github.com/SeleniumHQ/docker-selenium/issues/992
167194
# Additional tags for browser images
168195
tag_and_push_browser_images: tag_and_push_chrome_images tag_and_push_firefox_images tag_and_push_edge_images
@@ -204,14 +231,48 @@ tag_and_push_multi_arch_chromium_images:
204231
tag_and_push_multi_arch_firefox_images:
205232
./tag_and_push_multi-arch_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) firefox
206233

234+
tag_major_minor_multi_arch:
235+
./tag_and_push_multi-arch_major_minor.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) base
236+
./tag_and_push_multi-arch_major_minor.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) hub
237+
./tag_and_push_multi-arch_major_minor.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) node-base
238+
./tag_and_push_multi-arch_major_minor.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) node-docker
239+
./tag_and_push_multi-arch_major_minor.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) standalone-docker
240+
./tag_and_push_multi-arch_major_minor.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) sessions
241+
./tag_and_push_multi-arch_major_minor.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) session-queue
242+
./tag_and_push_multi-arch_major_minor.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) event-bus
243+
./tag_and_push_multi-arch_major_minor.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) router
244+
./tag_and_push_multi-arch_major_minor.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) distributor
245+
207246
tag_multi_arch_latest:
208-
./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) base latest
209-
./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) hub latest
210-
./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-base latest
211-
./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-chromium latest
212-
./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-firefox latest
213-
./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) standalone-chromium latest
214-
./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) standalone-firefox latest
247+
docker buildx imagetools create -t ${NAMESPACE}/base:latest ${NAMESPACE}/base:${TAG_VERSION}
248+
docker buildx imagetools create -t ${NAMESPACE}/hub:latest ${NAMESPACE}/hub:${TAG_VERSION}
249+
docker buildx imagetools create -t ${NAMESPACE}/node-base:latest ${NAMESPACE}/node-base:${TAG_VERSION}
250+
docker buildx imagetools create -t ${NAMESPACE}/node-chromium:latest ${NAMESPACE}/node-chromium:${TAG_VERSION}
251+
docker buildx imagetools create -t ${NAMESPACE}/node-firefox:latest ${NAMESPACE}/node-firefox:${TAG_VERSION}
252+
docker buildx imagetools create -t ${NAMESPACE}/standalone-chromium:latest ${NAMESPACE}/standalone-chromium:${TAG_VERSION}
253+
docker buildx imagetools create -t ${NAMESPACE}/standalone-firefox:latest ${NAMESPACE}/standalone-firefox:${TAG_VERSION}
254+
docker buildx imagetools create -t ${NAMESPACE}/node-docker:latest ${NAMESPACE}/node-docker:${TAG_VERSION}
255+
docker buildx imagetools create -t ${NAMESPACE}/standalone-docker:latest ${NAMESPACE}/standalone-docker:${TAG_VERSION}
256+
docker buildx imagetools create -t ${NAMESPACE}/sessions:latest ${NAMESPACE}/sessions:${TAG_VERSION}
257+
docker buildx imagetools create -t ${NAMESPACE}/session-queue:latest ${NAMESPACE}/session-queue:${TAG_VERSION}
258+
docker buildx imagetools create -t ${NAMESPACE}/event-bus:latest ${NAMESPACE}/event-bus:${TAG_VERSION}
259+
docker buildx imagetools create -t ${NAMESPACE}/router:latest ${NAMESPACE}/router:${TAG_VERSION}
260+
docker buildx imagetools create -t ${NAMESPACE}/distributor:latest ${NAMESPACE}/distributor:${TAG_VERSION}
261+
262+
# ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) base latest
263+
# ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) hub latest
264+
# ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-base latest
265+
# ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-chromium latest
266+
# ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-firefox latest
267+
# ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) standalone-chromium latest
268+
# ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) standalone-firefox latest
269+
# ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) node-docker latest
270+
# ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) standalone-docker latest
271+
# ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) sessions latest
272+
# ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) session-queue latest
273+
# ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) event-bus latest
274+
# ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) router latest
275+
# ./tag-and-push-multi-arch-image.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) distributor latest
215276

216277
release_latest:
217278
docker push $(NAME)/base:latest

NodeFirefox/Dockerfile.multi-arch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ LABEL authors=${AUTHORS}
77
ARG TARGETARCH
88
ARG TARGETVARIANT
99

10-
ARG GECKODRIVER_VERSION=0.32.2
10+
ARG GECKODRIVER_VERSION=0.33.0
1111

1212
USER root
1313

@@ -24,7 +24,7 @@ USER root
2424
RUN echo "deb http://deb.debian.org/debian/ sid main" >> /etc/apt/sources.list \
2525
&& apt-get update -qqy \
2626
&& apt-get install libavcodec-extra -y \
27-
&& wget https://snapshot.debian.org/archive/debian/20230325T212848Z/pool/main/f/firefox/firefox_111.0.1-1_`dpkg --print-architecture`.deb -O firefox.deb \
27+
&& wget https://snapshot.debian.org/archive/debian/20230614T211149Z/pool/main/f/firefox/firefox_114.0-1_`dpkg --print-architecture`.deb -O firefox.deb \
2828
&& apt install ./firefox.deb -y \
2929
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/* ./firefox.deb
3030

0 commit comments

Comments
 (0)