Skip to content

test(snapshots): kill the real vp process in env_install_interrupt - #2316

Merged
fengmk2 merged 1 commit into
mainfrom
deflake-env-install-interrupt
Aug 4, 2026
Merged

test(snapshots): kill the real vp process in env_install_interrupt#2316
fengmk2 merged 1 commit into
mainfrom
deflake-env-install-interrupt

Conversation

@fengmk2

@fengmk2 fengmk2 commented Aug 4, 2026

Copy link
Copy Markdown
Member

The Windows env_install_interrupt case kept flaking after #2283 and #2299, in two modes: the check-stale step reported "interrupted stale package removed" instead of "exists", and a 60s zero-output step timeout.

Root cause: on Windows, vp on PATH is the trampoline in VP_HOME/bin, which runs current/bin/vp.exe as a child and waits. The interrupt driver's child.pid was the trampoline, so #2299 killed the wrong process first. The real vp.exe was then torn down by taskkill /T, which kills the tree in unspecified order; whenever the npm subtree died before vp.exe, the still-alive vp treated the reinstall as failed and removed the partial install dir the test asserts on. When child enumeration returned nothing, only the trampoline died and the real vp survived as an orphan, matching the zero-output mode. Unix never flaked because bin/vp is a symlink, so the killed child is the installer.

Fix, all inside the fixture:

  • Spawn VP_HOME/current/bin/vp[.exe] directly so child.pid is the process that runs the install on every platform; killing it first now prevents the cleanup reaction.
  • Kill the postinstall subtree via a PID handshake: postinstall writes its PID into the ready file (write-then-rename), so the driver needs no PowerShell/CIM enumeration. The npm layers in between exit on their own once the script dies, and with vp already dead nobody reacts.
  • Add stage markers and a 45s watchdog so a future failure names the stage that hung instead of showing a blank PTY screen.

Verified on macOS with cargo test -p vite_cli_snapshots -- env_install_interrupt; the Windows race itself can only be exercised by this PR's Windows CLI snapshot leg.

@netlify

netlify Bot commented Aug 4, 2026

Copy link
Copy Markdown

Deploy Preview for viteplus-preview canceled.

Name Link
🔨 Latest commit a2e27bd
🔍 Latest deploy log https://app.netlify.com/projects/viteplus-preview/deploys/6a717e27e13d010009f241cc

@fengmk2
fengmk2 requested a review from wan9chi August 4, 2026 03:37
@fengmk2 fengmk2 self-assigned this Aug 4, 2026
@fengmk2
fengmk2 requested a review from cpojer August 4, 2026 03:37
@fengmk2
fengmk2 force-pushed the deflake-env-install-interrupt branch from 58e9db5 to 5473d17 Compare August 4, 2026 03:38
@fengmk2

fengmk2 commented Aug 4, 2026

Copy link
Copy Markdown
Member Author

I will retry many times before merge.

@fengmk2

fengmk2 commented Aug 4, 2026

Copy link
Copy Markdown
Member Author

Attempt 10 is green and the whole CI run now concludes success

On Windows, `vp` on PATH is the trampoline in VP_HOME/bin, which runs
current/bin/vp.exe as a child and waits. The interrupt driver's child.pid
was the trampoline, so the kill order from #2299 killed the wrong process
first: the real vp.exe was torn down by `taskkill /T`, which kills the
tree in unspecified order. Whenever the npm subtree died before vp.exe,
the still-alive vp treated the reinstall as failed and removed the
partial install dir that the check-stale step asserts on. When child
enumeration returned nothing, only the trampoline died and the real vp
survived as an orphan, matching the observed zero-output timeout mode.
Unix never flaked because bin/vp is a symlink, so the killed child is
the installer.

Spawn VP_HOME/current/bin/vp directly so child.pid is the process that
runs the install on every platform, and kill the postinstall subtree via
a PID handshake in the ready file instead of PowerShell/CIM enumeration.
Stage markers and a 45s watchdog make any future failure name the stage
that hung instead of leaving a blank PTY screen.
@fengmk2
fengmk2 force-pushed the deflake-env-install-interrupt branch from 5473d17 to a2e27bd Compare August 4, 2026 05:52
@fengmk2
fengmk2 merged commit 815e8a8 into main Aug 4, 2026
45 checks passed
@fengmk2
fengmk2 deleted the deflake-env-install-interrupt branch August 4, 2026 06:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants