Skip to content

Refactor Docker image handling in JLink setup workflows and cleanup s… #21

Refactor Docker image handling in JLink setup workflows and cleanup s…

Refactor Docker image handling in JLink setup workflows and cleanup s… #21

Workflow file for this run

name: Test Erase
on:
push:
branches: [main]
paths:
- 'src/bmlab_toolkit/erase_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-erase.yml'
- '.github/workflows/fw.*'
pull_request:
paths:
- 'src/bmlab_toolkit/erase_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-erase.yml'
- '.github/workflows/fw.*'
workflow_dispatch:
env:
VNET_BASE: 192.168.3
VNET_MASK: 24
jobs:
test-erase:
runs-on: self-hosted
steps:
- name: Cleanup before start
if: always()
run: |
pkill -9 -f JLinkRemoteServer || true
sleep 2
- uses: actions/checkout@v4
- name: Install package
run: |
python3 -m venv .venv
. .venv/bin/activate
pip install -e ".[dev]"
- name: Detect devices and save serials
run: |
. .venv/bin/activate
bmlab-scan | tee scan.txt
count=$(grep -c "Target: *STM32F103RE" scan.txt)
awk '/JLink Programmer/ {serial=""} /Serial:/ {serial=$2} /Target: *STM32F103RE/ && serial {print serial}' scan.txt | sort | uniq > serials.txt
if [ "$count" -ne 3 ]; then
echo "Test failed: expected 3 STM32F103RE, found $count"
cat scan.txt
exit 1
fi
- name: Test 1 — Erase single device by serial
run: |
. .venv/bin/activate
serial=$(sed -n '1p' serials.txt)
bmlab-erase --serial $serial --mcu STM32F103RE | tee erase-serial1.txt
if ! grep -q "Success" erase-serial1.txt; then
echo "Test 1 failed: erase not successful"
cat erase-serial1.txt
exit 1
fi
- name: Test 2 — Erase without mcu (auto-detect target)
run: |
. .venv/bin/activate
serial=$(sed -n '1p' serials.txt)
bmlab-erase --serial $serial | tee erase-serial2.txt
if ! grep -q "Success" erase-serial2.txt; then
echo "Test 2 failed: erase not successful"
cat erase-serial2.txt
exit 1
fi
- name: Test 3 — Erase multiple by serial
run: |
. .venv/bin/activate
serial1=$(sed -n '1p' serials.txt)
serial2=$(sed -n '2p' serials.txt)
serial3=$(sed -n '3p' serials.txt)
bmlab-erase --serial $serial1 $serial2 $serial3 --mcu STM32F103RE | tee erase-serial3.txt
success_count=$(grep -c "Success" erase-serial3.txt || echo 0)
if [ "$success_count" -ne 3 ]; then
echo "Test 3 failed: expected 3 successful erases, found $success_count"
cat erase-serial3.txt
exit 1
fi
- 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 4 — Erase single device by IP
run: |
. .venv/bin/activate
bmlab-erase --ip $VNET_BASE.100 --mcu STM32F103RE | tee erase-ip1.txt
if ! grep -q "Success" erase-ip1.txt; then
echo "Test 4 failed: erase not successful"
cat erase-ip1.txt
exit 1
fi
- name: Test 5 — Erase three devices in parallel by IP
run: |
. .venv/bin/activate
bmlab-erase --ip $VNET_BASE.100 $VNET_BASE.101 $VNET_BASE.102 --mcu STM32F103RE | tee erase-ip3.txt
success_count=$(grep -c "Success" erase-ip3.txt || echo 0)
if [ "$success_count" -ne 3 ]; then
echo "Test 5 failed: expected 3 successful erases, found $success_count"
cat erase-ip3.txt
exit 1
fi
for ip in 100 101 102; do
if ! grep -q "$VNET_BASE\.$ip" erase-ip3.txt; then
echo "Test 5 failed: no result for $VNET_BASE.$ip"
cat erase-ip3.txt
exit 1
fi
done
- name: Cleanup after tests
if: always()
run: |
pkill -9 -f JLinkRemoteServer || true
sleep 2