From 51b1ce6377f3e04149bdbf0657a27c60904bf01e Mon Sep 17 00:00:00 2001 From: "John Q. Herman" Date: Fri, 17 Jul 2026 23:50:21 -0400 Subject: [PATCH] fix(ci): unblock the v1.0.7 release build The tag-gated release build failed on two independent flakes, so v1.0.7 tagged but never published artifacts or an appcast. - Package step: choco's NSIS install silently no-ops when the community feed 503s (exit 0, 0 packages), leaving cpack -G NSIS with no makensis. Retry the fetch and assert makensis.exe before packaging so a feed blip fails at install, not at packaging. - AllenHeathSessionTest: the stub MixRack framed the client's session seed by scanning for the 0xE7 terminator, but the seed's UDP-port field can itself be 0xE7 (~1% of ephemeral ports), truncating the frame so the stub never replied and the handshake stalled. Consume the fixed-length seed by structure instead. --- .github/workflows/build.yml | 12 +++++++++++- tests/test_allenheath_session.cpp | 11 +++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8a1a4b2..5f37570 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -94,7 +94,17 @@ jobs: run: vcpkg install liblo:x64-windows - name: Install NSIS - run: choco install nsis -y + run: | + $ErrorActionPreference = "Stop" + for ($i = 1; $i -le 3; $i++) { + choco install nsis -y --no-progress + if (Test-Path "C:\Program Files (x86)\NSIS\makensis.exe") { break } + Write-Host "NSIS not found after attempt $i; retrying..." + Start-Sleep -Seconds 15 + } + if (-not (Test-Path "C:\Program Files (x86)\NSIS\makensis.exe")) { + throw "NSIS install failed: makensis.exe not found" + } - name: Set up MSVC uses: ilammy/msvc-dev-cmd@v1 diff --git a/tests/test_allenheath_session.cpp b/tests/test_allenheath_session.cpp index 794d5da..f9a6e37 100644 --- a/tests/test_allenheath_session.cpp +++ b/tests/test_allenheath_session.cpp @@ -60,6 +60,17 @@ class StubMixRack : public QObject { while (!m_buffer.isEmpty()) { const quint8 lead = static_cast(m_buffer.at(0)); if (lead == 0xE0) { + // the seed is a fixed 8-byte frame; its port field can carry a + // 0xE7 byte, so it must be consumed by length, not by scanning + // for the E7 terminator (that would mis-frame ~1% of ports) + if (m_buffer.startsWith(QByteArray::fromHex("e000040103"))) { + if (m_buffer.size() < 8) { + return; + } + handleControl(m_buffer.left(8)); + m_buffer.remove(0, 8); + continue; + } const int end = m_buffer.indexOf('\xe7', 1); if (end < 0) { return;