1- name : Test Autoscaling
1+ name : Test Grid Autoscaling in Kubernetes
22
33on :
44 workflow_call :
88 required : false
99 type : string
1010 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'
1121 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'
1238
1339permissions :
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' }}
1546
1647jobs :
1748 build-and-test :
1849 name : Test K8s
19- runs-on : blacksmith-16vcpu- ubuntu-2204
50+ runs-on : ubuntu-latest
2051 strategy :
2152 fail-fast : false
2253 matrix :
2354 include :
2455 - 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
2587 cluster : ' minikube'
2688 helm-version : ' v3.16.3'
2789 docker-version : ' 27.3.1'
53115 with :
54116 python-version : ${{ matrix.python-version }}
55117 check-latest : true
56- - name : Verify chart configuration up-to-date
57- run : make lint_readme_charts
58118 - name : Get branch name (only for push to branch)
59119 if : github.event_name == 'push'
60120 run : echo "BRANCH=$(echo ${PUSH_BRANCH##*/})" >> $GITHUB_ENV
@@ -79,83 +139,118 @@ jobs:
79139 echo "AUTHORS=${AUTHORS}" >> $GITHUB_ENV
80140 env :
81141 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
94142 - name : Setup Kubernetes cluster
95143 uses : nick-invision/retry@master
96144 with :
97145 timeout_minutes : 10
98146 max_attempts : 3
99147 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
129149 uses : nick-invision/retry@master
130150 with :
131- timeout_minutes : 30
151+ timeout_minutes : 12
132152 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
142160 - name : Test Selenium Grid on Kubernetes with Autoscaling
143161 uses : nick-invision/retry@master
144162 with :
145163 timeout_minutes : 30
146164 max_attempts : 3
147165 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
149170 - name : Upload results
150171 if : always()
151- uses : actions/upload-artifact@main
172+ uses : actions/upload-artifact@v4
152173 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
155176 if-no-files-found : ignore
156177 - name : Cleanup Kubernetes cluster
157178 if : always()
158179 run : CLUSTER=${CLUSTER} make chart_cluster_cleanup
159180 - name : Clean up Docker
160181 if : always()
161182 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