fix(release): package Windows sqlite binding

This commit is contained in:
digua committed 2026-07-10 20:25:53 +08:00
1 parent a50c263232
commit e00c9a4503
3 files changed
+17 -6

No files matched your search

+4 -1
View File
@@ -288,12 +288,15 @@ jobs:
# 分析服务
APTABASE_APP_KEY: ${{ secrets.APTABASE_APP_KEY }}
working-directory: apps/desktop
run: pnpm run build && pnpm exec electron-builder --win --config electron-builder.yml -p never
run: pnpm run build:win
- name: Verify native parser in packaged app (win x64)
shell: bash
run: node scripts/check-desktop-native.mjs win32-x64-msvc
- name: Verify packaged SQLite runtime (win x64)
run: node scripts/check-packaged-sqlite.mjs
- name: Upload Windows artifacts
uses: actions/upload-artifact@v6
with:
+8 -3
View File
@@ -50,6 +50,11 @@ asarUnpack:
win:
executableName: ChatLab
target: nsis
# Windows 构建显式携带 ensure-native 生成的 Electron ABI binding,避免
# electron-builder 在 workspace 中误判 appDir 时打入共享 Node ABI 产物。
extraResources:
- from: native/better_sqlite3.node
to: native/better_sqlite3.node
# NSIS 安装器配置
nsis:
@@ -87,7 +92,7 @@ dmg:
artifactName: ChatLab-${version}-${arch}.${ext}
# 是否在构建之前重新编译原生模块。
# better-sqlite3 非 NAPI,打包必须使用 Electron ABI:electron-builder 会在共享
# node_modules 里原地重建(CI 一次性环境无影响)。本地 build:mac/build:win 通过
# scripts/build-app.mjs 在打包结束后自动把共享绑定恢复为 Node ABI,保证 pnpm test 不被破坏。
# macOS 继续由 electron-builder 重建共享 better-sqlite3;Windows 最终运行时使用
# win.extraResources 中 desktop 自有的 Electron ABI binding。本地 build:mac/build:win
# 仍通过 scripts/build-app.mjs 恢复共享 Node ABI,保证 pnpm test 不被破坏。
npmRebuild: true
+5 -2
View File
@@ -58,7 +58,7 @@ export function verifyPackagedSqlite({
})
if (result.status !== 0) {
throw new Error(`Packaged better-sqlite3 failed to load: ${safeChildError(result)}`)
throw new Error(`Packaged better-sqlite3 failed to load (${bindingPath}): ${safeChildError(result)}`)
}
let parsed
@@ -75,8 +75,11 @@ export function verifyPackagedSqlite({
function main() {
try {
const { bindingPath } = getPackagedSqlitePaths(defaultDistDir)
const result = verifyPackagedSqlite()
console.log(`[check-packaged-sqlite] OK: Electron ABI ${result.abi}, SELECT 1 = ${result.value}`)
console.log(
`[check-packaged-sqlite] OK: binding ${bindingPath}; Electron ABI ${result.abi}; SELECT 1 = ${result.value}`
)
} catch (error) {
console.error(`[check-packaged-sqlite] FAILED: ${error instanceof Error ? error.message : String(error)}`)
process.exitCode = 1