1
- name : Test Autoscaling
1
+ name : Test Grid Autoscaling in Kubernetes
2
2
3
3
on :
4
4
workflow_call :
8
8
required : false
9
9
type : string
10
10
default : ' false'
11
+ push-results :
12
+ description : ' Publish the results to the repository'
13
+ required : false
14
+ type : boolean
15
+ default : false
16
+ iteration :
17
+ description : ' Test a specific iteration'
18
+ required : false
19
+ type : string
20
+ default : ' 20'
11
21
workflow_dispatch :
22
+ inputs :
23
+ publish-results :
24
+ description : ' Publish the results to the repository'
25
+ required : false
26
+ type : boolean
27
+ default : false
28
+ pr-results :
29
+ description : ' Create a PR with the results'
30
+ required : false
31
+ type : boolean
32
+ default : false
33
+ iteration :
34
+ description : ' Test a specific iteration'
35
+ required : false
36
+ type : string
37
+ default : ' 20'
12
38
13
39
permissions :
14
- contents : read
40
+ contents : write
41
+ pull-requests : write
42
+
43
+ env :
44
+ RUN_ID : ${{ github.run_id }}
45
+ TEST_AUTOSCALING_ITERATIONS : ${{ github.event.inputs.iteration || '20' }}
15
46
16
47
jobs :
17
48
build-and-test :
18
49
name : Test K8s
19
- runs-on : blacksmith-16vcpu- ubuntu-2204
50
+ runs-on : ubuntu-latest
20
51
strategy :
21
52
fail-fast : false
22
53
matrix :
23
54
include :
24
55
- k8s-version : ' v1.31.2'
56
+ test-strategy : test_k8s_autoscaling_job_count_strategy_default_in_chaos
57
+ cluster : ' minikube'
58
+ helm-version : ' v3.16.3'
59
+ docker-version : ' 27.3.1'
60
+ python-version : ' 3.13'
61
+ - k8s-version : ' v1.31.2'
62
+ test-strategy : test_k8s_autoscaling_job_count_strategy_default_with_node_max_sessions
63
+ cluster : ' minikube'
64
+ helm-version : ' v3.16.3'
65
+ docker-version : ' 27.3.1'
66
+ python-version : ' 3.13'
67
+ - k8s-version : ' v1.31.2'
68
+ test-strategy : test_k8s_autoscaling_job_count_strategy_default
69
+ cluster : ' minikube'
70
+ helm-version : ' v3.16.3'
71
+ docker-version : ' 27.3.1'
72
+ python-version : ' 3.13'
73
+ - k8s-version : ' v1.31.2'
74
+ test-strategy : test_k8s_autoscaling_deployment_count_in_chaos
75
+ cluster : ' minikube'
76
+ helm-version : ' v3.16.3'
77
+ docker-version : ' 27.3.1'
78
+ python-version : ' 3.13'
79
+ - k8s-version : ' v1.31.2'
80
+ test-strategy : test_k8s_autoscaling_deployment_count_with_node_max_sessions
81
+ cluster : ' minikube'
82
+ helm-version : ' v3.16.3'
83
+ docker-version : ' 27.3.1'
84
+ python-version : ' 3.13'
85
+ - k8s-version : ' v1.31.2'
86
+ test-strategy : test_k8s_autoscaling_deployment_count
25
87
cluster : ' minikube'
26
88
helm-version : ' v3.16.3'
27
89
docker-version : ' 27.3.1'
53
115
with :
54
116
python-version : ${{ matrix.python-version }}
55
117
check-latest : true
56
- - name : Verify chart configuration up-to-date
57
- run : make lint_readme_charts
58
118
- name : Get branch name (only for push to branch)
59
119
if : github.event_name == 'push'
60
120
run : echo "BRANCH=$(echo ${PUSH_BRANCH##*/})" >> $GITHUB_ENV
@@ -79,83 +139,118 @@ jobs:
79
139
echo "AUTHORS=${AUTHORS}" >> $GITHUB_ENV
80
140
env :
81
141
AUTHORS : ${{ vars.AUTHORS || 'SeleniumHQ' }}
82
- - name : Build Helm charts
83
- run : |
84
- BUILD_DATE=${BUILD_DATE} make chart_build
85
- echo "CHART_PACKAGE_PATH=$(cat /tmp/selenium_chart_version)" >> $GITHUB_ENV
86
- echo "CHART_FILE_NAME=$(basename $(cat /tmp/selenium_chart_version))" >> $GITHUB_ENV
87
- - name : Build Docker images
88
- uses : nick-invision/retry@master
89
- with :
90
- timeout_minutes : 12
91
- max_attempts : 3
92
- retry_wait_seconds : 60
93
- command : NAME=${IMAGE_REGISTRY} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} make build
94
142
- name : Setup Kubernetes cluster
95
143
uses : nick-invision/retry@master
96
144
with :
97
145
timeout_minutes : 10
98
146
max_attempts : 3
99
147
command : CLUSTER=${CLUSTER} SERVICE_MESH=${SERVICE_MESH} KUBERNETES_VERSION=${KUBERNETES_VERSION} NAME=${IMAGE_REGISTRY} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} make chart_cluster_setup
100
- - name : Test Selenium Grid on Kubernetes with Autoscaling
101
- uses : nick-invision/retry@master
102
- with :
103
- timeout_minutes : 30
104
- max_attempts : 3
105
- command : |
106
- NAME=${IMAGE_REGISTRY} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} TEST_UPGRADE_CHART=false make chart_test_autoscaling_job_count_chaos
107
- - name : Upload results
108
- if : always()
109
- uses : actions/upload-artifact@main
110
- with :
111
- name : chart_test_autoscaling_job_count_chaos
112
- path : ./tests/tests/*.md
113
- if-no-files-found : ignore
114
- - name : Test Selenium Grid on Kubernetes with Autoscaling
115
- uses : nick-invision/retry@master
116
- with :
117
- timeout_minutes : 30
118
- max_attempts : 3
119
- command : |
120
- NAME=${IMAGE_REGISTRY} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} TEST_UPGRADE_CHART=false make chart_test_autoscaling_job_count_max_sessions
121
- - name : Upload results
122
- if : always()
123
- uses : actions/upload-artifact@main
124
- with :
125
- name : chart_test_autoscaling_job_count_max_sessions
126
- path : ./tests/tests/*.md
127
- if-no-files-found : ignore
128
- - name : Test Selenium Grid on Kubernetes with Autoscaling
148
+ - name : Build Docker images
129
149
uses : nick-invision/retry@master
130
150
with :
131
- timeout_minutes : 30
151
+ timeout_minutes : 12
132
152
max_attempts : 3
133
- command : |
134
- NAME=${IMAGE_REGISTRY} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} TEST_UPGRADE_CHART=false make chart_test_autoscaling_job_count_strategy_accurate
135
- - name : Upload results
136
- if : always()
137
- uses : actions/upload-artifact@main
138
- with :
139
- name : chart_test_autoscaling_job_count_strategy_accurate
140
- path : ./tests/tests/*.md
141
- if-no-files-found : ignore
153
+ retry_wait_seconds : 60
154
+ command : NAME=${IMAGE_REGISTRY} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} make build
155
+ - name : Build Helm charts
156
+ run : |
157
+ BUILD_DATE=${BUILD_DATE} make chart_build
158
+ echo "CHART_PACKAGE_PATH=$(cat /tmp/selenium_chart_version)" >> $GITHUB_ENV
159
+ echo "CHART_FILE_NAME=$(basename $(cat /tmp/selenium_chart_version))" >> $GITHUB_ENV
142
160
- name : Test Selenium Grid on Kubernetes with Autoscaling
143
161
uses : nick-invision/retry@master
144
162
with :
145
163
timeout_minutes : 30
146
164
max_attempts : 3
147
165
command : |
148
- NAME=${IMAGE_REGISTRY} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} TEST_UPGRADE_CHART=false make chart_test_autoscaling_job_count
166
+ NAME=${IMAGE_REGISTRY} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} TEST_UPGRADE_CHART=false TEST_AUTOSCALING_ITERATIONS=${TEST_AUTOSCALING_ITERATIONS} \
167
+ make ${{ matrix.test-strategy }}
168
+ - name : Rename results
169
+ run : mv ./tests/tests/autoscaling_results.md ./tests/tests/results_${{ matrix.test-strategy }}.md
149
170
- name : Upload results
150
171
if : always()
151
- uses : actions/upload-artifact@main
172
+ uses : actions/upload-artifact@v4
152
173
with :
153
- name : chart_test_autoscaling_job_count
154
- path : ./tests/tests/* .md
174
+ name : results_${{ matrix.test-strategy }}
175
+ path : ./tests/tests/results_${{ matrix.test-strategy }} .md
155
176
if-no-files-found : ignore
156
177
- name : Cleanup Kubernetes cluster
157
178
if : always()
158
179
run : CLUSTER=${CLUSTER} make chart_cluster_cleanup
159
180
- name : Clean up Docker
160
181
if : always()
161
182
run : docker system prune -af
183
+
184
+ publish-results :
185
+ name : Publish Results
186
+ if : (!failure() && !cancelled() && (github.event.inputs.publish-results == 'true'))
187
+ runs-on : ubuntu-latest
188
+ needs : build-and-test
189
+ steps :
190
+ - name : Checkout code
191
+ uses : actions/checkout@main
192
+ with :
193
+ persist-credentials : false
194
+ fetch-depth : 0
195
+ - name : Download results
196
+ uses : actions/download-artifact@v4
197
+ with :
198
+ path : ./.keda
199
+ pattern : ' results_*'
200
+ merge-multiple : ' true'
201
+ run-id : ${{ env.RUN_ID }}
202
+ github-token : ${{ secrets.GITHUB_TOKEN }}
203
+ - name : Commit files
204
+ run : |
205
+ git config --local user.email "[email protected] "
206
+ git config --local user.name "Selenium CI Bot"
207
+ git add .keda/.
208
+ git commit -m "[ci] Upload autoscaling in K8s test results [skip ci]" -a
209
+ - name : Push changes
210
+ uses : ad-m/github-push-action@master
211
+ with :
212
+ github_token : ${{ secrets.SELENIUM_CI_TOKEN }}
213
+ branch : ${{ env.BRANCH_NAME }}
214
+ env :
215
+ BRANCH_NAME : ${{ github.head_ref || github.ref_name }}
216
+
217
+
218
+ pr-results :
219
+ name : Create a PR with the results
220
+ if : (!failure() && !cancelled() && (github.event.inputs.pr-results == 'true'))
221
+ runs-on : ubuntu-latest
222
+ needs : build-and-test
223
+ steps :
224
+ - name : Checkout code
225
+ uses : actions/checkout@main
226
+ with :
227
+ persist-credentials : false
228
+ fetch-depth : 0
229
+ - name : Download results
230
+ uses : actions/download-artifact@v4
231
+ with :
232
+ path : ./.keda
233
+ pattern : ' results_*'
234
+ merge-multiple : ' true'
235
+ run-id : ${{ env.RUN_ID }}
236
+ github-token : ${{ secrets.GITHUB_TOKEN }}
237
+ - name : Commit configs
238
+ run : |
239
+ git config --local user.email "[email protected] "
240
+ git config --local user.name "Selenium CI Bot"
241
+ - name : Create Pull Request
242
+ id : cpr
243
+ uses : peter-evans/create-pull-request@main
244
+ with :
245
+ token : ${{ secrets.SELENIUM_CI_TOKEN }}
246
+ commit-message : " [ci] Upload autoscaling in K8s test results"
247
+ title : " [ci] Upload autoscaling in K8s test results"
248
+ body : " This PR contains the results of the autoscaling tests in Kubernetes"
249
+ committer :
' Selenium CI Bot <[email protected] >'
250
+ author :
' Selenium CI Bot <[email protected] >'
251
+ branch : autoscaling-results
252
+ - name : Check outputs
253
+ if : ${{ steps.cpr.outputs.pull-request-number }}
254
+ run : |
255
+ echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
256
+ echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
0 commit comments