Skip to content

ci(desktop): restore macOS Intel (x64) builds via native dual-runner (#947) - #953

Merged
softmarshmallow merged 1 commit into
mainfrom
ci/desktop-restore-macos-x64
Jul 6, 2026
Merged

ci(desktop): restore macOS Intel (x64) builds via native dual-runner (#947)#953
softmarshmallow merged 1 commit into
mainfrom
ci/desktop-restore-macos-x64

Conversation

@softmarshmallow

@softmarshmallow softmarshmallow commented Jul 6, 2026

Copy link
Copy Markdown
Member

Closes #947.

What

macOS shipped arm64-only since #731, which fled the maker-dmg parallel-arch race (electron/forge#3517hdiutil EAGAIN + appdmg "Target already exists", fixed only in Forge 8, still alpha). #732 then removed the Intel download buttons. A paying Intel-Mac customer is now blocked — this is the "add it back when there's demand" trigger the #731 commit anticipated.

This brings x64 back with the one shape that sidesteps the race instead of suppressing it: one arch per native runner.

Why native dual-runner (not the issue's Option A/B)

Changes

  • Workflow — add a macos-intel (macos-15-intel, x64) matrix row beside macos-apple-silicon (macos-26, arm64); generalize the mac-gated steps to matrix.os.mac_arch; arch-parameterize the publish.
  • downloads.ts / page.tsx — restore mac_dmg_x64 as string | null + a conditionally-rendered Intel button (nullable so the editor deploying before the first x64 release doesn't degrade all platforms to the static v0.0.1 fallback).
  • release-notes template — add darwin-x64 dmg + zip rows; drop the arm64-only footnote.
  • desktop-release.md runbook — four approvals, per-arch feed check, pinned one-arch-per-runner constraint.

No desktop/src / forge.config.ts changes (node-pty ships both darwin prebuilds, sandbox-runtime vendors both arches, update-electron-app's feed is already darwin-${process.arch}).

Verification

  • turbo typecheck --filter=editor clean; oxlint clean; all PR CI green.
  • Dry run passed — dispatched this change (with a throwaway 0.0.7-intel-test.1 bump, not in this diff) via run 28813086645. All four jobs green, including build (macos-intel, macos-15-intel, x64). The release carried the correctly-named x64 assets, built + signed + notarized natively on the Intel runner:
    • Grida-0.0.7-intel-test.1-x64.dmg (144.7 MB)
    • Grida-darwin-x64-0.0.7-intel-test.1.zip (143.9 MB) — matches update-electron-app's darwin-x64 feed
    • @parcel/watcher-darwin-x64 resolved natively. Throwaway prerelease + tag + branch deleted after.

Not in this PR

  • The version bump / cutting the release. This restores x64 build capability; the actual x64 release ships when the next version is bumped (desktop/package.json) and the workflow dispatched — see docs/contributing/desktop-release.md. Kept version-neutral on purpose so capability and release-cut stay separate commits.

…947)

macOS shipped arm64-only since #731, which fled the maker-dmg parallel-arch
race (electron/forge#3517 — hdiutil EAGAIN + appdmg "Target already exists",
fixed only in Forge 8, still alpha). A paying Intel-Mac customer is now
blocked. Bring x64 back with the one shape that sidesteps the race instead
of suppressing it: one arch per native runner.

Workflow (.github/workflows/realease-desktop-app.yml):
- Add a `macos-intel` matrix row (macos-15-intel, x64) beside
  `macos-apple-silicon` (macos-26, arm64), each carrying a `mac_arch` field.
  Single-arch per runner → neither DMG-race failure mode can occur, and pnpm
  resolves each arch's per-platform prebuild (@parcel/watcher-darwin-<arch>)
  natively — a cross-packaged x64 app would silently miss it (the bundle
  oracle tolerates missing optionals, #805).
- Generalize the three mac-gated steps to a `matrix.os.mac_arch` truthiness
  check; publish is arch-parameterized `--arch="${{ matrix.os.mac_arch }}"`.
- macos-15-intel is GitHub's last x86_64 image, retired Aug 2027
  (actions/runner-images#13045); comments anchor the Forge 8 GA exit
  (electron/forge#4082).

Consumer surfaces:
- downloads.ts / page.tsx: restore mac_dmg_x64 (#732 revert) as `string | null`
  + a conditionally-rendered Intel button — nullable so the editor deploying
  before the first x64 release doesn't throw and degrade all platforms to the
  static v0.0.1 fallback.
- release-notes template: add darwin-x64 dmg + zip rows, drop the arm64-only
  footnote.
- desktop-release.md runbook: four approvals, per-arch feed check, and a
  pinned one-arch-per-runner constraint.

No forge.config.ts / desktop/src changes needed (node-pty ships both darwin
prebuilds, sandbox-runtime vendors both arches, update-electron-app's feed is
already darwin-${process.arch}).
@vercel

vercel Bot commented Jul 6, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
docs Ready Ready Preview, Comment Jul 6, 2026 6:13pm
grida Ready Ready Preview, Comment Jul 6, 2026 6:13pm
4 Skipped Deployments
Project Deployment Actions Updated (UTC)
backgrounds Ignored Ignored Jul 6, 2026 6:13pm
blog Ignored Ignored Preview Jul 6, 2026 6:13pm
code Ignored Ignored Jul 6, 2026 6:13pm
viewer Ignored Ignored Preview Jul 6, 2026 6:13pm

Request Review

@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

The macOS desktop release workflow's build matrix is split into per-architecture rows (arm64, x64) using a new mac_arch field, with signing, notarization, and publish steps re-gated accordingly. Documentation is updated to reflect four approval jobs and per-arch feed verification. The downloads data model and page are updated to expose a nullable macOS Intel (x64) download link, sourced from GitHub releases with a fallback for early releases.

Changes

macOS Intel x64 build and download restoration

Layer / File(s) Summary
Per-arch macOS CI matrix and signing/publish gating
.github/workflows/realease-desktop-app.yml
Matrix expands macOS into arm64/x64 rows via mac_arch; signing, notarization, and publish steps are gated and parameterized on mac_arch instead of a fixed runner name, replacing hard-coded arm64 in the publish command.
Runbook and release notes updates
docs/contributing/desktop-release.md, .github/release-notes/desktop.md
Runbook now documents four job approvals and loops autoupdate feed checks over arm64/x64, plus a new hard constraint on one-arch-per-runner builds; release notes table adds macOS Intel dmg/zip download rows.
Downloads data model supports nullable x64 asset
editor/app/(www)/(downloads)/downloads/downloads.ts
DownloadLinks.mac_dmg_x64 becomes string | null; config adds an x64 arch mapping for macOS dmg; getLinks() fetches the x64 asset with null-safe mapping; v0.0.1 fallback includes mac_dmg_x64.
Downloads page renders macOS Intel button
editor/app/(www)/(downloads)/downloads/page.tsx
A macOS Intel download button is conditionally rendered based on links.mac_dmg_x64 being non-null.

Estimated code review effort: 2 (Simple) | ~15 minutes

Possibly related PRs

  • gridaco/grida#731: Same workflow's macOS publish --arch selection was previously changed to drop x64 and build arm64-only, which this PR reverses.
  • gridaco/grida#732: Previously removed mac_dmg_x64/Intel handling from the same downloads.ts and page.tsx code paths that this PR reintroduces.
  • gridaco/grida#726: Modified the same workflow's macOS signing/notarization gating logic (HAS_SIGNING/HAS_NOTARIZE and publish conditions).
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The workflow, downloads UI, release notes, and runbook updates address the #947 requirements for x64 builds and downloads.
Out of Scope Changes check ✅ Passed The changes stay within the release workflow, downloads UI, docs, and release notes needed to restore Intel support.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check ✅ Passed The title clearly summarizes the main change: restoring macOS Intel builds via dual native runners.
Description check ✅ Passed The description matches the changeset and explains the x64 build restoration, UI updates, and workflow changes.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ci/desktop-restore-macos-x64

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9924025ad4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread editor/app/(www)/(downloads)/downloads/page.tsx
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.

[desktop] Restore macOS Intel (x64) builds — dropped for parallel-arch DMG CI bug, customer now blocked

1 participant