Files
goodbuddy/build/run-packaged-deepseek-harness-smoke.cjs
T

166 lines
4.3 KiB
JavaScript

'use strict'
const { spawn } = require('node:child_process')
const {
copyFile,
mkdir,
mkdtemp,
readFile,
rm,
writeFile
} = require('node:fs/promises')
const { statSync } = require('node:fs')
const { tmpdir } = require('node:os')
const { join, resolve } = require('node:path')
const unpackedPath = process.argv[2]
? resolve(process.argv[2])
: resolve('dist/harness-package-probe/win-unpacked')
const executable = join(
unpackedPath,
process.platform === 'win32' ? 'GoodBuddy.exe' : 'goodbuddy'
)
const host = join(
unpackedPath,
'resources',
'app.asar.unpacked',
'out',
'main',
'deepseek-harness-host-bootstrap.js'
)
for (const [path, description] of [
[executable, 'packaged Electron executable'],
[host, 'packaged DeepSeek Harness host']
]) {
if (!statSync(path, { throwIfNoEntry: false })?.isFile()) {
throw new Error(`${description} is missing: ${path}`)
}
}
function run(command, args, env) {
return new Promise((resolveExit, rejectExit) => {
const child = spawn(command, args, {
cwd: resolve('.'),
env,
stdio: ['ignore', 'pipe', 'pipe'],
windowsHide: true
})
let output = ''
const capture = (chunk) => {
output = (output + String(chunk)).slice(-8_192)
}
child.stdout.on('data', capture)
child.stderr.on('data', capture)
child.once('error', rejectExit)
child.once('exit', (exitCode, signal) => {
resolveExit({ exitCode, signal, output })
})
})
}
async function main() {
const root = await mkdtemp(
join(tmpdir(), 'goodbuddy-packaged-harness-smoke-')
)
try {
const project = join(root, 'app')
const profile = join(root, 'profile')
const resultPath = join(root, 'result.json')
await mkdir(project, { recursive: true })
await copyFile(
resolve('build/deepseek-harness-utility-smoke.cjs'),
join(project, 'deepseek-harness-utility-smoke.cjs')
)
await writeFile(
join(project, 'package.json'),
`${JSON.stringify(
{
name: 'goodbuddy-packaged-harness-smoke',
version: '1.0.0',
private: true,
main: 'deepseek-harness-utility-smoke.cjs'
},
null,
2
)}\n`,
'utf8'
)
await writeFile(
join(project, 'electron-builder.yml'),
[
'appId: live.digiman.goodbuddy.harness-smoke',
'productName: GoodBuddyHarnessSmoke',
'electronVersion: "43.2.0"',
'asar: true',
'npmRebuild: false',
'files:',
' - package.json',
' - deepseek-harness-utility-smoke.cjs',
'win:',
' target:',
' - dir'
].join('\n'),
'utf8'
)
const packageArguments = [
resolve('node_modules/electron-builder/cli.js'),
'--projectDir',
project,
'--win',
'dir',
'--x64',
'--publish',
'never',
`--config.directories.output=${join(root, 'dist')}`
]
if (process.env.GOODBUDDY_ELECTRON_DIST) {
packageArguments.push(
`--config.electronDist=${resolve(process.env.GOODBUDDY_ELECTRON_DIST)}`
)
}
const packaged = await run(
process.execPath,
packageArguments,
process.env
)
if (packaged.exitCode !== 0 || packaged.signal) {
throw new Error(
`Unable to package Harness smoke app: ${packaged.output.trim()}`
)
}
const smokeEnvironment = {
...process.env,
GOODBUDDY_HARNESS_SMOKE_HOST: host,
GOODBUDDY_HARNESS_SMOKE_RESULT: resultPath
}
delete smokeEnvironment.ELECTRON_RUN_AS_NODE
const executed = await run(
join(root, 'dist', 'win-unpacked', 'GoodBuddyHarnessSmoke.exe'),
[`--user-data-dir=${profile}`, '--no-first-run'],
smokeEnvironment
)
const result = JSON.parse(await readFile(resultPath, 'utf8'))
if (
executed.exitCode !== 0 ||
executed.signal ||
result.status !== 'ready'
) {
throw new Error(
`Packaged DeepSeek Harness smoke failed (${executed.exitCode}, ${executed.signal ?? 'no signal'}): ${JSON.stringify(result)} ${executed.output.trim()}`
)
}
console.log('Packaged DeepSeek Harness utility smoke: ready')
} finally {
await rm(root, { recursive: true, force: true })
}
}
void main().catch((error) => {
console.error(error instanceof Error ? error.message : error)
process.exitCode = 1
})