Skip to content

Check pull requests with the unpacked desktop app - #43

Merged
cu1ch3n merged 2 commits into
mainfrom
tiered-ci
Nov 4, 2026
Merged

cu1ch3n merged 2 commits into
mainfrom
tiered-ci

Conversation

@cu1ch3n

@cu1ch3n cu1ch3n commented Nov 4, 2026 •

Copy link
Copy Markdown
Member

Every pull request that touched src/ built and tested all six desktop installers on three platforms, then main built them again after the merge. A pull request waited about 14 minutes, gated by the macOS x64 job, which is also the one that flakes. Timing the jobs shows where that goes: in each desktop job, making the installers takes most of the build step (DMG + zip about 2.7 of 3.6 minutes on macOS arm64 and about 6 of 10 on x64; AppImage + deb about 3.2 of 3.7 on Linux). The smoke test only launches the unpacked app.

Changes

  • Desktop (desktop.yml) only builds and tests and never publishes. With quick, it builds the unpacked app (npm run desktop:build -- --dir) on macOS arm64 and Linux and runs the same smoke test; otherwise it builds and tests every installer on all three platforms. Run workflow builds any branch, fully unless quick is checked.

  • CI picks the desktop check from the changed files with scripts/desktop-scope.sh:

    • docs, the site, tests, translations and Markdown outside skills/ and examples/: none;
    • anything else: quick;
    • every installer, for a pull request that changes either:
      • the shell fingerprint (scripts/desktop-layer.mjs, the rule the Dev channel uses for new installers: Electron, Node, Codex, production dependencies, desktop/), or
      • how installers are made and tested (desktop-layer.mjs, check-desktop.mjs, check-desktop-linux.sh, desktop.yml).

    Pushes to main get at most the quick check, so a bad merge shows within minutes; the nightly build makes main's installers. The script reads the file list before classifying it, so a failed diff fails the job instead of skipping the desktop check.

  • Desktop Dev (desktop-dev.yml, new) takes over the nightly build and the desktop-dev publishing from desktop.yml, unchanged. Run on another branch, it now fails with a pointer to Desktop instead of building without publishing.

  • Release runs CI (both Node versions, the site and pack checks) and the full desktop build, and publishes only after both pass. Its own repeats of typecheck, tests and i18n checks go. A tag pushed without a pull request is therefore still checked on Node 22. The contents: write grant to the desktop job goes too, because Desktop no longer has a publishing job.

  • CI runs on pull requests, pushes to main and from Release. A branch with a pull request is checked once, not twice; a branch without one is not checked. The stale codex/electron-desktop trigger goes; that branch is fully merged.

  • A new push to a pull request replaces its run. Every other run has its own concurrency group, so no commit on main is skipped.

  • Timeouts:

    • the checks job: 20 minutes;
    • the desktop smoke tests: 10–15 minutes each, so a hung test fails then instead of at 45.
  • A CI passed job sums up the run (a skipped desktop check counts as passed), so branch rules can require one check.

Testing

Review

Codex (gpt-6-astra, xhigh) and Claude (Opus 5.5, high) reviewed the first commit independently. Both found nothing that lets a regression reach npm, a release or the Dev channel without a full build. The second commit fixes what they did find:

  • a failed diff read as no change;
  • the smoke test and shipped Markdown were under-classified;
  • no desktop check after a merge;
  • untagged-branch and Node 22 coverage for releases;
  • the main concurrency comment;
  • two README statements.

Left as is: lockfile-only bumps of electron-builder's own dependencies and package.json metadata written into the deb change the installer without changing the fingerprint, so those pull requests get the quick check. The nightly and release builds still build those installers before anything is published.

Pull requests that can change the app now build only the unpacked app on
Apple silicon and Linux and launch it with the same smoke test; making the
installers took most of each desktop job. A pull request builds every
installer when it changes the installer's shell fingerprint or how
installers are made and tested. Pull requests that only touch docs, the
site, tests or translations skip the desktop check.

Desktop no longer builds on every push to main or branch: the nightly
Desktop Dev workflow and Release still build and test every installer
before publishing. CI runs once per pull request instead of once for the
push and once for the pull request, and a single "CI passed" job can be
required by branch rules.
Review fixes:

- The desktop scope moves to scripts/desktop-scope.sh. It reads the
  changed files before classifying them, so a failed diff fails the job
  instead of reporting that nothing needs a desktop check.
- Skills and the example paper ship with the app, Markdown included, so
  they get the quick check. A change to the smoke test builds every
  installer, since it also drives the AppImage, deb and Intel Mac runs.
- Pushes to main get the quick check, so a bad merge shows within minutes
  instead of at the nightly build.
- Release runs CI first (both Node versions, the site and pack checks)
  and publishes only after it passes; its own repeats of those checks go.
- CI runs other than pull requests get a concurrency group of their own,
  so no commit on main is skipped while another run is pending.
@cu1ch3n
cu1ch3n merged commit 2f1c0ec into main Nov 4, 2026
11 checks passed
@cu1ch3n
cu1ch3n deleted the tiered-ci branch November 4, 2026 13:24
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.

1 participant