From ae6b6b1b7248e0b21ee6914a5755b28645c71dd0 Mon Sep 17 00:00:00 2001 From: Dustin <204417361+Koraji95-coder@users.noreply.github.com> Date: Sun, 24 May 2026 00:26:06 -0500 Subject: [PATCH] ci(windows): make taskkill no-op when server.py already exited MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The path-discovery step succeeds on the first run, but the cleanup step exits non-zero because `taskkill /PID 5560 /T /F` returns 128 ("process not found") when server.py has already exited on the mock hermes_cli stub. That's the expected steady state for this mock-only workflow, not a failure. Two-line fix: reset `$global:LASTEXITCODE = 0` after the taskkill call, and explicit `exit 0` at the end of the step so any other external-command exit codes don't bubble up. The try/catch wrapper didn't help because taskkill writes its diagnostic to stderr without raising a PowerShell exception — `catch` never fired. Run 26352805510 on this branch shows the failure shape: "OK: start.ps1 path discovery - all guards passed." in the verify step, then "ERROR: The process '5560' not found." in the cleanup step. Path discovery is what this workflow exists to validate; cleanup just has to not fail the job. --- .github/workflows/native-windows-startup.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/native-windows-startup.yml b/.github/workflows/native-windows-startup.yml index 6740f51f..4345e2a0 100644 --- a/.github/workflows/native-windows-startup.yml +++ b/.github/workflows/native-windows-startup.yml @@ -109,19 +109,18 @@ jobs: } Write-Host "OK: start.ps1 path discovery - all guards passed." - # taskkill /T walks the process tree, /F forces. taskkill exits - # non-zero if the PID is already gone (server.py crashed on the - # stub) — that's expected, not a failure. + # taskkill /T walks the process tree, /F forces. taskkill returns + # 128 ("process not found") if the PID is already gone — that's + # the expected steady state for this mock-only workflow because + # server.py exits immediately on the stub hermes_cli. Reset + # $LASTEXITCODE so the step never fails on the cleanup itself. - name: Stop background server (tree-kill) if: always() shell: pwsh run: | if ($env:SERVER_PID) { - try { - & taskkill /PID $env:SERVER_PID /T /F 2>&1 | Out-Host - } catch { - Write-Host "taskkill: PID $env:SERVER_PID already exited (expected with mock stub)" - } + & taskkill /PID $env:SERVER_PID /T /F 2>&1 | Out-Host + $global:LASTEXITCODE = 0 } # Belt-and-suspenders: kill anything still bound to 8787. $hanging = Get-NetTCPConnection -LocalPort 8787 -State Listen -ErrorAction SilentlyContinue @@ -130,3 +129,4 @@ jobs: try { Stop-Process -Id $c.OwningProcess -Force -ErrorAction Stop } catch {} } } + exit 0