fix(install-e2e): treat an unreadable checkout as no updater progress

The 12-minute tripwire compared against Get-InstalledHead's result, but
on a wedged updater that read can throw (the venv shim lock is held), so
head stayed empty, never equal to the start sha, and the tripwire never
fired... the legs ran to the full 35m bound. Unreadable now counts as
unmoved, gated on two consecutive no-progress polls so a single bad read
cannot fail a healthy leg.
This commit is contained in:
yoniebans
2026-09-01 19:23:29 +02:00
parent 848bea416b
commit b5527f5ee9
+12 -3
View File
@@ -764,15 +764,24 @@ function Invoke-GuiUpdateDesktopRoute([string]$TargetSha) {
# A working updater moves the checkout off the starting sha within its
# first minutes (git fetch/reset precedes the long venv + rebuild
# tail). No movement by this mark means the updater is wedged before
# its git step; waiting out the full bound adds nothing.
# its git step; waiting out the full bound adds nothing. Unreadable
# counts as unmoved (the wedge holds the venv shim lock, so reads can
# throw), but only two consecutive no-progress polls trip it: one bad
# read must not fail a healthy leg.
$progressDeadline = (Get-Date).AddMinutes(12)
$noProgressPolls = 0
while ((Get-Date) -lt $deadline) {
if (Test-Path -LiteralPath $resultPath) { break }
$head = ""
try { $head = Get-InstalledHead } catch {}
if ($head -eq $TargetSha -and -not (Test-Path -LiteralPath $markerPath)) { break }
if ((Get-Date) -gt $progressDeadline -and $head -eq $startSha) {
Assert-True $false "updater made progress off $startSha within 12 minutes (wedged before its git step; on pre-#97052 releases this is the fork-upstream prompt hang)"
if ((Get-Date) -gt $progressDeadline -and ($head -eq $startSha -or $head -eq "")) {
$noProgressPolls++
if ($noProgressPolls -ge 2) {
Assert-True $false "updater made progress off $startSha within 12 minutes (checkout unmoved or unreadable; wedged before its git step... on pre-#97052 releases this is the fork-upstream prompt hang)"
}
} else {
$noProgressPolls = 0
}
# Tail any new update.log lines so the desktop-rebuild phase is
# visible in the CI step output.