From 611633ba9892535a121b760dbbbefcc7cbcc8742 Mon Sep 17 00:00:00 2001 From: Viet Nguyen Duc Date: Fri, 31 Oct 2025 20:52:52 +0700 Subject: [PATCH] [ci]: Build multiple versions of ChromeForTesting Signed-off-by: Viet Nguyen Duc --- .../update-dev-beta-browser-images.yml | 14 ++++- NodeChrome/install-chrome-for-testing.sh | 2 + NodeFirefox/Dockerfile | 14 +++-- README.md | 60 ++++++++++++++++--- docker-compose-v3-beta-channel.yml | 9 +++ docker-compose-v3-dev-channel.yml | 9 +++ tests/build-backward-compatible/builder.py | 3 + 7 files changed, 95 insertions(+), 16 deletions(-) diff --git a/.github/workflows/update-dev-beta-browser-images.yml b/.github/workflows/update-dev-beta-browser-images.yml index bfda1823b4..6314448952 100644 --- a/.github/workflows/update-dev-beta-browser-images.yml +++ b/.github/workflows/update-dev-beta-browser-images.yml @@ -32,26 +32,36 @@ jobs: include: - browser: chrome channel: dev + platforms: linux/amd64 - browser: chrome channel: beta + platforms: linux/amd64 - browser: firefox channel: dev + platforms: linux/amd64,linux/arm64 - browser: firefox channel: beta + platforms: linux/amd64,linux/arm64 - browser: edge channel: dev + platforms: linux/amd64 - browser: edge channel: beta + platforms: linux/amd64 - browser: chrome-for-testing channel: dev + platforms: linux/amd64 - browser: chrome-for-testing channel: beta + platforms: linux/amd64 - browser: chrome-for-testing channel: canary + platforms: linux/amd64 env: NAME: ${{ vars.DOCKER_NAMESPACE || 'selenium' }} BROWSER: ${{ matrix.browser }} CHANNEL: ${{ matrix.channel }} + PLATFORMS: ${{ matrix.platforms }} steps: - name: Checkout code @@ -91,8 +101,8 @@ jobs: - name: Build the Dev/Beta Docker container images run: | - echo VERSION=$SELENIUM_VERSION make "$BROWSER"_"$CHANNEL" standalone_"$BROWSER"_"$CHANNEL" - VERSION=$SELENIUM_VERSION make "$BROWSER"_"$CHANNEL" standalone_"$BROWSER"_"$CHANNEL" + echo VERSION=$SELENIUM_VERSION PLATFORMS=$PLATFORMS make "$BROWSER"_"$CHANNEL" standalone_"$BROWSER"_"$CHANNEL" + VERSION=$SELENIUM_VERSION PLATFORMS=$PLATFORMS make "$BROWSER"_"$CHANNEL" standalone_"$BROWSER"_"$CHANNEL" - name: Test the Dev/Beta Docker container images run: | diff --git a/NodeChrome/install-chrome-for-testing.sh b/NodeChrome/install-chrome-for-testing.sh index b2c4b73c0b..8e44342323 100644 --- a/NodeChrome/install-chrome-for-testing.sh +++ b/NodeChrome/install-chrome-for-testing.sh @@ -81,6 +81,8 @@ if [ -f "${INSTALL_DIR}/deb.deps" ]; then sed 's/libasound2\b/libasound2t64/g') echo "Dependencies: ${DEPS}" apt-get install -qqy --no-install-recommends ${DEPS} +else + apt-get install -qqy --no-install-recommends ca-certificates fonts-liberation libasound2t64 libatk-bridge2.0-0 libatk1.0-0 libatspi2.0-0 libc6 libcairo2 libcups2 libcurl3-gnutls libdbus-1-3 libdrm2 libexpat1 libgbm1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libvulkan1 libx11-6 libxcb1 libxcomposite1 libxdamage1 libxext6 libxfixes3 libxkbcommon0 libxrandr2 wget xdg-utils fi # Cleanup diff --git a/NodeFirefox/Dockerfile b/NodeFirefox/Dockerfile index 1ec7a437b5..a326a673b5 100644 --- a/NodeFirefox/Dockerfile +++ b/NodeFirefox/Dockerfile @@ -23,7 +23,12 @@ ARG FIREFOX_LANG_VERSION=${FIREFOX_VERSION} RUN apt-get update -qqy && \ FIREFOX_MAJOR_VERSION=${FIREFOX_VERSION%%.*} && \ ARCH=$(if [ "$(dpkg --print-architecture)" = "amd64" ]; then echo "x86_64"; else echo "aarch64"; fi) && \ - if [ "$(dpkg --print-architecture)" = "amd64" ] || [ $FIREFOX_VERSION = "latest" ] || [ "${FIREFOX_MAJOR_VERSION}" -ge 136 ]; then \ + # Check if FIREFOX_MAJOR_VERSION is numeric before comparison \ + case "$FIREFOX_MAJOR_VERSION" in \ + ''|*[!0-9]*) IS_NUMERIC=false ;; \ + *) IS_NUMERIC=true ;; \ + esac && \ + if [ "$(dpkg --print-architecture)" = "amd64" ] || [ $FIREFOX_VERSION = "latest" ] || [ $FIREFOX_VERSION = "beta-latest" ] || [ $FIREFOX_VERSION = "nightly-latest" ] || [ $FIREFOX_VERSION = "devedition-latest" ] || [ $FIREFOX_VERSION = "esr-latest" ] || { [ "$IS_NUMERIC" = "true" ] && [ "${FIREFOX_MAJOR_VERSION}" -ge 136 ]; }; then \ if [ $FIREFOX_VERSION = "latest" ] || [ $FIREFOX_VERSION = "beta-latest" ] || [ $FIREFOX_VERSION = "nightly-latest" ] || [ $FIREFOX_VERSION = "devedition-latest" ] || [ $FIREFOX_VERSION = "esr-latest" ]; then \ /opt/bin/install-firefox-apt.sh \ && FIREFOX_VERSION=$(echo "-$FIREFOX_VERSION" | sed 's/-latest//') \ @@ -39,13 +44,12 @@ RUN apt-get update -qqy && \ fi ; \ fi \ else \ - if [ ${FIREFOX_VERSION} = "latest" ] && [ ${FIREFOX_DOWNLOAD_URL} = "" ]; then \ - FIREFOX_VERSION="nightly-latest" ; \ + if [ ${FIREFOX_VERSION} = "latest" ] || [ ${FIREFOX_VERSION} = "beta-latest" ] || [ ${FIREFOX_VERSION} = "nightly-latest" ] || [ ${FIREFOX_VERSION} = "devedition-latest" ] || [ ${FIREFOX_VERSION} = "esr-latest" ] && [ ${FIREFOX_DOWNLOAD_URL} = "" ]; then \ /opt/bin/install-firefox-apt.sh \ && FIREFOX_VERSION=$(echo "-$FIREFOX_VERSION" | sed 's/-latest//') \ && apt install -y firefox$FIREFOX_VERSION \ && INSTALL_VIA_APT=true \ - && if [ $FIREFOX_VERSION = "-nightly" ]; then \ + && if [ $FIREFOX_VERSION = "-beta" ] || [ $FIREFOX_VERSION = "-nightly" ] || [ $FIREFOX_VERSION = "-devedition" ] || [ $FIREFOX_VERSION = "-esr" ]; then \ ln -fs $(which firefox$FIREFOX_VERSION) /usr/bin/firefox ; \ fi ; \ else \ @@ -57,7 +61,7 @@ RUN apt-get update -qqy && \ if [ "${INSTALL_VIA_APT}" != "true" ]; then \ /opt/bin/install-firefox-package.sh "${FIREFOX_DOWNLOAD_URL}" "${FIREFOX_VERSION}" ; \ fi \ - # Download the language pack for Firefox + # Download the language pack for Firefox \ && /opt/bin/get_lang_package.sh ${FIREFOX_LANG_VERSION} \ # Do one more upgrade to fix possible CVEs from Firefox dependencies && apt-get update -qqy \ diff --git a/README.md b/README.md index e8e1ebfd1f..90e8220d92 100644 --- a/README.md +++ b/README.md @@ -155,11 +155,11 @@ From image tag based `4.21.0` onwards, the architectures supported by this proje The following browsers are available in multi-arch images: -| Architecture | Chrome | Chromium | Firefox | Edge | -|:-------------------------:|:------:|:--------:|:-------:|:----:| -| x86_64 (aka amd64) | ✅ | ✅ | ✅ | ✅ | -| aarch64 (aka arm64/armv8) | ❌ | ✅ | ✅ | ❌ | -| armhf (aka arm32/armv7l) | ❌ | ❌ | ❌ | ❌ | +| Architecture | Chrome | Chromium | Firefox | Edge | CfT | +|:-------------------------:|:------:|:--------:|:-------:|:----:|-----| +| x86_64 (aka amd64) | ✅ | ✅ | ✅ | ✅ | ✅ | +| aarch64 (aka arm64/armv8) | ❌ | ✅ | ✅ | ❌ | ❌ | +| armhf (aka arm32/armv7l) | ❌ | ❌ | ❌ | ❌ | ❌ | Note: @@ -168,6 +168,8 @@ Note: - Google does not build Chrome (`google-chrome`) for Linux/ARM platforms. Hence, the Chrome (node and standalone) images are only available for AMD64. Similarly, Microsoft does not build Edge (`microsoft-edge`) for Linux/ARM platforms. +- We also supply Chrome for Testing (CfT), but it is only available for Linux/AMD64. + - For Linux/ARM use the open source Chromium browser. The Chromium (node and standalone) images are available in multi-arch. ```bash @@ -250,13 +252,13 @@ Here are the instructions to run them in Standalone mode: **Chrome Beta:** ```bash -$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:beta +$ docker run --platform linux/amd64 --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:beta ``` **Chrome Dev:** ```bash -$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:dev +$ docker run --platform linux/amd64 --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:dev ``` **Firefox Beta:** @@ -274,13 +276,31 @@ $ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalon **Edge Beta:** ```bash -$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-edge:beta +$ docker run --platform linux/amd64 --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-edge:beta ``` **Edge Dev:** ```bash -$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-edge:dev +$ docker run --platform linux/amd64 --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-edge:dev +``` + +**Chrome for Testing Beta:** + +```bash +$ docker run --platform linux/amd64 --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome-for-testing:beta +``` + +**Chrome for Testing Dev:** + +```bash +$ docker run --platform linux/amd64 --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome-for-testing:dev +``` + +**Chrome for Testing Canary:** + +```bash +$ docker run --platform linux/amd64 --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome-for-testing:canary ``` ### Dev and Beta on the Grid @@ -293,6 +313,7 @@ $ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalon services: chrome: image: selenium/node-chrome:beta + platform: linux/amd64 shm_size: 2gb depends_on: - selenium-hub @@ -301,6 +322,7 @@ services: edge: image: selenium/node-edge:beta + platform: linux/amd64 shm_size: 2gb depends_on: - selenium-hub @@ -315,6 +337,15 @@ services: environment: - SE_EVENT_BUS_HOST=selenium-hub + chrome-for-testing: + image: selenium/node-chrome-for-testing:beta + platform: linux/amd64 + shm_size: 2gb + depends_on: + - selenium-hub + environment: + - SE_EVENT_BUS_HOST=selenium-hub + selenium-hub: image: selenium/hub:latest container_name: selenium-hub @@ -332,6 +363,7 @@ services: services: chrome: image: selenium/node-chrome:dev + platform: linux/amd64 shm_size: 2gb depends_on: - selenium-hub @@ -340,6 +372,7 @@ services: edge: image: selenium/node-edge:dev + platform: linux/amd64 shm_size: 2gb depends_on: - selenium-hub @@ -354,6 +387,15 @@ services: environment: - SE_EVENT_BUS_HOST=selenium-hub + chrome-for-testing: + image: selenium/node-chrome-for-testing:dev + platform: linux/amd64 + shm_size: 2gb + depends_on: + - selenium-hub + environment: + - SE_EVENT_BUS_HOST=selenium-hub + selenium-hub: image: selenium/hub:latest container_name: selenium-hub diff --git a/docker-compose-v3-beta-channel.yml b/docker-compose-v3-beta-channel.yml index 972fa25eda..ace57848ea 100644 --- a/docker-compose-v3-beta-channel.yml +++ b/docker-compose-v3-beta-channel.yml @@ -28,6 +28,15 @@ services: environment: - SE_EVENT_BUS_HOST=selenium-hub + chrome-for-testing: + image: selenium/node-chrome-for-testing:beta + platform: linux/amd64 + shm_size: 2gb + depends_on: + - selenium-hub + environment: + - SE_EVENT_BUS_HOST=selenium-hub + selenium-hub: image: selenium/hub:latest container_name: selenium-hub diff --git a/docker-compose-v3-dev-channel.yml b/docker-compose-v3-dev-channel.yml index d0100732ed..37d18ab1d7 100644 --- a/docker-compose-v3-dev-channel.yml +++ b/docker-compose-v3-dev-channel.yml @@ -28,6 +28,15 @@ services: environment: - SE_EVENT_BUS_HOST=selenium-hub + chrome-for-testing: + image: selenium/node-chrome-for-testing:dev + platform: linux/amd64 + shm_size: 2gb + depends_on: + - selenium-hub + environment: + - SE_EVENT_BUS_HOST=selenium-hub + selenium-hub: image: selenium/hub:latest container_name: selenium-hub diff --git a/tests/build-backward-compatible/builder.py b/tests/build-backward-compatible/builder.py index 511fed559e..ed9a855f2f 100755 --- a/tests/build-backward-compatible/builder.py +++ b/tests/build-backward-compatible/builder.py @@ -62,3 +62,6 @@ def recursive_merge(dict1, dict2): if browser_name == "chrome" or browser_name == "all": CHROME_VERSION = matrix["browser"][browser_version]["CHROME_VERSION"] f.write(f"CHROME_VERSION={CHROME_VERSION}") + if browser_name == "chrome-for-testing" or browser_name == "all": + CFT_VERSION = matrix["browser"][browser_version]["CFT_VERSION"] + f.write(f"CFT_VERSION={CFT_VERSION}")