Skip to content

ci: GPUI-only desktop CI with working Rust caches - #2553

Merged
richiemcilroy merged 8 commits into
mainfrom
ci/gpui-only-fast-ci
Oct 14, 2026
Merged

richiemcilroy merged 8 commits into
mainfrom
ci/gpui-only-fast-ci

Conversation

@richiemcilroy

@richiemcilroy richiemcilroy commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

Cap ships as the GPUI app plus the cap-muxer and cap-cli sidecars, so desktop CI now builds and tests that and stops building the Tauri app.

Why CI was slow

Measured on recent PR runs (38451143856, 38458498562, 38489921441, 38501984802):

  • PRs took 2 to 8.7 hours end to end. Most of that was waiting for a runner: macOS jobs sat queued for 46 to 449 minutes, while Linux and Windows started immediately.
  • Each PR used two macOS jobs (Build Desktop around 75 minutes, Clippy around 20). Every main push used four: those two plus two Rust cache jobs.
  • Desktop jobs never hit the Rust cache, so every run compiled from scratch. Details from perf(ci): make desktop Rust caches restorable and split out GPUI #2548: the Rust cache job saved under a different env hash, bun caches saved per PR filled the 10 GB quota, and main runs were cancelled before saving.
  • Build Desktop spent 10 to 17 minutes on release sidecars and 3 to 9 minutes on tauri build --debug, neither of which is what ships.

Changes

  • Build GPUI Desktop (macOS, Windows, Linux): the old GPUI build, tests and packaging-script tests, in their own job with a v1-rust-gpui cache saved from main. CARGO_PROFILE_DEV_DEBUG=0 drops debuginfo from the opt-level 2 dependency tree, which shrinks the cache and the link.
  • Clippy (macOS, Windows): --exclude cap-desktop, so no Tauri tree, no sidecar build and no .env. Every crate that ships is still linted. Its own v1-rust-clippy cache is saved from main.
  • Rust tests (Linux): the root-crate tests from the old Linux Build Desktop (cap-utils, cap-cli-install, cap record::tests, cap-recording, cap-enc-ffmpeg) plus a debug build of both sidecars.
  • Removed: tauri build --debug, the cap-desktop-only tests (logging_tests, crash_sentinel, export_estimate_request, gpu_device_health, render_frame_event), and the main-only Rust cache job.
  • Path filters: Tauri app source (apps/desktop/src/**, apps/desktop/src-tauri/src/**) no longer triggers desktop jobs. Assets, sounds, icons, test data and the recording_start_sound.rs file that GPUI embeds from apps/desktop still do. A .github/** change no longer triggers Rust jobs, only ci.yml and the actions it uses.
  • Concurrency: the group is keyed on the PR number (a fork branch named main used to share the group with main pushes). Main runs are not cancelled, so they reach their cache save. Only one pending main run is kept, so they don't pile up.
  • Bun cache: restored everywhere, saved from main only.
  • sync-tests: its cache is saved from the daily main run (it currently finds no cache on any OS).
  • apps/desktop prepare.test.js moved into Typecheck, which already installs JS deps.

Trade-offs

  • The Tauri app (dev harness) is no longer compiled or tested in CI.
  • Sidecars build in debug on Linux only and are clippy-checked on macOS and Windows. Release-only breaks (LTO, release link) surface in desktop-release.yml.

Builds on the cache analysis in #2548 by @ayagmar.

Verification

  • actionlint clean on ci.yml and sync-tests.yml.
  • cargo clippy --workspace --exclude cap-desktop --all-features --locked -- -D warnings passes locally on macOS, and no other workspace crate depends on cap-desktop or tauri.
  • This PR's run is cold (caches save from main only), so it shows cold timings. Warm timings come from the first PR after merge.

RetriggerConfidence Score: 4/5

Add the embedded shared icons to the GPUI path filter before merging.

Findings

  1. P1 Shared icons skip desktop checks ▶
Fix with agent prompt
### Issue 1
.github/workflows/ci.yml:46-48
The new filters drop `packages/ui-solid/**`, but GPUI still embeds `logo.svg`, `cursor-macos.svg`, and `cursor-windows.svg` from that directory through `include_bytes!`. A PR that changes or deletes only these files now skips every GPUI build and test. Deleting a required icon can therefore pass CI and fail the release build.

Add the shared icon paths to the `gpui` filter. The previous desktop filter covered them.

```suggestion
              - 'apps/desktop-gpui/**'
              - 'apps/desktop/src/assets/**'
              - 'apps/desktop/src-tauri/src/recording_start_sound.rs'
              - 'packages/ui-solid/icons/**'
```

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Summary

This PR makes desktop CI build and test GPUI instead of the Tauri dev app.

  • Desktop CI builds and tests the GPUI app instead of the Tauri app.
  • Rust CI builds the sidecars on Linux and lints without Tauri.
  • CI selects desktop jobs by changed files and keeps main runs alive.
  • Main runs save shared dependency caches for later CI runs.

richiemcilroy explicitly acknowledged removing Tauri build/test coverage and deferring release-only sidecar failures to desktop-release.yml. These intentional trade-offs were not reported as findings.

Reviews (1) · Last reviewed commit: "ci: cache sync test builds from main" · Reviewed by Greptile

@vercel

vercel Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
cap-status Ready Ready Preview Oct 14, 2026 6:22am UTC

Comment thread .github/workflows/ci.yml Fixed
Comment thread .github/workflows/ci.yml

@capy-ai capy-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Capy found 2 potential issues (2 medium).

View 2 other findings in Capy.

Open in Capy

Comment thread .github/actions/setup-js/action.yml
Comment thread .github/workflows/ci.yml

@capy-ai capy-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Capy found no issues.

View 1 other finding in Capy.

Open in Capy

@richiemcilroy
richiemcilroy merged commit 658fb3b into main Oct 14, 2026
7 of 8 checks passed

@capy-ai capy-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Capy found no issues.

Open in Capy

This branch was successfully deployed

2 active deployments
Preview – cap-web — 64ea1cae Deployed Oct 14, 2026 by vercel[bot]
Preview – cap-status — 64ea1cae Deployed Oct 14, 2026 by vercel[bot]
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