mirror of
https://github.com/layue13/MoonBridge.git
synced 2026-10-25 18:46:18 +00:00
发行包去掉 bin/ 启动脚本和 lib/ 下的 42 个依赖 jar,改为与其他代理服务端一样 用 java -jar moonbridge.jar 启动: - proxy-core 用 shadow 打出含全部依赖的 moonbridge.jar(合并 META-INF/services, 清单写入 Main-Class、Multi-Release 与 Enable-Native-Access: ALL-UNNAMED) - 泄漏检测默认关闭改由 ProxyMain 在加载 Netty 前设置,显式 -D 仍优先 - 移除不再使用的 application 约定插件 - 安装包检查、烟测与基准脚本改用发行包根目录作 classpath;文档同步 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
40 lines
2.6 KiB
JavaScript
40 lines
2.6 KiB
JavaScript
// Run after permission-services.cjs start and compiling PermissionNetworkAcceptance.
|
|
const fs = require('node:fs');
|
|
const path = require('node:path');
|
|
const {spawn,spawnSync} = require('node:child_process');
|
|
const root = path.resolve(__dirname, '../..');
|
|
const mode = process.argv[2];
|
|
if (!['sql','redis'].includes(mode)) throw new Error('Usage: node testing/smoke/permission-network.cjs sql|redis [outage]');
|
|
const outage = process.argv[3] === 'outage';
|
|
const log = fs.createWriteStream(path.join(root,'build',`permission-network-${mode}${outage?'-outage':''}.log`));
|
|
const args = ['-cp',`${path.join(root,'proxy/core/build/install/moonbridge/*')}${path.delimiter}${path.join(root,'build/permission-network-classes')}`,
|
|
'PermissionNetworkAcceptance','proxy/core/build/install/moonbridge',`build/permission-services/${mode==='sql'?'mariadb':'redis'}-base.yml`,'build/permission-network',mode];
|
|
if (outage) args.push('outage');
|
|
const child = spawn('java',args,{cwd:root,windowsHide:true,stdio:['pipe','pipe','pipe']});
|
|
let pending = '';
|
|
child.stderr.on('data',chunk=>log.write(chunk));
|
|
child.stdout.on('data',chunk=>{
|
|
log.write(chunk); pending+=chunk.toString();
|
|
let end;
|
|
while ((end=pending.indexOf('\n'))>=0) {
|
|
const line=pending.slice(0,end).trim(); pending=pending.slice(end+1);
|
|
const request=/^REQUEST_(STOP|START)_(MARIADB|REDIS)$/.exec(line);
|
|
if (request) {
|
|
const [,verb,kind]=request;
|
|
console.log(line);
|
|
const action=`${verb==='STOP'?'pause':'resume'}-${kind.toLowerCase()}`;
|
|
const result=spawnSync(process.execPath,[path.join(__dirname,'permission-services.cjs'),action],{encoding:'utf8',windowsHide:true});
|
|
if (result.status!==0) { console.error(result.stderr); child.kill(); process.exitCode=1; return; }
|
|
if (verb==='START' && kind==='REDIS') {
|
|
const subscribers=spawnSync(process.execPath,[path.join(__dirname,'permission-services.cjs'),'wait-redis-subscribers'],{encoding:'utf8',windowsHide:true});
|
|
if (subscribers.status!==0) { console.error(subscribers.stderr);child.kill();process.exitCode=1;return; }
|
|
console.log(subscribers.stdout.trim());
|
|
}
|
|
child.stdin.write(`${kind}_${verb==='STOP'?'STOPPED':'STARTED'}\n`);
|
|
} else if (line.includes('ACCEPTANCE_PASS')) console.log(line);
|
|
}
|
|
});
|
|
const deadline=setTimeout(()=>{console.error('Network acceptance exceeded 10 minutes');child.kill();process.exitCode=1;},600000);
|
|
child.on('error',error=>{console.error(error.message);process.exitCode=1;});
|
|
child.on('close',(code,signal)=>{clearTimeout(deadline);log.end();console.log(`Network acceptance exit=${code} signal=${signal || 'none'}`);process.exitCode=process.exitCode||(code===0?0:1);});
|