name: 'Unit tests' on: pull_request: env: TARGETS: f7 DEFAULT_TARGET: f7 FBT_TOOLCHAIN_PATH: /opt/ FBT_GIT_SUBMODULE_SHALLOW: 1 jobs: run_units_on_bench: runs-on: [ self-hosted, FlipperZeroTest ] steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 1 ref: ${{ github.event.pull_request.head.sha }} - name: 'Flash unit tests firmware' id: flashing if: success() timeout-minutes: 20 run: | source scripts/toolchain/fbtenv.sh ./fbt resources firmware_latest flash LIB_DEBUG=1 FIRMWARE_APP_SET=unit_tests FORCE=1 - name: 'Copy assets and unit data, reboot and wait for flipper' id: copy if: steps.flashing.outcome == 'success' timeout-minutes: 7 run: | source scripts/toolchain/fbtenv.sh python3 scripts/testops.py -t=15 await_flipper python3 scripts/storage.py -f send build/latest/resources /ext python3 scripts/storage.py -f send /region_data /ext/.int/.region_data python3 scripts/power.py reboot python3 scripts/testops.py -t=30 await_flipper - name: 'Run units and validate results' id: run_units if: steps.copy.outcome == 'success' timeout-minutes: 7 run: | source scripts/toolchain/fbtenv.sh python3 scripts/testops.py run_units - name: 'Upload test results' if: failure() && steps.flashing.outcome == 'success' && steps.run_units.outcome != 'skipped' uses: actions/upload-artifact@v4 with: name: unit-tests_output path: unit_tests*.txt - name: 'Check GDB output' if: failure() && steps.flashing.outcome == 'success' run: | ./fbt gdb_trace_all LIB_DEBUG=1 FIRMWARE_APP_SET=unit_tests FORCE=1