Skip to content

Commit 5afa3c8

Browse files
committed
[ci] Automic update version matrix
Signed-off-by: Viet Nguyen Duc <[email protected]>
1 parent 13be6ba commit 5afa3c8

File tree

6 files changed

+155
-58
lines changed

6 files changed

+155
-58
lines changed

.github/workflows/release-chrome-versions.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ jobs:
174174
run: |
175175
python3 -m pip install -r tests/requirements.txt
176176
python3 tests/build-backward-compatible/fetch_version.py
177+
make update_selenium_version_matrix
177178
- name: Download results
178179
uses: actions/download-artifact@v5
179180
with:

.github/workflows/release-edge-versions.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ jobs:
174174
run: |
175175
python3 -m pip install -r tests/requirements.txt
176176
python3 tests/build-backward-compatible/fetch_version.py
177+
make update_selenium_version_matrix
177178
- name: Download results
178179
uses: actions/download-artifact@v5
179180
with:

.github/workflows/release-firefox-versions.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ jobs:
175175
python3 -m pip install -r tests/requirements.txt
176176
python3 tests/build-backward-compatible/fetch_firefox_version.py
177177
python3 tests/build-backward-compatible/fetch_version.py
178+
make update_selenium_version_matrix
178179
- name: Download results
179180
uses: actions/download-artifact@v5
180181
with:

Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ update_list_env_vars:
9696
python3 -m pip install -r tests/requirements.txt ; \
9797
python3 scripts/generate_list_env_vars/extract_env.py
9898

