Skip to content

Commit

Permalink
[ci] Add workflow to build image with specific browser version for Fi…
Browse files Browse the repository at this point in the history
…refox

Signed-off-by: Viet Nguyen Duc <[email protected]>
  • Loading branch information
VietND96 committed Feb 2, 2025
1 parent 43e4543 commit 7cdcd1a
Show file tree
Hide file tree
Showing 5 changed files with 244 additions and 11 deletions.
184 changes: 184 additions & 0 deletions .github/workflows/release-firefox-versions.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
name: Deploy specific Firefox version

on:
workflow_dispatch:
inputs:
stable:
description: 'Use upstream stable build'
required: true
type: string
default: 'true'
reuse-base:
description: 'Reuse base image to build'
required: false
type: boolean
default: true
grid-version:
description: 'Grid version to build. E.g: 4.28.1. Must provide if reusing base image'
required: false
type: string
default: ''
build-date:
description: 'Build date in format YYYYMMDD. Must provide if reusing base image'
required: false
type: string
default: '20250123'
browser-name:
description: 'Browser name to build. E.g: firefox'
required: true
type: string
default: 'firefox'
browser-versions:
description: 'List browser version to build. E.g: [130, 131]'
required: true
default: '[97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134]'
push-image:
description: 'Push image after testing successfully'
required: true
type: boolean
default: false
pr-changelog:
description: 'Create a PR for CHANGELOG'
required: true
type: boolean
default: true

env:
GRID_VERSION: ${{ github.event.inputs.grid-version }}
BROWSER_NAME: ${{ github.event.inputs.browser-name }}
REUSE_BASE: ${{ github.event.inputs.reuse-base || true }}
BUILD_DATE: ${{ github.event.inputs.build-date || '' }}
NAMESPACE: ${{ vars.DOCKER_NAMESPACE || 'selenium' }}
AUTHORS: ${{ vars.AUTHORS || 'SeleniumHQ' }}
PUSH_IMAGE: ${{ github.event.inputs.push-image || false }}
PR_CHANGELOG: ${{ github.event.inputs.pr-changelog || true }}
RUN_ID: ${{ github.run_id }}

