Skip to content

Commit 7cdcd1a

Browse files
committed
[ci] Add workflow to build image with specific browser version for Firefox
Signed-off-by: Viet Nguyen Duc <[email protected]>
1 parent 43e4543 commit 7cdcd1a

File tree

5 files changed

+244
-11
lines changed

5 files changed

+244
-11
lines changed
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
name: Deploy specific Firefox version
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
stable:
7+
description: 'Use upstream stable build'
8+
required: true
9+
type: string
10+
default: 'true'
11+
reuse-base:
12+
description: 'Reuse base image to build'
13+
required: false
14+
type: boolean
15+
default: true
16+
grid-version:
17+
description: 'Grid version to build. E.g: 4.28.1. Must provide if reusing base image'
18+
required: false
19+
type: string
20+
default: ''
21+
build-date:
22+
description: 'Build date in format YYYYMMDD. Must provide if reusing base image'
23+
required: false
24+
type: string
25+
default: '20250123'
26+
browser-name:
27+
description: 'Browser name to build. E.g: firefox'
28+
required: true
29+
type: string
30+
default: 'firefox'
31+
browser-versions:
32+
description: 'List browser version to build. E.g: [130, 131]'
33+
required: true
34+
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]'
35+
push-image:
36+
description: 'Push image after testing successfully'
37+
required: true
38+
type: boolean
39+
default: false
40+
pr-changelog:
41+
description: 'Create a PR for CHANGELOG'
42+
required: true
43+
type: boolean
44+
default: true
45+
46+
env:
47+
GRID_VERSION: ${{ github.event.inputs.grid-version }}
48+
BROWSER_NAME: ${{ github.event.inputs.browser-name }}
49+
REUSE_BASE: ${{ github.event.inputs.reuse-base || true }}
50+
BUILD_DATE: ${{ github.event.inputs.build-date || '' }}
51+
NAMESPACE: ${{ vars.DOCKER_NAMESPACE || 'selenium' }}
52+
AUTHORS: ${{ vars.AUTHORS || 'SeleniumHQ' }}
53+
PUSH_IMAGE: ${{ github.event.inputs.push-image || false }}
54+
PR_CHANGELOG: ${{ github.event.inputs.pr-changelog || true }}
55+
RUN_ID: ${{ github.run_id }}
56+
57+
jobs:
58+
deploy:
59+
name: Node/Standalone Firefox
60+
runs-on: ubuntu-24.04
61+
permissions: write-all
62+
strategy:
63+
fail-fast: false
64+
matrix:
65+
browser-version: ${{ fromJSON(github.event.inputs.browser-versions)}}
66+
outputs:
67+
GRID_VERSION: ${{ steps.display_grid_version.outputs.GRID_VERSION }}
68+
steps:
69+
- name: Checkout code
70+
uses: actions/checkout@main
71+
with:
72+
persist-credentials: false
73+
fetch-depth: 0
74+
- name: Set up containerd image store feature
75+
uses: nick-invision/retry@master
76+
with:
77+
timeout_minutes: 10
78+
max_attempts: 3
79+
command: |
80+
make setup_dev_env
81+
- name: Output Docker info
82+
run: docker info
83+
- name: Set Selenium base version
84+
uses: ./.github/actions/get-latest-upstream
85+
with:
86+
release: ${{ github.event.inputs.stable || true }}
87+
gh_cli_token: ${{ secrets.GITHUB_TOKEN }}
88+
- name: Sets build date
89+
run: |
90+
if [ -z "${BUILD_DATE}" ]; then
91+
echo "BUILD_DATE=$(date '+%Y%m%d')" >> $GITHUB_ENV
92+
else
93+
echo "BUILD_DATE=${BUILD_DATE}" >> $GITHUB_ENV
94+
fi
95+
echo "NAME=${NAMESPACE}" >> $GITHUB_ENV
96+
echo "BROWSER_VERSION=${BROWSER_VERSION}" >> $GITHUB_ENV
97+
env:
98+
BROWSER_VERSION: ${{ matrix.browser-version }}
99+
- name: Get Grid version
100+
if: env.GRID_VERSION == ''
101+
run: |
102+
echo ${BASE_VERSION}
103+
echo "GRID_VERSION=${BASE_VERSION}" >> $GITHUB_ENV
104+
- name: Display Grid version
105+
id: display_grid_version
106+
run: |
107+
echo ${GRID_VERSION}
108+
echo "GRID_VERSION=${GRID_VERSION}" >> "$GITHUB_OUTPUT"
109+
- name: Login Docker Hub
110+
run: docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
111+
env:
112+
DOCKER_USERNAME: ${{secrets.DOCKER_USERNAME}}
113+
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
114+
- name: Build images with Grid core ${{ env.GRID_VERSION }} and ${{ env.BROWSER_NAME }} v${{ env.BROWSER_VERSION }}
115+
uses: nick-invision/retry@master
116+
with:
117+
timeout_minutes: 20
118+
max_attempts: 3
119+
retry_wait_seconds: 60
120+
command: |
121+
./tests/build-backward-compatible/bootstrap.sh ${GRID_VERSION} ${BROWSER_VERSION} ${BROWSER_NAME} ${REUSE_BASE}
122+
- name: Build Hub image for testing
123+
if: env.REUSE_BASE == 'false'
124+
run: make hub
125+
- name: Test images with Grid core ${{ env.GRID_VERSION }} and ${{ env.BROWSER_NAME }} v${{ env.BROWSER_VERSION }}
126+
run: |
127+
make test_firefox
128+
make test_firefox_standalone
129+
- name: Push images with Grid core ${{ env.GRID_VERSION }} and ${{ env.BROWSER_NAME }} v${{ env.BROWSER_VERSION }}
130+
if: env.PUSH_IMAGE == 'true'
131+
run: |
132+
./tests/build-backward-compatible/bootstrap.sh ${GRID_VERSION} ${BROWSER_VERSION} ${BROWSER_NAME} ${REUSE_BASE} true true
133+
- name: Upload changelog
134+
if: always()
135+
uses: actions/upload-artifact@main
136+
with:
137+
name: image_tags_${{ env.GRID_VERSION }}_${{ env.BROWSER_NAME }}_${{ env.BROWSER_VERSION }}
138+
path: ./CHANGELOG/${{ env.GRID_VERSION }}/${{ env.BROWSER_NAME }}_${{ env.BROWSER_VERSION }}.md
139+
if-no-files-found: ignore
140+
141+
pr-results:
142+
name: Create a PR with changelog
143+
if: (!failure() && !cancelled() && (github.event.inputs.pr-changelog == 'true'))
144+
runs-on: ubuntu-24.04
145+
needs: deploy
146+
steps:
147+
- name: Checkout code
148+
uses: actions/checkout@main
149+
with:
150+
persist-credentials: false
151+
fetch-depth: 0
152+
- name: Get Grid version
153+
run: |
154+
echo "GRID_VERSION=${GRID_VERSION}" >> $GITHUB_ENV
155+
env:
156+
GRID_VERSION: ${{ needs.deploy.outputs.GRID_VERSION }}
157+
- name: Download results
158+
uses: actions/download-artifact@v4
159+
with:
160+
path: ./CHANGELOG/${{ env.GRID_VERSION }}
161+
pattern: 'image_tags_*'
162+
merge-multiple: 'true'
163+
run-id: ${{ env.RUN_ID }}
164+
github-token: ${{ secrets.GITHUB_TOKEN }}
165+
- name: Commit configs
166+
run: |
167+
git config --local user.email "[email protected]"
168+
git config --local user.name "Selenium CI Bot"
169+
- name: Create Pull Request
170+
id: cpr
171+
uses: peter-evans/create-pull-request@main
172+
with:
173+
token: ${{ secrets.SELENIUM_CI_TOKEN }}
174+
commit-message: "[ci] Upload CHANGELOG for Node/Standalone ${{ env.BROWSER_NAME }} version with Grid ${{ env.GRID_VERSION }}"
175+
title: "[ci] Upload CHANGELOG for Node/Standalone ${{ env.BROWSER_NAME }} version with Grid ${{ env.GRID_VERSION }}"
176+
body: "This PR contains the CHANGELOG for Node/Standalone Firefox with specific browser versions: ${{ github.event.inputs.browser-versions }}"
177+
committer: 'Selenium CI Bot <[email protected]>'
178+
author: 'Selenium CI Bot <[email protected]>'
179+
branch: browser-node-changelog
180+
- name: Check outputs
181+
if: ${{ steps.cpr.outputs.pull-request-number }}
182+
run: |
183+
echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
184+
echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"

