|
7 | 7 | - 'examples/**' |
8 | 8 | - 'lib/**' |
9 | 9 | - 'hw/**' |
| 10 | + - '.github/workflows/build_arm.yml' |
10 | 11 | pull_request: |
11 | 12 | branches: [ master ] |
12 | 13 | paths: |
13 | 14 | - 'src/**' |
14 | 15 | - 'examples/**' |
15 | 16 | - 'lib/**' |
16 | 17 | - 'hw/**' |
| 18 | + - '.github/workflows/build_arm.yml' |
17 | 19 |
|
18 | 20 | concurrency: |
19 | 21 | group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} |
@@ -98,20 +100,32 @@ jobs: |
98 | 100 | find ${ex} -name *.map -print -quit | xargs -I % sh -c 'echo "::group::%"; linkermap -v %; echo "::endgroup::"' |
99 | 101 | done |
100 | 102 |
|
101 | | - # Following steps are for Hardware Test with self-hosted |
102 | | - |
103 | | - - name: Prepare Artifacts |
| 103 | + # Upload binaries for rp2040 hardware test with self-hosted |
| 104 | + - name: Prepare rp2040 Artifacts |
104 | 105 | if: matrix.family == 'rp2040' && github.repository_owner == 'hathach' |
105 | 106 | run: find examples/ -name "*.elf" -exec mv {} . \; |
106 | 107 |
|
107 | | - - name: Upload Artifacts for Hardware Test |
| 108 | + - name: Upload rp2040 Artifacts |
108 | 109 | if: matrix.family == 'rp2040' && github.repository_owner == 'hathach' |
109 | 110 | uses: actions/upload-artifact@v3 |
110 | 111 | with: |
111 | 112 | name: ${{ matrix.family }} |
112 | 113 | path: | |
113 | 114 | *.elf |
114 | 115 |
|
| 116 | + # Upload binaries for stm32l412nucleo hardware test with self-hosted |
| 117 | + - name: Prepare stm32l412nucleo Artifacts |
| 118 | + if: matrix.family == 'stm32l4' |
| 119 | + run: find examples/ -path "*stm32l412nucleo/*.elf" -exec mv {} . \; |
| 120 | + |
| 121 | + - name: Upload stm32l412nucleo Artifacts |
| 122 | + if: matrix.family == 'stm32l4' |
| 123 | + uses: actions/upload-artifact@v3 |
| 124 | + with: |
| 125 | + name: stm32l412nucleo |
| 126 | + path: | |
| 127 | + *.elf |
| 128 | +
|
115 | 129 | # --------------------------------------- |
116 | 130 | # Build all no-family (orphaned) boards |
117 | 131 | # disable this workflow since it is often failed randomly |
@@ -210,8 +224,67 @@ jobs: |
210 | 224 | ./flash.sh dfu_runtime.elf |
211 | 225 | while (! (dfu-util -l | grep "Found Runtime")) && [ $SECONDS -le 5 ]; do :; done |
212 | 226 |
|
213 | | -# - name: Test hid_boot_interface |
214 | | -# run: | |
215 | | -# ./flash.sh hid_boot_interface.elf |
216 | | -# while (! (dfu-util -l | grep "Found Runtime")) && [ $SECONDS -le 5 ]; do :; done |
| 227 | + # --------------------------------------- |
| 228 | + # Hardware in the loop (HIL) |
| 229 | + # Current self-hosted instance is running on an EPYC 7232 server hosted by HiFiPhile user |
| 230 | + # - STM32L412 Nucleo with on-board jlink as ttyACM0 |
| 231 | + # --------------------------------------- |
| 232 | + hw-stm32l412nucleo-test: |
| 233 | + needs: build-arm |
| 234 | + runs-on: [self-hosted, Linux, X64, hifiphile] |
| 235 | + |
| 236 | + steps: |
| 237 | + - name: Clean workspace |
| 238 | + run: | |
| 239 | + echo "Cleaning up previous run" |
| 240 | + rm -rf "${{ github.workspace }}" |
| 241 | + mkdir -p "${{ github.workspace }}" |
| 242 | +
|
| 243 | + - name: Download stm32l4 Artifacts |
| 244 | + uses: actions/download-artifact@v3 |
| 245 | + with: |
| 246 | + name: stm32l412nucleo |
| 247 | + |
| 248 | + - name: Create flash.sh |
| 249 | + run: | |
| 250 | + echo > flash.sh 'echo halt > flash.jlink' |
| 251 | + echo >> flash.sh 'echo r >> flash.jlink' |
| 252 | + echo >> flash.sh 'echo loadfile $1 >> flash.jlink' |
| 253 | + echo >> flash.sh 'echo r >> flash.jlink' |
| 254 | + echo >> flash.sh 'echo go >> flash.jlink' |
| 255 | + echo >> flash.sh 'echo exit >> flash.jlink' |
| 256 | + echo >> flash.sh 'cmdout=$(JLinkExe -device stm32l412kb -if swd -JTAGConf -1,-1 -speed auto -NoGui 1 -ExitOnError 1 -CommandFile flash.jlink)' |
| 257 | + echo >> flash.sh 'if (( $? )) ; then echo $cmdout ; fi' |
| 258 | + chmod +x flash.sh |
| 259 | +
|
| 260 | + - name: Test cdc_dual_ports |
| 261 | + run: | |
| 262 | + ./flash.sh cdc_dual_ports.elf |
| 263 | + while (! ([ -e /dev/ttyACM1 ] && [ -e /dev/ttyACM2 ])) && [ $SECONDS -le 5 ]; do :; done |
| 264 | + test -e /dev/ttyACM1 && echo "ttyACM1 exists" |
| 265 | + test -e /dev/ttyACM2 && echo "ttyACM2 exists" |
217 | 266 |
|
| 267 | + # Debian does not auto mount usb drive. skip this test for now |
| 268 | + - name: Test cdc_msc |
| 269 | + if: false |
| 270 | + run: | |
| 271 | + ./flash.sh cdc_msc.elf |
| 272 | + readme='/media/pi/TinyUSB MSC/README.TXT' |
| 273 | + while (! ([ -e /dev/ttyACM1 ] && [ -f "$readme" ])) && [ $SECONDS -le 5 ]; do :; done |
| 274 | + test -e /dev/ttyACM1 && echo "ttyACM1 exists" |
| 275 | + test -f "$readme" && echo "$readme exists" |
| 276 | + cat "$readme" |
| 277 | +
|
| 278 | + - name: Test dfu |
| 279 | + run: | |
| 280 | + ./flash.sh dfu.elf |
| 281 | + while (! (dfu-util -l | grep "Found DFU")) && [ $SECONDS -le 5 ]; do :; done |
| 282 | + dfu-util -d cafe -a 0 -U dfu0 |
| 283 | + dfu-util -d cafe -a 1 -U dfu1 |
| 284 | + grep "TinyUSB DFU! - Partition 0" dfu0 |
| 285 | + grep "TinyUSB DFU! - Partition 1" dfu1 |
| 286 | +
|
| 287 | + - name: Test dfu_runtime |
| 288 | + run: | |
| 289 | + ./flash.sh dfu_runtime.elf |
| 290 | + while (! (dfu-util -l | grep "Found Runtime")) && [ $SECONDS -le 5 ]; do :; done |
0 commit comments