jobs:
deploy:
name: Node/Standalone Firefox
runs-on: ubuntu-24.04
permissions: write-all
strategy:
fail-fast: false
matrix:
browser-version: ${{ fromJSON(github.event.inputs.browser-versions)}}
outputs:
GRID_VERSION: ${{ steps.display_grid_version.outputs.GRID_VERSION }}
steps:
- name: Checkout code
uses: actions/checkout@main
with:
persist-credentials: false
fetch-depth: 0
- name: Set up containerd image store feature
uses: nick-invision/retry@master
with:
timeout_minutes: 10
max_attempts: 3
command: |
make setup_dev_env
- name: Output Docker info
run: docker info
- name: Set Selenium base version
uses: ./.github/actions/get-latest-upstream
with:
release: ${{ github.event.inputs.stable || true }}
gh_cli_token: ${{ secrets.GITHUB_TOKEN }}
- name: Sets build date
run: |
if [ -z "${BUILD_DATE}" ]; then
echo "BUILD_DATE=$(date '+%Y%m%d')" >> $GITHUB_ENV
else
echo "BUILD_DATE=${BUILD_DATE}" >> $GITHUB_ENV
fi
echo "NAME=${NAMESPACE}" >> $GITHUB_ENV
echo "BROWSER_VERSION=${BROWSER_VERSION}" >> $GITHUB_ENV
env:
BROWSER_VERSION: ${{ matrix.browser-version }}
- name: Get Grid version
if: env.GRID_VERSION == ''
run: |
echo ${BASE_VERSION}
echo "GRID_VERSION=${BASE_VERSION}" >> $GITHUB_ENV
- name: Display Grid version
id: display_grid_version
run: |
echo ${GRID_VERSION}
echo "GRID_VERSION=${GRID_VERSION}" >> "$GITHUB_OUTPUT"
- name: Login Docker Hub
run: docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
env:
DOCKER_USERNAME: ${{secrets.DOCKER_USERNAME}}
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
- name: Build images with Grid core ${{ env.GRID_VERSION }} and ${{ env.BROWSER_NAME }} v${{ env.BROWSER_VERSION }}
uses: nick-invision/retry@master
with:
timeout_minutes: 20
max_attempts: 3
retry_wait_seconds: 60
command: |
./tests/build-backward-compatible/bootstrap.sh ${GRID_VERSION} ${BROWSER_VERSION} ${BROWSER_NAME} ${REUSE_BASE}
- name: Build Hub image for testing
if: env.REUSE_BASE == 'false'
run: make hub
- name: Test images with Grid core ${{ env.GRID_VERSION }} and ${{ env.BROWSER_NAME }} v${{ env.BROWSER_VERSION }}
run: |
make test_firefox
make test_firefox_standalone
- name: Push images with Grid core ${{ env.GRID_VERSION }} and ${{ env.BROWSER_NAME }} v${{ env.BROWSER_VERSION }}
if: env.PUSH_IMAGE == 'true'
run: |
./tests/build-backward-compatible/bootstrap.sh ${GRID_VERSION} ${BROWSER_VERSION} ${BROWSER_NAME} ${REUSE_BASE} true true
- name: Upload changelog
if: always()
uses: actions/upload-artifact@main
with:
name: image_tags_${{ env.GRID_VERSION }}_${{ env.BROWSER_NAME }}_${{ env.BROWSER_VERSION }}
path: ./CHANGELOG/${{ env.GRID_VERSION }}/${{ env.BROWSER_NAME }}_${{ env.BROWSER_VERSION }}.md
if-no-files-found: ignore

pr-results:
name: Create a PR with changelog
if: (!failure() && !cancelled() && (github.event.inputs.pr-changelog == 'true'))
runs-on: ubuntu-24.04
needs: deploy
steps:
- name: Checkout code
uses: actions/checkout@main
with:
persist-credentials: false
fetch-depth: 0
- name: Get Grid version
run: |
echo "GRID_VERSION=${GRID_VERSION}" >> $GITHUB_ENV
env:
GRID_VERSION: ${{ needs.deploy.outputs.GRID_VERSION }}
- name: Download results
uses: actions/download-artifact@v4
with:
path: ./CHANGELOG/${{ env.GRID_VERSION }}
pattern: 'image_tags_*'
merge-multiple: 'true'
run-id: ${{ env.RUN_ID }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Commit configs
run: |
git config --local user.email "[email protected]"
git config --local user.name "Selenium CI Bot"
- name: Create Pull Request
id: cpr
uses: peter-evans/create-pull-request@main
with:
token: ${{ secrets.SELENIUM_CI_TOKEN }}
commit-message: "[ci] Upload CHANGELOG for Node/Standalone ${{ env.BROWSER_NAME }} version with Grid ${{ env.GRID_VERSION }}"
title: "[ci] Upload CHANGELOG for Node/Standalone ${{ env.BROWSER_NAME }} version with Grid ${{ env.GRID_VERSION }}"
body: "This PR contains the CHANGELOG for Node/Standalone Firefox with specific browser versions: ${{ github.event.inputs.browser-versions }}"
committer: 'Selenium CI Bot <[email protected]>'
author: 'Selenium CI Bot <[email protected]>'
branch: browser-node-changelog
- name: Check outputs
if: ${{ steps.cpr.outputs.pull-request-number }}
run: |
echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
8 changes: 6 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -196,9 +196,11 @@ edge_dev:
edge_beta:
cd ./NodeEdge && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg EDGE_VERSION=microsoft-edge-beta -t $(NAME)/node-edge:beta .

firefox: node_base
firefox_only:
cd ./NodeFirefox && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg FIREFOX_DOWNLOAD_URL=$(FIREFOX_DOWNLOAD_URL) -t $(NAME)/node-firefox:$(TAG_VERSION) .

firefox: node_base firefox_only

firefox_dev:
cd ./NodeFirefox && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg FIREFOX_VERSION=devedition-latest -t $(NAME)/node-firefox:dev .

Expand All @@ -211,9 +213,11 @@ docker: base
standalone_docker: docker
cd ./StandaloneDocker && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) -t $(NAME)/standalone-docker:$(TAG_VERSION) .