Makefile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,11 @@ edge_dev:
196196
edge_beta:
197197
cd ./NodeEdge && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg EDGE_VERSION=microsoft-edge-beta -t $(NAME)/node-edge:beta .
198198

199-
firefox: node_base
199+
firefox_only:
200200
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) .
201201

202+
firefox: node_base firefox_only
203+
202204
firefox_dev:
203205
cd ./NodeFirefox && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg FIREFOX_VERSION=devedition-latest -t $(NAME)/node-firefox:dev .
204206

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

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

219+
standalone_firefox: firefox standalone_firefox_only
220+
217221
standalone_firefox_dev: firefox_dev
218222
cd ./Standalone && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) --sbom=true --attest type=provenance,mode=max \
219223
--build-arg NAMESPACE=$(NAME) --build-arg VERSION=dev --build-arg BASE=node-firefox -t $(NAME)/standalone-firefox:dev .

tests/build-backward-compatible/bootstrap.sh

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,12 @@ for CDP_VERSION in "${VERSION_LIST[@]}"; do
2929
export $(cat .env | xargs)
3030
if [ "${BROWSER}" = "all" ] || [ "${BROWSER}" = "firefox" ] && [ "${SKIP_BUILD}" = "false" ]; then
3131
if [ -n "${FIREFOX_VERSION}" ]; then
32-
BUILD_ARGS="--build-arg FIREFOX_VERSION=${FIREFOX_VERSION}"
33-
BUILD_ARGS="${BUILD_ARGS}" make standalone_firefox
32+
BUILD_ARGS="--build-arg FIREFOX_VERSION=${FIREFOX_VERSION} --build-arg FIREFOX_DOWNLOAD_URL=${FIREFOX_DOWNLOAD_URL}"
33+
if [ "${REUSE_BASE}" = "true" ]; then
34+
BUILD_ARGS="${BUILD_ARGS}" make firefox_only standalone_firefox_only
35+
else
36+
BUILD_ARGS="${BUILD_ARGS}" make standalone_firefox
37+
fi
3438
else
3539
echo "Firefox version not found in matrix for input ${CDP_VERSION}"
3640
exit 1

