Parallel rtt #24
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Test Scan | |
| on: | |
| push: | |
| branches: [main] | |
| paths: | |
| - 'src/bmlab_toolkit/scan_cli.py' | |
| - 'src/bmlab_toolkit/jlink_programmer.py' | |
| - 'src/bmlab_toolkit/programmer.py' | |
| - 'src/bmlab_toolkit/constants.py' | |
| - 'pyproject.toml' | |
| - '.github/actions/setup-jlink-network/**' | |
| - '.github/workflows/test-scan.yml' | |
| pull_request: | |
| paths: | |
| - 'src/bmlab_toolkit/scan_cli.py' | |
| - 'src/bmlab_toolkit/jlink_programmer.py' | |
| - 'src/bmlab_toolkit/programmer.py' | |
| - 'src/bmlab_toolkit/constants.py' | |
| - 'pyproject.toml' | |
| - '.github/actions/setup-jlink-network/**' | |
| - '.github/workflows/test-scan.yml' | |
| workflow_dispatch: | |
| env: | |
| VNET_BASE: 192.168.3 | |
| VNET_MASK: 24 | |
| jobs: | |
| test-scan: | |
| runs-on: self-hosted | |
| steps: | |
| - name: Cleanup before start | |
| if: always() | |
| run: | | |
| pkill -9 -f JLinkRemoteServer || true | |
| docker rm -f jlink100 jlink101 jlink102 2>/dev/null || true | |
| docker network rm jlink-net 2>/dev/null || true | |
| sleep 2 | |
| - uses: actions/checkout@v4 | |
| - name: Build release distributions | |
| run: | | |
| python3 -m venv .venv | |
| . .venv/bin/activate | |
| pip install -e ".[dev]" | |
| - name: Test 1 — bmlab-scan (no arguments) | |
| run: | | |
| . .venv/bin/activate | |
| bmlab-scan | tee scan1.txt | |
| count=$(grep -c "Target: *STM32F103RE" scan1.txt) | |
| awk '/JLink Programmer/ {serial=""} /Serial:/ {serial=$2} /Target: *STM32F103RE/ && serial {print serial}' scan1.txt | sort | uniq > serials.txt | |
| if [ "$count" -ne 3 ]; then | |
| echo "Test 1 failed: expected 3 STM32F103RE, found $count" | |
| cat scan1.txt | |
| exit 1 | |
| fi | |
| - name: Test 2 — bmlab-scan -p jlink | |
| run: | | |
| . .venv/bin/activate | |
| bmlab-scan -p jlink | tee scan2.txt | |
| diff scan1.txt scan2.txt | |
| - name: Test 3 — Start JLinkRemoteServer and scan via network | |
| run: | | |
| . .venv/bin/activate | |
| serial=$(head -n1 serials.txt) | |
| nohup JLinkRemoteServer -select usb=$serial -device STM32F103RE -endian little -speed 4000 -if swd > /dev/null 2>&1 & | |
| sleep 3 | |
| bmlab-scan --network 127.0.0.1/32 | tee scan3.txt | |
| grep -q "Target: *STM32F103RE" scan3.txt | |
| grep -q "IP: *127.0.0.1" scan3.txt | |
| pkill -9 -f JLinkRemoteServer || true | |
| sleep 1 | |
| - name: Test 4 — bmlab-scan --network 127.0.0.1/32 -p jlink | |
| run: | | |
| . .venv/bin/activate | |
| serial=$(head -n1 serials.txt) | |
| nohup JLinkRemoteServer -select usb=$serial -device STM32F103RE -endian little -speed 4000 -if swd > /dev/null 2>&1 & | |
| sleep 3 | |
| bmlab-scan --network 127.0.0.1/32 -p jlink | tee scan4.txt | |
| diff scan3.txt scan4.txt | |
| pkill -9 -f JLinkRemoteServer || true | |
| sleep 1 | |
| - name: Test 5 — bmlab-scan --network 127.0.0.2/32 (negative) | |
| run: | | |
| . .venv/bin/activate | |
| ! bmlab-scan --network 127.0.0.2/32 | tee scan5.txt | grep -q "STM32F103RE" | |
| grep -qi "No JLink Remote Servers found on the network." scan5.txt | |
| - name: Setup JLink network containers | |
| uses: ./.github/actions/setup-jlink-network | |
| with: | |
| serials-file: serials.txt | |
| vnet-base: ${{ env.VNET_BASE }} | |
| vnet-mask: ${{ env.VNET_MASK }} | |
| - name: Test 6 — Multiple RemoteServers network scan | |
| run: | | |
| . .venv/bin/activate | |
| bmlab-scan --network $VNET_BASE.0/$VNET_MASK | tee scan6.txt | |
| f103_count=$(grep -c "Target:.*STM32F103RE" scan6.txt || echo 0) | |
| if [ "$f103_count" -ne 3 ]; then | |
| echo "Expected 3 STM32F103RE devices, found $f103_count" | |
| cat scan6.txt | |
| exit 1 | |
| fi | |
| for ip in 100 101 102; do | |
| if ! grep -q "IP:.*$VNET_BASE\.$ip" scan6.txt; then | |
| echo "No device found at $VNET_BASE.$ip" | |
| cat scan6.txt | |
| exit 1 | |
| fi | |
| done | |
| - name: Test 7 — Network scan with IP range filter | |
| run: | | |
| . .venv/bin/activate | |
| bmlab-scan --network $VNET_BASE.0/$VNET_MASK --start-ip 100 --end-ip 150 | tee scan7.txt | |
| f103_count=$(grep -c "Target:.*STM32F103RE" scan7.txt || echo 0) | |
| if [ "$f103_count" -ne 3 ]; then | |
| echo "Expected 3 STM32F103RE devices, found $f103_count" | |
| cat scan7.txt | |
| exit 1 | |
| fi | |
| for ip in 100 101 102; do | |
| if ! grep -q "IP:.*$VNET_BASE\.$ip" scan7.txt; then | |
| echo "No device found at $VNET_BASE.$ip" | |
| cat scan7.txt | |
| exit 1 | |
| fi | |
| done | |
| - name: Cleanup after Docker tests | |
| if: always() | |
| run: | | |
| docker rm -f jlink100 jlink101 jlink102 || true | |
| docker network rm jlink-net || true | |
| pkill -9 -f JLinkRemoteServer || true | |
| sleep 2 |