standalone_firefox: firefox
standalone_firefox_only:
cd ./Standalone && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg BASE=node-firefox -t $(NAME)/standalone-firefox:$(TAG_VERSION) .

standalone_firefox: firefox standalone_firefox_only

standalone_firefox_dev: firefox_dev
cd ./Standalone && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) --sbom=true --attest type=provenance,mode=max \
--build-arg NAMESPACE=$(NAME) --build-arg VERSION=dev --build-arg BASE=node-firefox -t $(NAME)/standalone-firefox:dev .
Expand Down
8 changes: 6 additions & 2 deletions tests/build-backward-compatible/bootstrap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,12 @@ for CDP_VERSION in "${VERSION_LIST[@]}"; do
export $(cat .env | xargs)
if [ "${BROWSER}" = "all" ] || [ "${BROWSER}" = "firefox" ] && [ "${SKIP_BUILD}" = "false" ]; then
if [ -n "${FIREFOX_VERSION}" ]; then
BUILD_ARGS="--build-arg FIREFOX_VERSION=${FIREFOX_VERSION}"
BUILD_ARGS="${BUILD_ARGS}" make standalone_firefox
BUILD_ARGS="--build-arg FIREFOX_VERSION=${FIREFOX_VERSION} --build-arg FIREFOX_DOWNLOAD_URL=${FIREFOX_DOWNLOAD_URL}"
if [ "${REUSE_BASE}" = "true" ]; then
BUILD_ARGS="${BUILD_ARGS}" make firefox_only standalone_firefox_only
else
BUILD_ARGS="${BUILD_ARGS}" make standalone_firefox
fi
else
echo "Firefox version not found in matrix for input ${CDP_VERSION}"
exit 1
Expand Down
6 changes: 6 additions & 0 deletions tests/build-backward-compatible/builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,12 @@ def recursive_merge(dict1, dict2):
if browser_name == "firefox" or browser_name == "all":
FIREFOX_VERSION = matrix["CDP"][cdp_version]["FIREFOX_VERSION"]
f.write(f"FIREFOX_VERSION={FIREFOX_VERSION}\n")
if "FIREFOX_DOWNLOAD_URL" in matrix["CDP"][cdp_version]:
FIREFOX_DOWNLOAD_URL = matrix["CDP"][cdp_version]["FIREFOX_DOWNLOAD_URL"]
f.write(f"FIREFOX_DOWNLOAD_URL={FIREFOX_DOWNLOAD_URL}\n")
if "FIREFOX_PLATFORMS" in matrix["CDP"][cdp_version]:
FIREFOX_PLATFORMS = matrix["CDP"][cdp_version]["FIREFOX_PLATFORMS"]
f.write(f"PLATFORMS={FIREFOX_PLATFORMS}\n")
if browser_name == "edge" or browser_name == "all":
EDGE_VERSION = matrix["CDP"][cdp_version]["EDGE_VERSION"]
f.write(f"EDGE_VERSION={EDGE_VERSION}\n")
Expand Down
49 changes: 42 additions & 7 deletions tests/build-backward-compatible/cdp-matrix.yml
Original file line number Diff line number Diff line change
@@ -1,38 +1,60 @@
matrix:
# List of versions get from
# Edge: https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable
# Chrome: https://www.ubuntuupdates.org/package/google_chrome/stable/main/base/google-chrome-stable or https://mirror.cs.uchicago.edu/google-chrome/pool/main/g/google-chrome-stable/
# Firefox: https://download-installer.cdn.mozilla.net/pub/firefox/releases
# Edge: https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/
# Chrome: https://www.ubuntuupdates.org/package/google_chrome/stable/main/base/google-chrome-stable/ or https://mirror.cs.uchicago.edu/google-chrome/pool/main/g/google-chrome-stable/
# Firefox: https://download-installer.cdn.mozilla.net/pub/firefox/releases/
CDP:
135:
FIREFOX_VERSION:
FIREFOX_DOWNLOAD_URL: 'https://download-installer.cdn.mozilla.net/pub/firefox/nightly/2025/01/2025-01-06-09-47-46-mozilla-central/firefox-135.0a1.en-US.linux-aarch64.deb'
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
134:
FIREFOX_VERSION: '134.0.2'
FIREFOX_DOWNLOAD_URL: 'https://download-installer.cdn.mozilla.net/pub/firefox/nightly/2024/11/2024-11-25-09-40-45-mozilla-central/firefox-134.0a1.en-US.linux-aarch64.deb'
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
133:
EDGE_VERSION:
CHROME_VERSION:
FIREFOX_VERSION: '133.0.3'
FIREFOX_DOWNLOAD_URL: 'https://download-installer.cdn.mozilla.net/pub/firefox/nightly/2024/10/2024-10-28-09-56-35-mozilla-central/firefox-133.0a1.en-US.linux-aarch64.deb'
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
#2025
132:
EDGE_VERSION: 'microsoft-edge-stable=132.0.2957.140-1'
CHROME_VERSION: 'google-chrome-stable=132.0.6834.159-1'
FIREFOX_VERSION: '132.0.2'
FIREFOX_DOWNLOAD_URL: 'https://download-installer.cdn.mozilla.net/pub/firefox/nightly/2024/09/2024-09-30-09-17-27-mozilla-central/firefox-132.0a1.en-US.linux-aarch64.deb'
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
131:
EDGE_VERSION: 'microsoft-edge-stable=131.0.2903.147-1'
CHROME_VERSION: 'google-chrome-stable=131.0.6778.264-1'
FIREFOX_VERSION: '131.0.3'
FIREFOX_DOWNLOAD_URL: 'https://download-installer.cdn.mozilla.net/pub/firefox/nightly/2024/09/2024-09-02-09-52-18-mozilla-central/firefox-131.0a1.en-US.linux-aarch64.deb'
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
130:
EDGE_VERSION: 'microsoft-edge-stable=130.0.2849.80-1'
CHROME_VERSION: 'google-chrome-stable=130.0.6723.116-1'
FIREFOX_VERSION: '130.0.1'
FIREFOX_DOWNLOAD_URL: 'https://download-installer.cdn.mozilla.net/pub/firefox/nightly/2024/08/2024-08-05-09-44-37-mozilla-central/firefox-130.0a1.en-US.linux-aarch64.deb'
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
129:
EDGE_VERSION: 'microsoft-edge-stable=129.0.2792.89-1'
CHROME_VERSION: 'google-chrome-stable=129.0.6668.100-1'
FIREFOX_VERSION: '129.0.2'
FIREFOX_DOWNLOAD_URL: 'https://download-installer.cdn.mozilla.net/pub/firefox/nightly/2024/07/2024-07-08-09-36-09-mozilla-central/firefox-129.0a1.en-US.linux-aarch64.deb'
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
128:
EDGE_VERSION: 'microsoft-edge-stable=128.0.2739.79-1'
CHROME_VERSION: 'google-chrome-stable=128.0.6613.137-1'
FIREFOX_VERSION: '128.0.3'
FIREFOX_DOWNLOAD_URL: 'https://download-installer.cdn.mozilla.net/pub/firefox/nightly/2024/06/2024-06-09-20-51-51-mozilla-central/firefox-128.0a1.en-US.linux-aarch64.deb'
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
127:
EDGE_VERSION: 'microsoft-edge-stable=127.0.2651.105-1'
CHROME_VERSION: 'google-chrome-stable=127.0.6533.119-1'
FIREFOX_VERSION: '127.0.2'
FIREFOX_DOWNLOAD_URL: 'https://download-installer.cdn.mozilla.net/pub/firefox/nightly/2024/05/2024-05-12-21-26-37-mozilla-central/firefox-127.0a1.en-US.linux-aarch64.deb'
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
126:
EDGE_VERSION: 'microsoft-edge-stable=126.0.2592.113-1'
CHROME_VERSION: 'google-chrome-stable=126.0.6478.182-1'
Expand Down Expand Up @@ -87,46 +109,59 @@ matrix:
CHROME_VERSION: 'google-chrome-stable=114.0.5735.198-1'
FIREFOX_VERSION: '114.0.2'
113:
EDGE_VERSION: 'microsoft-edge-stable=113.0.1774.57-1'
EDGE_VERSION:
CHROME_VERSION: 'google-chrome-stable=113.0.5672.126-1'
FIREFOX_VERSION: '113.0.2'
112:
EDGE_VERSION: 'microsoft-edge-stable=112.0.1722.64-1'
EDGE_VERSION:
CHROME_VERSION: 'google-chrome-stable=112.0.5615.165-1'
FIREFOX_VERSION: '112.0.2'
111:
EDGE_VERSION: 'microsoft-edge-stable=111.0.1661.62-1'
EDGE_VERSION:
CHROME_VERSION: 'google-chrome-stable=111.0.5563.146-1'
FIREFOX_VERSION: '111.0.1'
110:
EDGE_VERSION: 'microsoft-edge-stable=110.0.1587.69-1'
EDGE_VERSION:
CHROME_VERSION: 'google-chrome-stable=110.0.5481.177-1'
FIREFOX_VERSION: '110.0.1'
#2023
109:
CHROME_VERSION: 'google-chrome-stable=109.0.5414.119-1'
FIREFOX_VERSION: '109.0.1'
108:
CHROME_VERSION: 'google-chrome-stable=108.0.5359.124-1'
FIREFOX_VERSION: '108.0.2'
107:
CHROME_VERSION: 'google-chrome-stable=107.0.5304.121-1'
FIREFOX_VERSION: '107.0.1'
106:
CHROME_VERSION: 'google-chrome-stable=106.0.5249.119-1'
FIREFOX_VERSION: '106.0.5'
105:
CHROME_VERSION: 'google-chrome-stable=105.0.5195.125-1'
FIREFOX_VERSION: '105.0.3'
104:
CHROME_VERSION: 'google-chrome-stable=104.0.5112.101-1'
FIREFOX_VERSION: '104.0.2'
103:
CHROME_VERSION: 'google-chrome-stable=103.0.5060.134-1'
FIREFOX_VERSION: '103.0.2'
102:
CHROME_VERSION: 'google-chrome-stable=102.0.5005.115-1'
FIREFOX_VERSION: '102.0.1'
101:
CHROME_VERSION: 'google-chrome-stable=101.0.4951.64-1'
FIREFOX_VERSION: '101.0.1'
100:
CHROME_VERSION: 'google-chrome-stable=100.0.4896.127-1'
FIREFOX_VERSION: '100.0.2'
99:
CHROME_VERSION: 'google-chrome-stable=99.0.4844.84-1'
FIREFOX_VERSION: '99.0.1'
98:
CHROME_VERSION: 'google-chrome-stable=98.0.4758.102-1'
FIREFOX_VERSION: '98.0.2'
97:
CHROME_VERSION: 'google-chrome-stable=97.0.4692.99-1'
FIREFOX_VERSION: '97.0.2'
#2022

0 comments on commit 7cdcd1a

Please sign in to comment.