tests/build-backward-compatible/builder.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ def recursive_merge(dict1, dict2):
4444
if browser_name == "firefox" or browser_name == "all":
4545
FIREFOX_VERSION = matrix["CDP"][cdp_version]["FIREFOX_VERSION"]
4646
f.write(f"FIREFOX_VERSION={FIREFOX_VERSION}\n")
47+
if "FIREFOX_DOWNLOAD_URL" in matrix["CDP"][cdp_version]:
48+
FIREFOX_DOWNLOAD_URL = matrix["CDP"][cdp_version]["FIREFOX_DOWNLOAD_URL"]
49+
f.write(f"FIREFOX_DOWNLOAD_URL={FIREFOX_DOWNLOAD_URL}\n")
50+
if "FIREFOX_PLATFORMS" in matrix["CDP"][cdp_version]:
51+
FIREFOX_PLATFORMS = matrix["CDP"][cdp_version]["FIREFOX_PLATFORMS"]
52+
f.write(f"PLATFORMS={FIREFOX_PLATFORMS}\n")
4753
if browser_name == "edge" or browser_name == "all":
4854
EDGE_VERSION = matrix["CDP"][cdp_version]["EDGE_VERSION"]
4955
f.write(f"EDGE_VERSION={EDGE_VERSION}\n")