99+
update_selenium_version_matrix:
100+
python3 tests/build-backward-compatible/add_selenium_version.py $(BASE_VERSION)
101+
99102
lint_readme_charts: generate_readme_charts
100103
git diff --stat --exit-code ; \
101104
EXIT_CODE=$$? ; \
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
#!/usr/bin/env python3
2+
import yaml
3+
import sys
4+
import re
5+
from pathlib import Path
6+
7+
def add_selenium_version(version):
8+
"""
9+
Add a new Selenium version configuration to selenium-matrix.yml
10+
11+
Args:
12+
version (str): The Selenium version to add (e.g., '4.36.0')
13+
"""
14+
# Validate version format
15+
if not re.match(r'^\d+\.\d+\.\d+$', version):
16+
print(f"Error: Version '{version}' is not in the correct format (e.g., 4.36.0)")
17+
sys.exit(1)
18+
19+
matrix_file = Path(__file__).parent / 'selenium-matrix.yml'
20+
21+
def replace_none(d):
22+
if isinstance(d, dict):
23+
return {k: replace_none(v) for k, v in d.items()}
24+
elif isinstance(d, list):
25+
return [replace_none(x) for x in d]
26+
elif d is None:
27+
return []
28+
return d
29+
30+
# Read the existing YAML file
31+
with open(matrix_file, 'r') as f:
32+
try:
33+
data = yaml.safe_load(f) or {}
34+
# Replace None values with empty strings
35+
data = replace_none(data)
36+
except yaml.YAMLError as e:
37+
print(f"Error reading YAML file: {e}")
38+
sys.exit(1)
39+
40+
# Check if version already exists
41+
if version in data.get('matrix', {}).get('selenium', {}):
42+
print(f"Version {version} already exists in the matrix")
43+
sys.exit(0)
44+
45+
# Create the new version entry
46+
new_entry = {
47+
'BASE_RELEASE': f'selenium-{version}',
48+
'BASE_VERSION': version,
49+
'VERSION': version,
50+
'BINDING_VERSION': version,
51+
'browser': []
52+
}
53+
54+
# Add the new version to the matrix
55+
data['matrix']['selenium'][version] = new_entry
56+
57+
# Sort the selenium versions in descending order
58+
if 'selenium' in data['matrix']:
59+
sorted_selenium = {}
60+
# Get all versions, handle both string and numeric versions correctly
61+
versions = []
62+
for v in data['matrix']['selenium'].keys():
63+
try:
64+
# Convert version string to tuple of integers for proper numeric comparison
65+
ver_tuple = tuple(map(int, v.split('.'))) if v != 'nightly' else (float('inf'),)
66+
versions.append((ver_tuple, v))
67+
except (ValueError, AttributeError):
68+
# Fallback for non-numeric versions (like 'nightly')
69+
versions.append((v, v))
70+
71+
# Sort in descending order, with 'nightly' first, then by version numbers
72+
versions.sort(reverse=True, key=lambda x: (x[0] == 'nightly', x[0]))
73+
74+
# Rebuild the selenium dictionary in sorted order
75+
for ver_tuple, ver in versions:
76+
sorted_selenium[ver] = data['matrix']['selenium'][ver]
77+
78+
data['matrix']['selenium'] = sorted_selenium
79+
80+
# Write back to the file while preserving the original structure
81+
with open(matrix_file, 'w') as f:
82+
yaml.dump(data, f, default_flow_style=False, sort_keys=False, width=1000)
83+
84+
print(f"Successfully added Selenium version {version} to the matrix")
85+
86+
if __name__ == "__main__":
87+
if len(sys.argv) != 2:
88+
print(f"Usage: {sys.argv[0]} <version>")
89+
print("Example: python add_selenium_version.py 4.36.0")
90+
sys.exit(1)
91+
92+
version = sys.argv[1].strip()
93+
add_selenium_version(version)
Lines changed: 56 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
matrix:
2-
# List browser versions get from release notes https://www.selenium.dev/categories/releases/
3-
# https://github.com/SeleniumHQ/selenium/releases
42
selenium:
53
nightly:
64
BASE_RELEASE: nightly
@@ -12,190 +10,190 @@ matrix:
1210
BASE_VERSION: 4.35.0
1311
VERSION: 4.35.0
1412
BINDING_VERSION: 4.35.0
15-
browser:
13+
browser: []
1614
4.34.0:
1715
BASE_RELEASE: selenium-4.34.0
1816
BASE_VERSION: 4.34.0
1917
VERSION: 4.34.0
2018
BINDING_VERSION: 4.34.0
21-
browser:
19+
browser: []
2220
4.33.0:
2321
BASE_RELEASE: selenium-4.33.0
2422
BASE_VERSION: 4.33.0
2523
VERSION: 4.33.0
2624
BINDING_VERSION: 4.33.0
27-
browser:
25+
browser: []
2826
4.32.0:
2927
BASE_RELEASE: selenium-4.32.0
3028
BASE_VERSION: 4.32.0
3129
VERSION: 4.32.0
3230
BINDING_VERSION: 4.32.0
33-
browser:
31+
browser: []
3432
4.31.0:
3533
BASE_RELEASE: selenium-4.31.0
3634
BASE_VERSION: 4.31.0
3735
VERSION: 4.31.0
3836
BINDING_VERSION: 4.31.0
39-
browser:
37+
browser: []
4038
4.30.0:
4139
BASE_RELEASE: selenium-4.30.0
4240
BASE_VERSION: 4.30.0
4341
VERSION: 4.30.0
4442
BINDING_VERSION: 4.30.0
45-
browser:
43+
browser: []
4644
4.29.0:
4745
BASE_RELEASE: selenium-4.29.0
4846
BASE_VERSION: 4.29.0
4947
VERSION: 4.29.0
5048
BINDING_VERSION: 4.29.0
51-
browser:
49+
browser: []
5250
4.28.1:
5351
BASE_RELEASE: selenium-4.28.0
5452
BASE_VERSION: 4.28.1
5553
VERSION: 4.28.1
5654
BINDING_VERSION: 4.28.1
57-
browser:
55+
browser: []
5856
4.20.0:
5957
BASE_RELEASE: selenium-4.20.0
6058
BASE_VERSION: 4.20.0
6159
VERSION: 4.20.0
6260
BINDING_VERSION: 4.20.0
6361
browser:
64-
- 124
65-
- 123
66-
- 122
62+
- 124
63+
- 123
64+
- 122
6765
4.19.1:
6866
BASE_RELEASE: selenium-4.19.0
6967
BASE_VERSION: 4.19.1
7068
VERSION: 4.19.1
7169
BINDING_VERSION: 4.19.0
7270
browser:
73-
- 123
74-
- 122
75-
- 121
71+
- 123
72+
- 122
73+
- 121
7674
4.19.0:
7775
BASE_RELEASE: selenium-4.19.0
7876
BASE_VERSION: 4.19.0
7977
VERSION: 4.19.0
8078
BINDING_VERSION: 4.19.0
8179
browser:
82-
- 123
83-
- 122
84-
- 121
80+
- 123
81+
- 122
82+
- 121
8583
4.18.1:
8684
BASE_RELEASE: selenium-4.18.0
8785
BASE_VERSION: 4.18.1
8886
VERSION: 4.18.1
8987
BINDING_VERSION: 4.18.1
9088
browser:
91-
- 122
92-
- 121
93-
- 120
89+
- 122
90+
- 121
91+
- 120
9492
4.18.0:
9593
BASE_RELEASE: selenium-4.18.0
9694
BASE_VERSION: 4.18.0
9795
VERSION: 4.18.0
9896
BINDING_VERSION: 4.18.0
9997
browser:
100-
- 122
101-
- 121
102-
- 120
98+
- 122
99+
- 121
100+
- 120
103101
4.17.0:
104102
BASE_RELEASE: selenium-4.17.0
105103
BASE_VERSION: 4.17.0
106104
VERSION: 4.17.0
107105
BINDING_VERSION: 4.17.2
108106
browser:
109-
- 121
110-
- 120
111-
- 119
107+
- 121
108+
- 120
109+
- 119
112110
4.16.1:
113111
BASE_RELEASE: selenium-4.16.0
114112
BASE_VERSION: 4.16.1
115113
VERSION: 4.16.1
116114
BINDING_VERSION: 4.16.0
117115
browser:
118-
- 120
119-
- 119
120-
- 118
116+
- 120
117+
- 119
118+
- 118
121119
4.16.0:
122120
BASE_RELEASE: selenium-4.16.0
123121
BASE_VERSION: 4.16.0
124122
VERSION: 4.16.0
125123
BINDING_VERSION: 4.16.0
126124
browser:
127-
- 120
128-
- 119
129-
- 118
125+
- 120
126+
- 119
127+
- 118
130128
4.15.0:
131129
BASE_RELEASE: selenium-4.15.0
132130
BASE_VERSION: 4.15.0
133131
VERSION: 4.15.0
134132
BINDING_VERSION: 4.15.2
135133
browser:
136-
- 119
137-
- 118
138-
- 117
134+
- 119
135+
- 118
136+
- 117
139137
4.14.1:
140138
BASE_RELEASE: selenium-4.14.0
141139
BASE_VERSION: 4.14.1
142140
VERSION: 4.14.1
143141
BINDING_VERSION: 4.14.0
144142
browser:
145-
- 118
146-
- 117
147-
- 116
143+
- 118
144+
- 117
145+
- 116
148146
4.14.0:
149147
BASE_RELEASE: selenium-4.14.0
150148
BASE_VERSION: 4.14.0
151149
VERSION: 4.14.0
152150
BINDING_VERSION: 4.14.0
153151
browser:
154-
- 118
155-
- 117
156-
- 116
152+
- 118
153+
- 117
154+
- 116
157155
4.13.0:
158156
BASE_RELEASE: selenium-4.13.0
159157
BASE_VERSION: 4.13.0
160158
VERSION: 4.13.0
161159
BINDING_VERSION: 4.13.0
162160
browser:
163-
- 117
164-
- 116
165-
- 115
161+
- 117
162+
- 116
163+
- 115
166164
4.12.1:
167165
BASE_RELEASE: selenium-4.12.0
168166
BASE_VERSION: 4.12.1
169167
VERSION: 4.12.1
170168
BINDING_VERSION: 4.12.0
171169
browser:
172-
- 116
173-
- 115
174-
- 114
170+
- 116
171+
- 115
172+
- 114
175173
4.12.0:
176174
BASE_RELEASE: selenium-4.12.0
177175
BASE_VERSION: 4.12.0
178176
VERSION: 4.12.0
179177
BINDING_VERSION: 4.12.0
180178
browser:
181-
- 116
182-
- 115
183-
- 114
179+
- 116
180+
- 115
181+
- 114
184182
4.11.0:
185183
BASE_RELEASE: selenium-4.11.0
186184
BASE_VERSION: 4.11.0
187185
VERSION: 4.11.0
188186
BINDING_VERSION: 4.11.2
189187
browser:
190-
- 115
191-
- 114
192-
- 113
188+
- 115
189+
- 114
190+
- 113
193191
4.10.0:
194192
BASE_RELEASE: selenium-4.10.0
195193
BASE_VERSION: 4.10.0
196194
VERSION: 4.10.0
197195
BINDING_VERSION: 4.10.0
198196
browser:
199-
- 114
200-
- 113
201-
- 112
197+
- 114
198+
- 113
199+
- 112

0 commit comments

Comments
 (0)