1+ # This file is used to run the runtime tests for the Arduino core for ESP32.
2+ # The tests are run on the hardware, Wokwi and QEMU emulators.
3+ # The QEMU tests are disabled for now as they are redundant with most of the Wokwi tests.
4+ # As the Wokwi tests require access to secrets, they are run in a separate workflow.
5+ # We need to ensure that the artifacts from previous tests in the chain are propagated for publishing the results.
6+ # This is the current trigger sequence for the tests:
7+ # tests.yml -> tests_wokwi.yml -> tests_results.yml
8+ # ⌙> tests_build.yml
9+ # ⌙> tests_hw.yml
10+ # ⌙> tests_qemu.yml
11+
112name : Runtime Tests
213
314on :
415 workflow_dispatch :
5- pull_request_target :
16+ pull_request :
617 types : [opened, reopened, closed, synchronize, labeled, unlabeled]
718 paths :
19+ - ' .github/workflows/tests*'
20+ - ' .github/scripts/*.sh'
21+ - ' !.github/scripts/check-cmakelists.sh'
22+ - ' !.github/scripts/find_*'
23+ - ' !.github/scripts/on-*.sh'
24+ - ' !.github/scripts/set_push_chunks.sh'
25+ - ' !.github/scripts/update-version.sh'
26+ - ' !.github/scripts/upload_py_tools.sh'
827 - ' tests/**'
928 - ' cores/**'
1029 - ' libraries/**'
@@ -19,14 +38,19 @@ concurrency:
1938 group : tests-${{ github.event.pull_request.number || github.ref }}
2039 cancel-in-progress : true
2140
22- # To avoid giving elevated permissions to the entire workflow, specify default permissions at the top level
23- # and then override them for specific jobs.
24- permissions : { contents: read }
25-
2641jobs :
42+ push-event-file :
43+ name : Push event file
44+ runs-on : ubuntu-latest
45+ steps :
46+ - name : Upload
47+ uses : actions/upload-artifact@v4
48+ with :
49+ name : event_file
50+ path : ${{ github.event_path }}
51+
2752 gen-matrix :
2853 name : Generate matrix
29- if : github.event.action != 'closed'
3054 runs-on : ubuntu-latest
3155 outputs :
3256 build-types : ${{ steps.set-matrix.outputs.build-types }}
5983
6084 call-build-tests :
6185 name : Build
62- uses : espressif/arduino-esp32/ .github/workflows/build_tests .yml@master
86+ uses : ./ .github/workflows/tests_build .yml
6387 needs : gen-matrix
64- if : github.event.action != 'closed'
6588 strategy :
6689 matrix :
6790 type : ${{ fromJson(needs.gen-matrix.outputs.build-types) }}
@@ -72,11 +95,11 @@ jobs:
7295
7396 call-hardware-tests :
7497 name : Hardware
75- uses : espressif/arduino-esp32/ .github/workflows/hw .yml@master
98+ uses : ./ .github/workflows/tests_hw .yml
7699 needs : [gen-matrix, call-build-tests]
77100 if : |
78101 github.repository == 'espressif/arduino-esp32' &&
79- (github.event_name != 'pull_request_target ' ||
102+ (github.event_name != 'pull_request ' ||
80103 contains(github.event.pull_request.labels.*.name, 'hil_test'))
81104 strategy :
82105 fail-fast : false
@@ -87,26 +110,10 @@ jobs:
87110 type : ${{ matrix.type }}
88111 chip : ${{ matrix.chip }}
89112
90- call-wokwi-tests :
91- name : Wokwi
92- uses : espressif/arduino-esp32/.github/workflows/wokwi.yml@master
93- needs : [gen-matrix, call-build-tests]
94- if : github.event.action != 'closed'
95- strategy :
96- fail-fast : false
97- matrix :
98- type : ${{ fromJson(needs.gen-matrix.outputs.wokwi-types) }}
99- chip : ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2']
100- secrets :
101- WOKWI_CLI_TOKEN : ${{ secrets.WOKWI_CLI_TOKEN }}
102- with :
103- type : ${{ matrix.type }}
104- chip : ${{ matrix.chip }}
105-
106113 # This job is disabled for now
107114 call-qemu-tests :
108115 name : QEMU
109- uses : espressif/arduino-esp32/ .github/workflows/qemu .yml@master
116+ uses : ./ .github/workflows/tests_qemu .yml
110117 needs : [gen-matrix, call-build-tests]
111118 if : false
112119 strategy :
@@ -118,78 +125,4 @@ jobs:
118125 type : ${{ matrix.type }}
119126 chip : ${{ matrix.chip }}
120127
121- unit-test-results :
122- name : Unit Test Results
123- needs : [call-hardware-tests, call-wokwi-tests, call-qemu-tests]
124- if : always() && github.event_name == 'pull_request_target'
125- runs-on : ubuntu-latest
126- permissions :
127- checks : write
128- pull-requests : write
129- steps :
130- - name : Download and Extract HW Artifacts
131- uses : actions/download-artifact@v4
132- continue-on-error : true
133- with :
134- merge-multiple : true
135- pattern : tests-results-hw-*
136- path : ./results/hw
137-
138- - name : Download and Extract Wokwi Artifacts
139- uses : actions/download-artifact@v4
140- continue-on-error : true
141- with :
142- merge-multiple : true
143- pattern : tests-results-wokwi-*
144- path : ./results/wokwi
145-
146- - name : Download and Extract QEMU Artifacts
147- uses : actions/download-artifact@v4
148- continue-on-error : true
149- with :
150- merge-multiple : true
151- pattern : tests-results-qemu-*
152- path : ./results/qemu
153-
154- - name : Publish Unit Test Results
155- uses : EnricoMi/publish-unit-test-result-action@v2
156- with :
157- commit : ${{ github.event.pull_request.head.sha || github.sha }}
158- files : ./results/**/*.xml
159- clean :
160- name : Clean objects
161- needs : unit-test-results
162- if : always()
163- permissions :
164- actions : write
165- runs-on : ubuntu-latest
166- steps :
167- - name : Clean up caches
168- uses : actions/github-script@v7
169- with :
170- script : |
171- const ref = '${{ github.event.pull_request.number || github.ref }}';
172- const key_prefix = 'tests-' + ref + '-';
173-
174- if ('${{ github.event_name }}' == 'pull_request_target' && '${{ github.event.action }}' != 'closed') {
175- console.log('Skipping cache cleanup for open PR');
176- return;
177- }
178-
179- await github.paginate(github.rest.actions.getActionsCacheList, {
180- owner: context.repo.owner,
181- repo: context.repo.repo,
182- per_page: 100,
183- key: key_prefix
184- }).then(caches => {
185- if (caches) {
186- for (const cache of caches) {
187- console.log(`Deleting cache: ${cache.key}`);
188- github.rest.actions.deleteActionsCacheById({
189- owner: context.repo.owner,
190- repo: context.repo.repo,
191- cache_id: cache.id
192- });
193- }
194- }
195- });
128+ # Wokwi tests are run after this workflow as it needs access to secrets
0 commit comments