tests/build-backward-compatible/cdp-matrix.yml

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,60 @@
11
matrix:
22
# List of versions get from
3-
# Edge: https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable
4-
# 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/
5-
# Firefox: https://download-installer.cdn.mozilla.net/pub/firefox/releases
3+
# Edge: https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/
4+
# 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/
5+
# Firefox: https://download-installer.cdn.mozilla.net/pub/firefox/releases/
66
CDP:
7+
135:
8+
FIREFOX_VERSION:
9+
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'
10+
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
11+
134:
12+
FIREFOX_VERSION: '134.0.2'
13+
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'
14+
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
715
133:
816
EDGE_VERSION:
917
CHROME_VERSION:
1018
FIREFOX_VERSION: '133.0.3'
19+
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'
20+
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
1121
#2025
1222
132:
1323
EDGE_VERSION: 'microsoft-edge-stable=132.0.2957.140-1'
1424
CHROME_VERSION: 'google-chrome-stable=132.0.6834.159-1'
1525
FIREFOX_VERSION: '132.0.2'
26+
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'
27+
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
1628
131:
1729
EDGE_VERSION: 'microsoft-edge-stable=131.0.2903.147-1'
1830
CHROME_VERSION: 'google-chrome-stable=131.0.6778.264-1'
1931
FIREFOX_VERSION: '131.0.3'
32+
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'
33+
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
2034
130:
2135
EDGE_VERSION: 'microsoft-edge-stable=130.0.2849.80-1'
2236
CHROME_VERSION: 'google-chrome-stable=130.0.6723.116-1'
2337
FIREFOX_VERSION: '130.0.1'
38+
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'
39+
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
2440
129:
2541
EDGE_VERSION: 'microsoft-edge-stable=129.0.2792.89-1'
2642
CHROME_VERSION: 'google-chrome-stable=129.0.6668.100-1'
2743
FIREFOX_VERSION: '129.0.2'
44+
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'
45+
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
2846
128:
2947
EDGE_VERSION: 'microsoft-edge-stable=128.0.2739.79-1'
3048
CHROME_VERSION: 'google-chrome-stable=128.0.6613.137-1'
3149
FIREFOX_VERSION: '128.0.3'
50+
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'
51+
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
3252
127:
3353
EDGE_VERSION: 'microsoft-edge-stable=127.0.2651.105-1'
3454
CHROME_VERSION: 'google-chrome-stable=127.0.6533.119-1'
3555
FIREFOX_VERSION: '127.0.2'
56+
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'
57+
FIREFOX_PLATFORMS: 'linux/amd64,linux/arm64'
3658
126:
3759
EDGE_VERSION: 'microsoft-edge-stable=126.0.2592.113-1'
3860
CHROME_VERSION: 'google-chrome-stable=126.0.6478.182-1'
@@ -87,46 +109,59 @@ matrix:
87109
CHROME_VERSION: 'google-chrome-stable=114.0.5735.198-1'
88110
FIREFOX_VERSION: '114.0.2'
89111
113:
90-
EDGE_VERSION: 'microsoft-edge-stable=113.0.1774.57-1'
112+
EDGE_VERSION:
91113
CHROME_VERSION: 'google-chrome-stable=113.0.5672.126-1'
92114
FIREFOX_VERSION: '113.0.2'
93115
112:
94-
EDGE_VERSION: 'microsoft-edge-stable=112.0.1722.64-1'
116+
EDGE_VERSION:
95117
CHROME_VERSION: 'google-chrome-stable=112.0.5615.165-1'
96118
FIREFOX_VERSION: '112.0.2'
97119
111:
98-
EDGE_VERSION: 'microsoft-edge-stable=111.0.1661.62-1'
120+
EDGE_VERSION:
99121
CHROME_VERSION: 'google-chrome-stable=111.0.5563.146-1'
100122
FIREFOX_VERSION: '111.0.1'
101123
110:
102-
EDGE_VERSION: 'microsoft-edge-stable=110.0.1587.69-1'
124+
EDGE_VERSION:
103125
CHROME_VERSION: 'google-chrome-stable=110.0.5481.177-1'
104126
FIREFOX_VERSION: '110.0.1'
105127
#2023
106128
109:
107129
CHROME_VERSION: 'google-chrome-stable=109.0.5414.119-1'
130+
FIREFOX_VERSION: '109.0.1'
108131
108:
109132
CHROME_VERSION: 'google-chrome-stable=108.0.5359.124-1'
133+
FIREFOX_VERSION: '108.0.2'
110134
107:
111135
CHROME_VERSION: 'google-chrome-stable=107.0.5304.121-1'
136+
FIREFOX_VERSION: '107.0.1'
112137
106:
113138
CHROME_VERSION: 'google-chrome-stable=106.0.5249.119-1'
139+
FIREFOX_VERSION: '106.0.5'
114140
105:
115141
CHROME_VERSION: 'google-chrome-stable=105.0.5195.125-1'
142+
FIREFOX_VERSION: '105.0.3'
116143
104:
117144
CHROME_VERSION: 'google-chrome-stable=104.0.5112.101-1'
145+
FIREFOX_VERSION: '104.0.2'
118146
103:
119147
CHROME_VERSION: 'google-chrome-stable=103.0.5060.134-1'
148+
FIREFOX_VERSION: '103.0.2'
120149
102:
121150
CHROME_VERSION: 'google-chrome-stable=102.0.5005.115-1'
151+
FIREFOX_VERSION: '102.0.1'
122152
101:
123153
CHROME_VERSION: 'google-chrome-stable=101.0.4951.64-1'
154+
FIREFOX_VERSION: '101.0.1'
124155
100:
125156
CHROME_VERSION: 'google-chrome-stable=100.0.4896.127-1'
157+
FIREFOX_VERSION: '100.0.2'
126158
99:
127159
CHROME_VERSION: 'google-chrome-stable=99.0.4844.84-1'
160+
FIREFOX_VERSION: '99.0.1'
128161
98:
129162
CHROME_VERSION: 'google-chrome-stable=98.0.4758.102-1'
163+
FIREFOX_VERSION: '98.0.2'
130164
97:
131165
CHROME_VERSION: 'google-chrome-stable=97.0.4692.99-1'
166+
FIREFOX_VERSION: '97.0.2'
132167
#2022

0 commit comments

Comments
 (0)