forked from boos/BoosAPI
feat: enhance desktop build process with artifact upload and download, and update server working directory resolution
This commit is contained in:
+6
-1
@@ -18,6 +18,7 @@ import {
|
||||
createDesktopHealthUrl,
|
||||
createDesktopServerUrl,
|
||||
isFatalServerExit,
|
||||
resolveDesktopServerWorkingDir,
|
||||
waitForServerReady,
|
||||
} from './runtime.js';
|
||||
|
||||
@@ -195,7 +196,11 @@ async function startManagedBackend() {
|
||||
});
|
||||
|
||||
const child = spawn(process.execPath, [serverEntryPath], {
|
||||
cwd: app.getAppPath(),
|
||||
cwd: resolveDesktopServerWorkingDir({
|
||||
appPath: app.getAppPath(),
|
||||
resourcesPath: process.resourcesPath,
|
||||
isPackaged: app.isPackaged,
|
||||
}),
|
||||
env: {
|
||||
...env,
|
||||
ELECTRON_RUN_AS_NODE: '1',
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
buildDesktopServerEnv,
|
||||
createDesktopServerUrl,
|
||||
isFatalServerExit,
|
||||
resolveDesktopServerWorkingDir,
|
||||
waitForServerReady,
|
||||
} from './runtime.js';
|
||||
|
||||
@@ -30,6 +31,20 @@ describe('desktop runtime helpers', () => {
|
||||
expect(createDesktopServerUrl(4312)).toBe('http://127.0.0.1:4312');
|
||||
});
|
||||
|
||||
it('uses resources path as backend cwd for packaged desktop builds', () => {
|
||||
expect(resolveDesktopServerWorkingDir({
|
||||
appPath: 'C:/Users/test/AppData/Local/Programs/Metapi/resources/app.asar',
|
||||
resourcesPath: 'C:/Users/test/AppData/Local/Programs/Metapi/resources',
|
||||
isPackaged: true,
|
||||
})).toBe('C:/Users/test/AppData/Local/Programs/Metapi/resources');
|
||||
|
||||
expect(resolveDesktopServerWorkingDir({
|
||||
appPath: '/workspace/metapi',
|
||||
resourcesPath: '/tmp/electron/resources',
|
||||
isPackaged: false,
|
||||
})).toBe('/workspace/metapi');
|
||||
});
|
||||
|
||||
it('waits until the health probe returns ok', async () => {
|
||||
const fetcher = vi.fn()
|
||||
.mockRejectedValueOnce(new Error('offline'))
|
||||
|
||||
@@ -17,6 +17,12 @@ type ServerExitState = {
|
||||
signal: NodeJS.Signals | null;
|
||||
};
|
||||
|
||||
type DesktopServerWorkingDirInput = {
|
||||
appPath: string;
|
||||
resourcesPath: string;
|
||||
isPackaged: boolean;
|
||||
};
|
||||
|
||||
const DEFAULT_READY_TIMEOUT_MS = 30_000;
|
||||
const DEFAULT_READY_INTERVAL_MS = 250;
|
||||
|
||||
@@ -43,6 +49,10 @@ export function createDesktopHealthUrl(port: number): string {
|
||||
return `${createDesktopServerUrl(port)}/api/desktop/health`;
|
||||
}
|
||||
|
||||
export function resolveDesktopServerWorkingDir(input: DesktopServerWorkingDirInput): string {
|
||||
return input.isPackaged ? input.resourcesPath : input.appPath;
|
||||
}
|
||||
|
||||
export async function waitForServerReady(input: WaitForServerReadyInput): Promise<void> {
|
||||
const fetcher = input.fetcher || ((url: string, init?: RequestInit) => fetch(url, init));
|
||||
const timeoutMs = input.timeoutMs ?? DEFAULT_READY_TIMEOUT_MS;
|
||||
|
||||
Reference in New Issue
Block a user