a7e580407c
* feat: add desktop wrapper with frontend-only packaging * docs: add desktop build docs and track dashboard lockfile * fix: track desktop lockfile for npm ci * fix: allow custom install directory for windows installer * chore: migrate desktop workflow to pnpm * fix(desktop): build AppImage only on Linux * fix(desktop): harden packaged startup and backend bundling * fix(desktop): adapt packaged restart and plugin dependency flow * fix(desktop): prevent backend respawn race on quit * fix(desktop): prefer pyproject version for desktop packaging * fix(desktop): improve startup loading UX and reduce flicker * ci: add desktop multi-platform release workflow * ci: fix desktop release build and mac runner labels * ci: disable electron-builder auto publish in desktop build * ci: avoid electron-builder publish path in build matrix * ci: normalize desktop release artifact names * ci: exclude blockmap files from desktop release assets * ci: prefix desktop release assets with AstrBot and purge blockmaps * feat: add electron bridge types and expose backend control methods in preload script * Update startup screen assets and styles - Changed the icon from PNG to SVG format for better scalability. - Updated the border color from #d0d0d0 to #eeeeee for a softer appearance. - Adjusted the width of the startup screen from 460px to 360px for improved responsiveness. * Update .gitignore to include package.json * chore: remove desktop gitkeep ignore exceptions * docs: update desktop troubleshooting for current runtime behavior * refactor(desktop): modularize runtime and harden startup flow --------- Co-authored-by: Soulter <905617992@qq.com> Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com>
69 lines
1.6 KiB
JavaScript
69 lines
1.6 KiB
JavaScript
import { spawnSync } from 'node:child_process';
|
|
import path from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
const rootDir = path.resolve(__dirname, '..', '..');
|
|
const outputDir = path.join(rootDir, 'desktop', 'resources', 'backend');
|
|
const workDir = path.join(rootDir, 'desktop', 'resources', '.pyinstaller');
|
|
const dataSeparator = process.platform === 'win32' ? ';' : ':';
|
|
const kbStopwordsSrc = path.join(
|
|
rootDir,
|
|
'astrbot',
|
|
'core',
|
|
'knowledge_base',
|
|
'retrieval',
|
|
'hit_stopwords.txt',
|
|
);
|
|
const kbStopwordsDest = 'astrbot/core/knowledge_base/retrieval';
|
|
|
|
const args = [
|
|
'run',
|
|
'--with',
|
|
'pyinstaller',
|
|
'python',
|
|
'-m',
|
|
'PyInstaller',
|
|
'--noconfirm',
|
|
'--clean',
|
|
'--onefile',
|
|
'--name',
|
|
'astrbot-backend',
|
|
'--collect-all',
|
|
'aiosqlite',
|
|
'--collect-all',
|
|
'pip',
|
|
'--collect-submodules',
|
|
'astrbot.api',
|
|
'--add-data',
|
|
`${kbStopwordsSrc}${dataSeparator}${kbStopwordsDest}`,
|
|
'--distpath',
|
|
outputDir,
|
|
'--workpath',
|
|
workDir,
|
|
'--specpath',
|
|
workDir,
|
|
path.join(rootDir, 'main.py'),
|
|
];
|
|
|
|
const result = spawnSync('uv', args, {
|
|
cwd: rootDir,
|
|
stdio: 'inherit',
|
|
shell: process.platform === 'win32',
|
|
});
|
|
|
|
if (result.error) {
|
|
console.error(`Failed to run 'uv': ${result.error.message}`);
|
|
process.exit(typeof result.status === 'number' ? result.status : 1);
|
|
}
|
|
|
|
if (result.status !== 0) {
|
|
console.error(
|
|
`'uv' exited with status ${result.status} while running PyInstaller. ` +
|
|
'Verify that uv and pyinstaller are installed and that arguments are valid.',
|
|
);
|
|
process.exit(result.status ?? 1);
|
|
}
|
|
|
|
process.exit(0);
|