Add runner ci (test)
This commit is contained in:
111
tools/package-server-executable.js
Normal file
111
tools/package-server-executable.js
Normal file
@@ -0,0 +1,111 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { spawnSync } = require('child_process');
|
||||
|
||||
const rootDir = path.resolve(__dirname, '..');
|
||||
const serverPackageJsonPath = path.join(rootDir, 'server', 'package.json');
|
||||
const serverEntryPointPath = path.join(rootDir, 'server', 'dist', 'index.js');
|
||||
const serverSqlJsBinaryPath = path.join(rootDir, 'server', 'node_modules', 'sql.js', 'dist', 'sql-wasm.wasm');
|
||||
const distServerDir = path.join(rootDir, 'dist-server');
|
||||
|
||||
function parseArgs(argv) {
|
||||
const args = {};
|
||||
|
||||
for (let index = 0; index < argv.length; index += 1) {
|
||||
const token = argv[index];
|
||||
|
||||
if (!token.startsWith('--')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const key = token.slice(2);
|
||||
const nextToken = argv[index + 1];
|
||||
|
||||
if (!nextToken || nextToken.startsWith('--')) {
|
||||
args[key] = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
args[key] = nextToken;
|
||||
index += 1;
|
||||
}
|
||||
|
||||
return args;
|
||||
}
|
||||
|
||||
function resolvePkgBinPath() {
|
||||
const pkgPackageJsonPath = require.resolve('pkg/package.json');
|
||||
|
||||
return path.join(path.dirname(pkgPackageJsonPath), 'lib-es5', 'bin.js');
|
||||
}
|
||||
|
||||
function copySqlJsBinary() {
|
||||
if (!fs.existsSync(serverSqlJsBinaryPath)) {
|
||||
throw new Error(`sql.js wasm binary not found at ${serverSqlJsBinaryPath}. Run npm install --prefix server first.`);
|
||||
}
|
||||
|
||||
fs.copyFileSync(
|
||||
serverSqlJsBinaryPath,
|
||||
path.join(distServerDir, 'sql-wasm.wasm')
|
||||
);
|
||||
}
|
||||
|
||||
function main() {
|
||||
const args = parseArgs(process.argv.slice(2));
|
||||
const target = typeof args.target === 'string' && args.target.trim().length > 0
|
||||
? args.target.trim()
|
||||
: null;
|
||||
const outputName = typeof args.output === 'string' && args.output.trim().length > 0
|
||||
? args.output.trim()
|
||||
: null;
|
||||
|
||||
if (!target) {
|
||||
throw new Error('A pkg target is required. Pass it with --target.');
|
||||
}
|
||||
|
||||
if (!outputName) {
|
||||
throw new Error('An output file name is required. Pass it with --output.');
|
||||
}
|
||||
|
||||
if (!fs.existsSync(serverEntryPointPath)) {
|
||||
throw new Error(`Server build output not found at ${serverEntryPointPath}. Run npm run server:build first.`);
|
||||
}
|
||||
|
||||
fs.mkdirSync(distServerDir, { recursive: true });
|
||||
|
||||
const outputPath = path.join(distServerDir, outputName);
|
||||
|
||||
if (fs.existsSync(outputPath)) {
|
||||
fs.rmSync(outputPath, { force: true });
|
||||
}
|
||||
|
||||
const pkgBinPath = resolvePkgBinPath();
|
||||
const result = spawnSync(process.execPath, [
|
||||
pkgBinPath,
|
||||
serverPackageJsonPath,
|
||||
'--targets',
|
||||
target,
|
||||
'--output',
|
||||
outputPath
|
||||
], {
|
||||
cwd: rootDir,
|
||||
stdio: 'inherit'
|
||||
});
|
||||
|
||||
if (result.status !== 0) {
|
||||
process.exit(result.status ?? 1);
|
||||
}
|
||||
|
||||
copySqlJsBinary();
|
||||
|
||||
console.log(`[server-bundle] Wrote ${outputPath}`);
|
||||
}
|
||||
|
||||
try {
|
||||
main();
|
||||
} catch (error) {
|
||||
const message = error instanceof Error ? error.message : String(error);
|
||||
|
||||
console.error(`[server-bundle] ${message}`);
|
||||
process.exitCode = 1;
|
||||
}
|
||||
Reference in New Issue
Block a user