Skip to content

chore: run the assembled desktop E2E suite in CI - #188

Merged
Azganoth merged 2 commits into
mainfrom
chore/desktop-e2e-ci
Aug 10, 2026
Merged

chore: run the assembled desktop E2E suite in CI#188
Azganoth merged 2 commits into
mainfrom
chore/desktop-e2e-ci

Conversation

@Azganoth

Copy link
Copy Markdown
Owner

Summary

  • Add a Desktop E2E job to ci.yml on the existing pull_request and push-to-main triggers, 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.
  • Use the job shape Determine whether the desktop E2E suite should run in CI #184 measured: the pinned windows-2025-vs2026 label, timeout-minutes: 20, CARGO_PROFILE_DEV_DEBUG: 0, its own Swatinem/rust-cache entry for target/desktop-e2e, build and suite as separate steps, failure-only artifact upload at 7-day retention, and a teardown assertion for orphaned leafdown-e2e or msedgedriver processes and a listener on port 4445, sampled after ten seconds of grace for WebView2 host processes.
  • Split test:e2e:desktop into build:e2e:desktop and a new test:e2e:desktop:run, so the workflow calls named scripts rather than hardcoding e2e/desktop/run.ts. The combined local command is unchanged.
  • Save Rust caches only from main, in both this job and check-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 restore main's entry either way.
  • Update CONTRIBUTING.md and docs/architecture.md: the suite stops being "Windows-local", it still requires Windows and still sits outside pnpm 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.yml was parsed to confirm the job structure and that the save-if expression survives YAML quoting in both cache steps, and the teardown script was extracted and parsed with the PowerShell AST parser. oxfmt --check and tsc -b pass across the repository.

Manually verified on Windows 11:

  1. Ran both teardown probes against a clean machine; Get-Process -Name leafdown-e2e, msedgedriver and Get-NetTCPConnection -LocalPort 4445 -State Listen each return nothing without erroring under -ErrorAction SilentlyContinue.
  2. Confirmed pnpm test:e2e:desktop and pnpm test:e2e:desktop:run both 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-if restricts saves to main, 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 second main push after merge. The upload path can be exercised on demand with a workflow_dispatch run carrying LEAFDOWN_E2E_FORCE_FAILURE.

Notes

  • actions/upload-artifact is pinned at v7, its current major, matching how the file pins actions/checkout and actions/setup-node.
  • The save-if change reaches check-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.
  • Out of scope per Determine whether the desktop E2E suite should run in CI #184: WebdriverIO retries, trigger path filters, parallel workers, a platform matrix, and adding the suite to pnpm check. The standing response to a flaky failure is to re-run once to confirm, then fix the assertion to target durable state.

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
Azganoth enabled auto-merge (squash) August 10, 2026 05:49
@Azganoth
Azganoth disabled auto-merge August 10, 2026 05:50
@Azganoth
Azganoth merged commit 7486742 into main Aug 10, 2026
3 checks passed
@Azganoth
Azganoth deleted the chore/desktop-e2e-ci branch August 10, 2026 05:56
@Azganoth Azganoth self-assigned this Aug 10, 2026
@Azganoth Azganoth added the Maintenance Chore, refactor, dependency, or test work without user-facing change label Aug 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Maintenance Chore, refactor, dependency, or test work without user-facing change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Run the assembled-desktop E2E suite in CI

1 participant