chore: run the assembled desktop E2E suite in CI - #188
Merged
Conversation
The suite sat outside pnpm check and outside CI, so assembled-boundary regressions surfaced only when a maintainer on Windows remembered to run it. The job stays separate from Backend Checks because the E2E build shares no target directory or feature set with it, so serializing them would lengthen the critical path without reusing anything.
Cache entries written during a pull request run are scoped to that pull request ref, so nothing but a re-run of the same branch can restore them while they consume the repository's shared 10 GB budget and evict by LRU. Pull requests restore main's entry either way.
Azganoth
enabled auto-merge (squash)
August 10, 2026 05:49
Azganoth
disabled auto-merge
August 10, 2026 05:50
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Desktop E2Ejob toci.ymlon the existingpull_requestandpush-to-maintriggers, so assembled-boundary regressions — IPC, the real folder watcher, persisted state, the window close handshake — fail the run that causes them instead of waiting for a maintainer on Windows to remember the suite.windows-2025-vs2026label,timeout-minutes: 20,CARGO_PROFILE_DEV_DEBUG: 0, its ownSwatinem/rust-cacheentry fortarget/desktop-e2e, build and suite as separate steps, failure-only artifact upload at 7-day retention, and a teardown assertion for orphanedleafdown-e2eormsedgedriverprocesses and a listener on port 4445, sampled after ten seconds of grace for WebView2 host processes.test:e2e:desktopintobuild:e2e:desktopand a newtest:e2e:desktop:run, so the workflow calls named scripts rather than hardcodinge2e/desktop/run.ts. The combined local command is unchanged.main, in both this job andcheck-backend. Entries written during a pull request run are scoped to that pull request ref, so nothing but a re-run of the same branch can restore them while they consume the shared 10 GB budget and evict by LRU. Pull requests restoremain's entry either way.CONTRIBUTING.mdanddocs/architecture.md: the suite stops being "Windows-local", it still requires Windows and still sits outsidepnpm check, and the artifact sensitivity caveat now separates local runs from CI ones, whose paths are runner paths.Related Issue
Closes #186
Verification
This job's real behavior is proven by this pull request's own run, which is the first execution of it.
Before pushing,
.github/workflows/ci.ymlwas parsed to confirm the job structure and that thesave-ifexpression survives YAML quoting in both cache steps, and the teardown script was extracted and parsed with the PowerShell AST parser.oxfmt --checkandtsc -bpass across the repository.Manually verified on Windows 11:
Get-Process -Name leafdown-e2e, msedgedriverandGet-NetTCPConnection -LocalPort 4445 -State Listeneach return nothing without erroring under-ErrorAction SilentlyContinue.pnpm test:e2e:desktopandpnpm test:e2e:desktop:runboth resolve after the script split.Not verified: cold and warm timing against the 20-minute ceiling, the failure-evidence upload path, and the teardown assertion on a runner. The E2E cache key is new and
save-ifrestricts saves tomain, so every run before merge is a cold build — #184 measured that at 6m20s, inside the ceiling, but warm timing cannot be measured until the secondmainpush after merge. The upload path can be exercised on demand with aworkflow_dispatchrun carryingLEAFDOWN_E2E_FORCE_FAILURE.Notes
actions/upload-artifactis pinned atv7, its current major, matching how the file pinsactions/checkoutandactions/setup-node.save-ifchange reachescheck-backend, which is outside Run the assembled-desktop E2E suite in CI #186's scope. It is applied to both Rust caches rather than one, because leaving the two jobs on different save policies is the kind of inconsistency that costs a future reader more than the change saves. It is isolated in its own commit if it should go through its own issue instead.retries, trigger path filters, parallel workers, a platform matrix, and adding the suite topnpm check. The standing response to a flaky failure is to re-run once to confirm, then fix the assertion to target durable state.