99 FBT_GIT_SUBMODULE_SHALLOW : 1
1010
1111jobs :
12- run_units_on_bench :
12+ unit_attempt_1 :
1313 runs-on : [ self-hosted, FlipperZeroTest ]
14+ outputs :
15+ timed_out : ${{ steps.check_timeout.outputs.timed_out }}
1416 steps :
1517 - name : Checkout code
1618 uses : actions/checkout@v4
1719 with :
1820 fetch-depth : 1
1921 ref : ${{ github.event.pull_request.head.sha }}
2022
21- - name : ' Flash unit tests firmware'
23+ - name : Flash unit tests firmware
2224 id : flashing
23- if : success()
2425 timeout-minutes : 5
26+ continue-on-error : true
2527 run : |
2628 source scripts/toolchain/fbtenv.sh
2729 ./fbt resources firmware_latest flash LIB_DEBUG=1 FIRMWARE_APP_SET=unit_tests FORCE=1
2830
31+ - name : Copy assets and unit data, reboot and wait for flipper
32+ id : copy
33+ if : steps.flashing.outcome == 'success'
34+ timeout-minutes : 5
35+ continue-on-error : true
36+ run : |
37+ source scripts/toolchain/fbtenv.sh
38+ python3 scripts/testops.py -t=15 await_flipper
39+ python3 scripts/storage.py -f send build/latest/resources /ext
40+ python3 scripts/storage.py -f send /region_data /ext/.int/.region_data
41+ python3 scripts/power.py reboot
42+ python3 scripts/testops.py -t=30 await_flipper
43+
44+ - name : Run units and validate results
45+ id : run_units
46+ if : steps.copy.outcome == 'success'
47+ timeout-minutes : 5
48+ continue-on-error : true
49+ run : |
50+ source scripts/toolchain/fbtenv.sh
51+ python3 scripts/testops.py run_units
52+
53+ - name : Upload test results
54+ if : failure() && steps.flashing.outcome == 'success' && steps.run_units.outcome != 'skipped'
55+ uses : actions/upload-artifact@v4
56+ with :
57+ name : unit-tests_output
58+ path : unit_tests*.txt
59+
60+ - name : Check GDB output
61+ if : failure() && steps.flashing.outcome == 'success'
62+ run : |
63+ ./fbt gdb_trace_all LIB_DEBUG=1 FIRMWARE_APP_SET=unit_tests FORCE=1
64+
65+ - name : Check for timeout
66+ id : check_timeout
67+ run : |
68+ if [ "${{ steps.flashing.conclusion }}" == "timed_out" ] || \
69+ [ "${{ steps.copy.conclusion }}" == "timed_out" ] || \
70+ [ "${{ steps.run_units.conclusion }}" == "timed_out" ]; then
71+ echo "timed_out=true" >> $GITHUB_OUTPUT
72+ else
73+ echo "timed_out=false" >> $GITHUB_OUTPUT
74+ fi
75+
76+ unit_attempt_2 :
77+ needs : unit_attempt_1
78+ if : needs.unit_attempt_1.outputs.timed_out == 'true'
79+ runs-on : [ self-hosted, FlipperZeroTest ]
80+ outputs :
81+ timed_out : ${{ steps.check_timeout.outputs.timed_out }}
82+ steps :
83+ - name : Checkout code
84+ uses : actions/checkout@v4
85+ with :
86+ fetch-depth : 1
87+ ref : ${{ github.event.pull_request.head.sha }}
88+
89+ - name : Flash unit tests firmware
90+ id : flashing
91+ timeout-minutes : 5
92+ continue-on-error : true
93+ run : |
94+ source scripts/toolchain/fbtenv.sh
95+ ./fbt resources firmware_latest flash LIB_DEBUG=1 FIRMWARE_APP_SET=unit_tests FORCE=1
96+
97+ - name : Copy assets and unit data, reboot and wait for flipper
98+ id : copy
99+ if : steps.flashing.outcome == 'success'
100+ timeout-minutes : 5
101+ continue-on-error : true
102+ run : |
103+ source scripts/toolchain/fbtenv.sh
104+ python3 scripts/testops.py -t=15 await_flipper
105+ python3 scripts/storage.py -f send build/latest/resources /ext
106+ python3 scripts/storage.py -f send /region_data /ext/.int/.region_data
107+ python3 scripts/power.py reboot
108+ python3 scripts/testops.py -t=30 await_flipper
109+
110+ - name : Run units and validate results
111+ id : run_units
112+ if : steps.copy.outcome == 'success'
113+ timeout-minutes : 5
114+ continue-on-error : true
115+ run : |
116+ source scripts/toolchain/fbtenv.sh
117+ python3 scripts/testops.py run_units
118+
119+ - name : Upload test results
120+ if : failure() && steps.flashing.outcome == 'success' && steps.run_units.outcome != 'skipped'
121+ uses : actions/upload-artifact@v4
122+ with :
123+ name : unit-tests_output
124+ path : unit_tests*.txt
125+
126+ - name : Check GDB output
127+ if : failure() && steps.flashing.outcome == 'success'
128+ run : |
129+ ./fbt gdb_trace_all LIB_DEBUG=1 FIRMWARE_APP_SET=unit_tests FORCE=1
130+
131+ - name : Check for timeout
132+ id : check_timeout
133+ run : |
134+ if [ "${{ steps.flashing.conclusion }}" == "timed_out" ] || \
135+ [ "${{ steps.copy.conclusion }}" == "timed_out" ] || \
136+ [ "${{ steps.run_units.conclusion }}" == "timed_out" ]; then
137+ echo "timed_out=true" >> $GITHUB_OUTPUT
138+ else
139+ echo "timed_out=false" >> $GITHUB_OUTPUT
140+ fi
141+
142+ unit_attempt_3 :
143+ needs : unit_attempt_2
144+ if : needs.unit_attempt_2.outputs.timed_out == 'true'
145+ runs-on : [ self-hosted, FlipperZeroTest ]
146+ steps :
147+ - name : Checkout code
148+ uses : actions/checkout@v4
149+ with :
150+ fetch-depth : 1
151+ ref : ${{ github.event.pull_request.head.sha }}
152+
153+ - name : Flash unit tests firmware
154+ id : flashing
155+ timeout-minutes : 5
156+ continue-on-error : true
157+ run : |
158+ source scripts/toolchain/fbtenv.sh
159+ ./fbt resources firmware_latest flash LIB_DEBUG=1 FIRMWARE_APP_SET=unit_tests FORCE=1
29160
30- - name : ' Copy assets and unit data, reboot and wait for flipper'
161+ - name : Copy assets and unit data, reboot and wait for flipper
31162 id : copy
32163 if : steps.flashing.outcome == 'success'
33164 timeout-minutes : 5
165+ continue-on-error : true
34166 run : |
35167 source scripts/toolchain/fbtenv.sh
36168 python3 scripts/testops.py -t=15 await_flipper
@@ -39,22 +171,23 @@ jobs:
39171 python3 scripts/power.py reboot
40172 python3 scripts/testops.py -t=30 await_flipper
41173
42- - name : ' Run units and validate results'
174+ - name : Run units and validate results
43175 id : run_units
44176 if : steps.copy.outcome == 'success'
45177 timeout-minutes : 5
178+ continue-on-error : true
46179 run : |
47180 source scripts/toolchain/fbtenv.sh
48181 python3 scripts/testops.py run_units
49182
50- - name : ' Upload test results'
183+ - name : Upload test results
51184 if : failure() && steps.flashing.outcome == 'success' && steps.run_units.outcome != 'skipped'
52185 uses : actions/upload-artifact@v4
53186 with :
54187 name : unit-tests_output
55188 path : unit_tests*.txt
56189
57- - name : ' Check GDB output'
190+ - name : Check GDB output
58191 if : failure() && steps.flashing.outcome == 'success'
59192 run : |
60193 ./fbt gdb_trace_all LIB_DEBUG=1 FIRMWARE_APP_SET=unit_tests FORCE=1
0 commit comments