diff --git a/.gitea/workflows/lint.yml b/.gitea/workflows/lint.yml index f4abaa8..fbaefa6 100644 --- a/.gitea/workflows/lint.yml +++ b/.gitea/workflows/lint.yml @@ -123,6 +123,7 @@ jobs: cd workspace SENSORS="muddy-storm:192.168.129.29 amber-maple:192.168.129.30 hollow-acorn:192.168.129.31" OTA_PORT=8899 + EXPECTED_VERSION="${{ github.ref_name }}" # Get runner IP (first non-loopback interface) RUNNER_IP=$(hostname -I | awk '{print $1}') @@ -145,20 +146,60 @@ jobs: for entry in $SENSORS; do NAME="${entry%%:*}" IP="${entry##*:}" - echo "=== Starting OTA on $NAME ($IP) ===" echo "OTA $FIRMWARE_URL" | nc -u -w 2 "$IP" 5501 & done - - # Wait for OTA commands to be sent wait - echo "=== OTA commands sent, waiting for devices to update (60s) ===" - sleep 60 + # Monitor progress + echo "=== Monitoring OTA progress (timeout: 90s) ===" + TIMEOUT=90 + INTERVAL=5 + ELAPSED=0 + + while [ $ELAPSED -lt $TIMEOUT ]; do + sleep $INTERVAL + ELAPSED=$((ELAPSED + INTERVAL)) + + echo "--- Progress check at ${ELAPSED}s ---" + ALL_UPDATED=true + + for entry in $SENSORS; do + NAME="${entry%%:*}" + IP="${entry##*:}" + + # Query sensor version via UDP STATUS command + RESPONSE=$(echo "STATUS" | nc -u -w 1 "$IP" 5501 2>/dev/null || echo "") + VERSION=$(echo "$RESPONSE" | grep -oP 'version=\K[^ ]+' || echo "offline") + + if [ "$VERSION" = "$EXPECTED_VERSION" ]; then + echo " $NAME: ✓ $VERSION" + elif [ "$VERSION" = "offline" ] || [ -z "$VERSION" ]; then + echo " $NAME: ⟳ updating..." + ALL_UPDATED=false + else + echo " $NAME: $VERSION (waiting for $EXPECTED_VERSION)" + ALL_UPDATED=false + fi + done + + if [ "$ALL_UPDATED" = true ]; then + echo "=== All sensors updated to $EXPECTED_VERSION ===" + break + fi + done # Stop HTTP server kill $HTTP_PID 2>/dev/null || true - echo "=== Deployment complete ===" + # Final status + echo "=== Final sensor status ===" + for entry in $SENSORS; do + NAME="${entry%%:*}" + IP="${entry##*:}" + RESPONSE=$(echo "STATUS" | nc -u -w 1 "$IP" 5501 2>/dev/null || echo "") + VERSION=$(echo "$RESPONSE" | grep -oP 'version=\K[^ ]+' || echo "offline") + echo " $NAME: $VERSION" + done cppcheck: name: C/C++ Static Analysis