Repository navigation
Build and check the desktop app on macOS - #334
Merged
Merged
Conversation
Electron Builder skips pull-request signing, leaving the DMG bundle unsealed.
Wait for this Mac's DMG before prompting and allow prereleases only for prerelease installs.
The checklist ran the first open from a local DMG, which carries no quarantine, and a message with the mock model, which a release check on a real Mac does not use. The download from the release page is what users do and what Gatekeeper checks; the update prompt needs a previous release with this Mac's DMG, so the first macOS release skips it. The README named releases/latest, but the app and the script read the releases list.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
8 of 9 tasks
7 of 9 tasks
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.
Issue
No issue.
Supersedes #332: the same changes, with the commits authored as Fei2411.
What changed / 改了什么
The desktop app now builds, installs and runs on macOS, one DMG per architecture:
DeepSeek-Bot-<version>-mac-arm64.dmg(Apple chip) andDeepSeek-Bot-<version>-mac-x64.dmg(Intel).mac.identity: '-'andhardenedRuntime: falseinelectron-builder.yml. Without an identity electron-builder signs nothing, the bundle is not sealed (codesign --verify --deep --strictfails: "code has no resources but signature indicates they must be present"), and a downloaded copy is reported as damaged. With an ad-hoc signature the bundle verifies; Gatekeeper still blocks the first open, and the user allows it in System Settings → Privacy & Security → Open Anyway. No Developer ID, no notarization. electron-builder skips signing on pull-request builds, so the macOS CI job setsCSC_FOR_PULL_REQUEST=true; ad-hoc signing uses no certificate or secret.npmRebuild: falsepacks the native modules fromnode_modules. A combined--arm64 --x64build on an Apple chip Mac put 12 arm64-only native modules (sharp, koffi, node-pty, sherpa-onnx, ripgrep, …) in the x64 app. So CI and release use a matrix: arm64 onmacos-latest, x64 onmacos-26-intel.watchReleases()insrc/updates.mjsreads GitHub'sreleases?per_page=20at start and every 4 hours and takes the highest release newer thanapp.getVersion()(isNewer, semver) that hasDeepSeek-Bot-<version>-mac-<arch>.dmgattached. Drafts are skipped; prereleases count only for a prerelease install (as electron-updater does). A release whose DMG is not uploaded yet is not shown, and is shown on a later check once it is. It asks once per version. Download →shell.openExternal(html_url)(HTTPS only); Later closes the dialog. Nothing is installed. When the start fails and a newer version exists, the error box says so and the release page opens after it. Windows (watchUpdates, electron-updater) is unchanged.DS_BOT_UPDATE_URLon macOS is a URL that answers like GitHub'sreleaseslist (tag_name,html_url,draft,prerelease,assets[].name). Throwaway runs (DS_BOT_HOME) check only that URL, never ask and never open a browser.scripts/check-update.mjs <app> <version>on macOS serves such a list locally, runs the packaged app on throwaway folders, waits forupdate <version> available, then closes the app and requires exit code 0.test.yml): jobapp-package-macos(arm64 + x64) builds the DMG, runscheck-packed, installs the app from the DMG into/Applications, checks its signature and CPU type, runscheck-packedandcheck-updateon it. It is part ofresult.release.yml): jobapp-macos(arm64 + x64), afterpublish, builds, runscheck-packed, uploads only the DMG.app/README.md(Package, Updates, data location~/Library/Application Support/DeepSeek Bot), release checklist section 13 (macOS).Known limit, kept for now: on macOS, closing the window quits the app (same as Windows); it does not stay in the Dock.
Changelog
The desktop app is available for macOS (Apple chip and Intel) as a DMG, and tells you when a new version is ready to download.
How I checked it / 怎么验证的
npm test(inds-bot/)node scripts/build-client.mjs --checknpm run lintindex.jsorsrc/host// 改了index.js或src/host/时跑冒烟测试 (not changed)On an Apple chip Mac (macOS 26):
appnpm test(42 pass); arm64npm run dist;check-packedon the build and on the app installed from the DMG;codesign --verify --deep --stricton the built and the mounted app;check-update.mjs … 99.0.0. x64 was built under Rosetta with an x64 Node: all packed native modules are x86_64, and the app reaches the chat, but under Rosetta it is too slow forcheck-packed's timeouts. The native Intel runner in CI is the real x64 check.Checklist / 检查
src/client/changed →npm run buildran andclient.jsis committed. / 改了src/client/就已重新 build 并提交client.js。 (not changed)Co-authored-by. / 没有把 AI 工具写成作者或Co-authored-by。UI check on macOS 26 (arm64, mock model, temp folders)
Installed from the DMG; first start (two folder pickers,
locations.json), mock chat, quit on close, update prompt in English and Chinese, Later, Download → release page, no prompt for the same version. A quarantined copy is blocked ("Not Opened", not "damaged") and Privacy & Security offers Open Anyway; the last step needs an administrator password and was not completed.