Skip to content

Commit eef3754

Browse files
committed
Fix Windows smoke: force IPv4 on session URL + add failure diagnostics
Linux smoke passes after the auth fix, but Windows still failed. The daemon binds IPv4 127.0.0.1 while session URLs use 'localhost', which PowerShell's Invoke-WebRequest resolves to IPv6 ::1 first on Windows and fails to connect — so the session-scoped /api/diff call never succeeded. Rewrite the session URL host to 127.0.0.1 before requesting. Also print token/sessions/url/api diag on failure so the next run is conclusive if this isn't the whole story.
1 parent 4690e6b commit eef3754

1 file changed

Lines changed: 17 additions & 3 deletions

File tree

.github/workflows/release.yml

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,10 @@ jobs:
249249
# from the state file; send it as a bearer token or requests 401.
250250
$dataDir = if ($env:PLANNOTATOR_DATA_DIR) { $env:PLANNOTATOR_DATA_DIR } else { Join-Path $env:USERPROFILE ".plannotator" }
251251
$stateFile = Join-Path $dataDir "daemon.json"
252+
$diagToken = $false
253+
$diagSessions = "(none)"
254+
$diagSessionUrl = "(none)"
255+
$diagApi = "(not reached)"
252256
try {
253257
for ($i = 0; $i -lt 60; $i++) {
254258
try {
@@ -257,17 +261,25 @@ jobs:
257261
$token = (Get-Content $stateFile -Raw | ConvertFrom-Json).authToken
258262
}
259263
if ($token) {
264+
$diagToken = $true
260265
$headers = @{ Authorization = "Bearer $token" }
261-
$sessionsResponse = Invoke-WebRequest -Uri "http://127.0.0.1:$Port/daemon/sessions" -Headers $headers -UseBasicParsing -TimeoutSec 1
266+
$sessionsResponse = Invoke-WebRequest -Uri "http://127.0.0.1:$Port/daemon/sessions" -Headers $headers -UseBasicParsing -TimeoutSec 2
267+
$diagSessions = "HTTP $($sessionsResponse.StatusCode)"
262268
$sessionsBody = $sessionsResponse.Content | ConvertFrom-Json
263269
if ($sessionsBody.sessions.Count -gt 0) {
264-
$sessionUrl = $sessionsBody.sessions[0].url
265-
Invoke-WebRequest -Uri "$sessionUrl$Endpoint" -Headers $headers -UseBasicParsing -TimeoutSec 1 | Out-Null
270+
# The daemon binds IPv4 127.0.0.1, but the session url uses
271+
# "localhost", which Invoke-WebRequest resolves to IPv6 ::1
272+
# first on Windows and then fails to connect. Force IPv4.
273+
$sessionUrl = ($sessionsBody.sessions[0].url) -replace '://localhost:', '://127.0.0.1:'
274+
$diagSessionUrl = $sessionUrl
275+
$apiResponse = Invoke-WebRequest -Uri "$sessionUrl$Endpoint" -Headers $headers -UseBasicParsing -TimeoutSec 2
276+
$diagApi = "HTTP $($apiResponse.StatusCode)"
266277
$ok = $true
267278
break
268279
}
269280
}
270281
} catch {
282+
$diagApi = "exception: $($_.Exception.Message)"
271283
if ($process.HasExited) {
272284
break
273285
}
@@ -284,6 +296,8 @@ jobs:
284296
}
285297
286298
if (-not $ok) {
299+
Write-Host "diag: stateFile=$stateFile exists=$(Test-Path $stateFile) tokenSeen=$diagToken"
300+
Write-Host "diag: sessions=$diagSessions sessionUrl=$diagSessionUrl api=$diagApi"
287301
Write-Host "stdout:"
288302
Get-Content $stdout -ErrorAction SilentlyContinue
289303
Write-Host "stderr:"

0 commit comments

Comments
 (0)