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
+
1
12
name : Runtime Tests
2
13
3
14
on :
4
15
workflow_dispatch :
5
- pull_request_target :
16
+ pull_request :
6
17
types : [opened, reopened, closed, synchronize, labeled, unlabeled]
7
18
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'
8
27
- ' tests/**'
9
28
- ' cores/**'
10
29
- ' libraries/**'
@@ -19,14 +38,19 @@ concurrency:
19
38
group : tests-${{ github.event.pull_request.number || github.ref }}
20
39
cancel-in-progress : true
21
40
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
-
26
41
jobs :
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
+
27
52
gen-matrix :
28
53
name : Generate matrix
29
- if : github.event.action != 'closed'
30
54
runs-on : ubuntu-latest
31
55
outputs :
32
56
build-types : ${{ steps.set-matrix.outputs.build-types }}
59
83
60
84
call-build-tests :
61
85
name : Build
62
- uses : espressif/arduino-esp32/ .github/workflows/build_tests .yml@master
86
+ uses : ./ .github/workflows/tests_build .yml
63
87
needs : gen-matrix
64
- if : github.event.action != 'closed'
65
88
strategy :
66
89
matrix :
67
90
type : ${{ fromJson(needs.gen-matrix.outputs.build-types) }}
@@ -72,11 +95,11 @@ jobs:
72
95
73
96
call-hardware-tests :
74
97
name : Hardware
75
- uses : espressif/arduino-esp32/ .github/workflows/hw .yml@master
98
+ uses : ./ .github/workflows/tests_hw .yml
76
99
needs : [gen-matrix, call-build-tests]
77
100
if : |
78
101
github.repository == 'espressif/arduino-esp32' &&
79
- (github.event_name != 'pull_request_target ' ||
102
+ (github.event_name != 'pull_request ' ||
80
103
contains(github.event.pull_request.labels.*.name, 'hil_test'))
81
104
strategy :
82
105
fail-fast : false
@@ -87,26 +110,10 @@ jobs:
87
110
type : ${{ matrix.type }}
88
111
chip : ${{ matrix.chip }}
89
112
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
-
106
113
# This job is disabled for now
107
114
call-qemu-tests :
108
115
name : QEMU
109
- uses : espressif/arduino-esp32/ .github/workflows/qemu .yml@master
116
+ uses : ./ .github/workflows/tests_qemu .yml
110
117
needs : [gen-matrix, call-build-tests]
111
118
if : false
112
119
strategy :
@@ -118,78 +125,4 @@ jobs:
118
125
type : ${{ matrix.type }}
119
126
chip : ${{ matrix.chip }}
120
127
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