Skip to content

ci: mac x64 改为 Apple 芯片交叉打包;原生依赖免编译并加打包冒烟测试 - #109

Merged
J3n5en merged 7 commits into
mainfrom
ci/cross-build-mac-x64
Sep 24, 2026
Merged

J3n5en merged 7 commits into
mainfrom
ci/cross-build-mac-x64

Conversation

@J3n5en

@J3n5en J3n5en commented Sep 23, 2026 •

Copy link
Copy Markdown
Owner

结果

构建(build-app 起到最后一个平台结束):v0.1.34 17m12s → #108 后 9m58s → 本 PR 5m44s

job #108 后 本 PR
mac x64 8m46s(Intel runner) 4m41s(macos-15 交叉打包,含 Rosetta 冒烟 60s)
mac arm64 3m59s 3m28s
Windows 5m33s 2m59s(装依赖 187s → 30s)
Linux 2m57s 2m35s

验证 run:https://github.com/J3n5en/EnsoCode/actions/runs/35901114803 (未发布)

改动

  1. 原生依赖不再为 Electron 重编:better-sqlite3、node-pty、classic-level、node-datachannel 均为 N-API 预编译。去掉 @electron/rebuild;better-sqlite3 移入 ignoredBuiltDependencies(有预编译时 node-gyp 也只是空转,Windows 约 78s)
  2. mac x64 交叉打包:macos-15 上 pnpm install --cpu=x64,npm_config_arch=x64(ripgrep),关构建结果缓存(否则复用本机架构的 postinstall 产物)
  3. afterPack:node-pty / pi-tui 预编译只留目标 <platform>-<arch>;mac 包签名前校验所有 Mach-O 含目标架构,不符即失败
  4. 打包冒烟测试(三平台,x64 走 Rosetta):用产物自带 Electron 加载 better-sqlite3 + sqlite-vec、classic-level、node-pty(真实 spawn)、node-datachannel,并执行 ripgrep、rtk

冒烟测试顺带查出的两个问题

  • node-pty spawn-helper 无执行位(本 PR 引入,已修):1.1.0 发布包里 prebuilds/darwin-*/spawn-helper 是 644,不再重编后直接用它会 posix_spawnp failed。afterPack 与 postinstall 都补执行位
  • Windows 安装包缺 sqlite-vec 平台包(v0.1.34 已存在):收集器不跟进 pnpm junction,记忆向量检索在 Windows 上退回扫 BLOB。files 拷真实目录供 require.resolve,dll 本体经 extraResources 放进 app.asar.unpacked(from/to 拷贝不吃 asarUnpack,loadExtension 读不了 asar)

本地验证

  • 按 x64 装包、打 x64 包:平台包 / ripgrep / rtk / sqlite-vec 均为 x86_64,架构校验 0 不符
  • arm64 打包冒烟 6/6;模拟全新安装,dev 下 node-pty 用预编译可起终端
  • pnpm typecheck、pnpm test、biome check . 通过

注意

  • 本地已有的 node-pty/build(旧 electron-rebuild 产物)仍会被优先加载,无害;全新安装走 prebuilds

后续补充

  • 冒烟覆盖 pi-tui 原生剪贴板模块(Linux 无 DISPLAY 时按设计跳过)
  • 非 tag 构建上传 mac dmg(与 Windows 一致),已下载验证:签名、公证票据、Gatekeeper 均通过,Mach-O 架构 0 不符
  • afterPack 只保留目标平台的 classic-level 预编译(识别 x64+arm64 多架构目录):安装包 mac -1.8MB、Windows -1.4MB

最终验证 run:https://github.com/J3n5en/EnsoCode/actions/runs/35921218319

- 原生依赖均为 N-API 预编译:去掉 @electron/rebuild,better-sqlite3 不再跑空转的
  node-gyp(Windows 约 78s),node-pty 直接用自带 prebuilds
- mac x64 在 macos-15 上按目标架构装包(--cpu + npm_config_arch,关构建结果缓存)
- afterPack 只留目标架构的 node-pty / pi-tui 预编译,并校验包内 Mach-O 均含目标架构
- 三平台打包后用产物自带 Electron 冒烟加载 better-sqlite3、sqlite-vec、classic-level、
  node-pty、node-datachannel,并执行 ripgrep、rtk
收集器漏掉 optional 平台兄弟包(同 node-datachannel),v0.1.34 Windows 包内无
sqlite-vec-windows-x64,记忆向量检索退回扫 BLOB。显式拷贝平台包进包。
node-pty 1.1.0 发布包内 prebuilds/darwin-*/spawn-helper 为 644;不再为 Electron
重编后直接用 prebuilds,posix_spawnp 失败导致终端起不来。afterPack 与 postinstall
都补执行位。
mac 包里 Linux/Windows/Android 预编译约 3.9MB,dmg 小 1.8MB。支持 x64+arm64
这类多架构目录名。
@J3n5en
J3n5en merged commit ba74f46 into main Sep 24, 2026
7 checks passed
@J3n5en
J3n5en deleted the ci/cross-build-mac-x64 branch September 24, 2026 00:27
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