1
- name : Run tests in hardware
1
+ name : Run tests
2
2
3
3
on :
4
4
pull_request :
@@ -16,9 +16,7 @@ concurrency:
16
16
17
17
jobs :
18
18
gen_chunks :
19
- if : |
20
- contains(github.event.pull_request.labels.*.name, 'hil_test') ||
21
- (github.event_name == 'schedule' && github.repository == 'espressif/arduino-esp32')
19
+ if : github.repository == 'espressif/arduino-esp32'
22
20
name : Generate Chunks matrix
23
21
runs-on : ubuntu-latest
24
22
outputs :
41
39
CHUNKS=$(jq -c -n '$ARGS.positional' --args `seq 0 1 $((sketches - 1))`)
42
40
echo "chunks=${CHUNKS}" >>$GITHUB_OUTPUT
43
41
44
- Build :
42
+ build :
45
43
needs : gen_chunks
46
44
name : ${{matrix.chip}}-Build#${{matrix.chunks}}
47
45
runs-on : ubuntu-latest
63
61
~/.arduino/tests/*/build*.tmp/*.bin
64
62
~/.arduino/tests/*/build*.tmp/*.json
65
63
if-no-files-found : error
66
- Test :
67
- needs : [gen_chunks, Build]
68
- name : ${{matrix.chip}}-Test#${{matrix.chunks}}
64
+
65
+ qemu-test :
66
+ needs : [gen_chunks, build]
67
+ name : ${{matrix.chip}}-QEMU_Test#${{matrix.chunks}}
68
+ strategy :
69
+ fail-fast : false
70
+ matrix :
71
+ chip : ['esp32', 'esp32c3'] # Currently only ESP32 and ESP32-C3 are supported by QEMU
72
+ chunks : ${{fromJson(needs.gen_chunks.outputs.chunks)}}
73
+ runs-on : ubuntu-latest
74
+ env :
75
+ QEMU_INSTALL_PATH : " $HOME"
76
+ steps :
77
+ - name : Checkout repository
78
+ uses : actions/checkout@v4
79
+
80
+ - name : Get QEMU version
81
+ uses :
pozetroninc/[email protected]
82
+ id : get-qemu-version
83
+ with :
84
+ owner : espressif
85
+ repo : qemu
86
+ excludes : prerelease, draft
87
+
88
+ - name : Cache tools
89
+ id : cache-linux
90
+ uses : actions/cache@v4
91
+ with :
92
+ path : |
93
+ ~/qemu
94
+ ~/.cache/pip
95
+ key : ${{ steps.get-qemu-version.outputs.release }}-${{ hashFiles('.github/workflows/hil.yml') }}
96
+
97
+ - name : Install python dependencies
98
+ run : |
99
+ pip install -U pip
100
+ pip install -r tests/requirements.txt --extra-index-url https://dl.espressif.com/pypi
101
+
102
+ - name : Download QEMU
103
+ if : steps.cache-linux.outputs.cache-hit != 'true'
104
+ run : |
105
+ cd ${{ env.QEMU_INSTALL_PATH }}
106
+ underscore_release=$(echo ${{ steps.get-qemu-version.outputs.release }} | sed 's/\-/_/g')
107
+ curl -L https://github.com/espressif/qemu/releases/download/${{ steps.get-qemu-version.outputs.release }}/qemu-riscv32-softmmu-${underscore_release}-x86_64-linux-gnu.tar.xz > qemu-riscv32.tar.xz
108
+ curl -L https://github.com/espressif/qemu/releases/download/${{ steps.get-qemu-version.outputs.release }}/qemu-xtensa-softmmu-${underscore_release}-x86_64-linux-gnu.tar.xz > qemu-xtensa.tar.xz
109
+ tar -xf qemu-riscv32.tar.xz
110
+ tar -xf qemu-xtensa.tar.xz
111
+ rm qemu-*
112
+ echo "QEMU_PATH=${{ env.QEMU_INSTALL_PATH }}/qemu" >> $GITHUB_ENV
113
+
114
+ - name : Download ${{matrix.chip}}-${{matrix.chunks}} artifacts
115
+ uses : actions/download-artifact@v4
116
+ with :
117
+ name : ${{matrix.chip}}-${{matrix.chunks}}.artifacts
118
+ path : ~/.arduino/tests/
119
+
120
+ - name : Run Tests
121
+ run : QEMU_PATH="${{env.QEMU_PATH}}" bash .github/scripts/tests_run.sh -c -t ${{matrix.chip}} -i ${{matrix.chunks}} -m ${{env.MAX_CHUNKS}} -q
122
+
123
+ - name : Upload test result artifacts
124
+ uses : actions/upload-artifact@v4
125
+ if : always()
126
+ with :
127
+ name : qemu_results-${{matrix.chip}}-${{matrix.chunks}}
128
+ path : tests/*/*.xml
129
+
130
+ hardware-test :
131
+ needs : [gen_chunks, build]
132
+ name : ${{matrix.chip}}-Hardware_Test#${{matrix.chunks}}
133
+ if : |
134
+ contains(github.event.pull_request.labels.*.name, 'hil_test') || github.event_name == 'schedule'
69
135
strategy :
70
136
fail-fast : false
71
137
matrix :
@@ -100,15 +166,13 @@ jobs:
100
166
uses : actions/upload-artifact@v4
101
167
if : always()
102
168
with :
103
- name : test_results -${{matrix.chip}}-${{matrix.chunks}}
169
+ name : hw_results -${{matrix.chip}}-${{matrix.chunks}}
104
170
path : tests/*/*.xml
105
171
106
172
event_file :
107
173
name : " Event File"
108
- if : |
109
- contains(github.event.pull_request.labels.*.name, 'hil_test') ||
110
- github.event_name == 'schedule'
111
- needs : Test
174
+ if : ${{ always() && !failure() && !cancelled() }}
175
+ needs : [hardware-test, qemu-test]
112
176
runs-on : ubuntu-latest
113
177
steps :
114
178
- name : Upload
0 commit comments