fix: harden one-click installer
Some checks failed
Build and tests / test (push) Has been cancelled

This commit is contained in:
237899745
2026-07-27 21:04:12 +08:00
parent a736d70d57
commit bd46227e49
2 changed files with 403 additions and 174 deletions

View File

@@ -140,6 +140,43 @@ test('PM2 部署没有启用 cluster 或多实例参数', () => {
assert.strictEqual(/pm2\s+start[^\n]*(?:\s-i\s|--instances)/.test(installer), false);
});
test('install.sh 可在最小化系统完成预检且不会吞掉 NodeSource 下载错误', () => {
const installer = fs.readFileSync(path.join(projectRoot, 'install.sh'), 'utf8');
assert.ok(installer.includes("/dev/tcp/git.workyai.cn/443"));
assert.strictEqual(installer.includes('ping -c 1 git.workyai.cn'), false);
assert.strictEqual(/^\s*clear\s*$/m.test(installer), false);
assert.ok(installer.includes('clear_screen'));
assert.ok(installer.includes('main "$@"'));
assert.ok(installer.includes('/etc/apt/sources.list.d/ubuntu.sources'));
for (const dependency of ['ca-certificates', 'iproute2', 'dnsutils', 'procps']) {
assert.ok(installer.includes(dependency), dependency);
}
assert.ok(installer.includes('download_and_run_setup_script'));
assert.strictEqual(/curl[^\n]+\|\s*(?:ba)?sh/.test(installer), false);
assert.ok(installer.includes('verify_nodejs_installation'));
});
test('install.sh 生成可用且受保护的生产环境配置', () => {
const installer = fs.readFileSync(path.join(projectRoot, 'install.sh'), 'utf8');
assert.ok(installer.includes('PUBLIC_BASE_URL=${PUBLIC_BASE_URL_VALUE}'));
assert.ok(installer.includes('ALLOWED_HOSTS=${ALLOWED_HOSTS_VALUE}'));
assert.ok(installer.includes('ALLOWED_ORIGINS=${ALLOWED_ORIGINS_VALUE}'));
assert.ok(installer.includes('chmod 600 "${PROJECT_DIR}/backend/.env"'));
assert.ok(installer.includes('dotenv_quote'));
assert.strictEqual(installer.includes('ALLOWED_ORIGINS_VALUE=""'), false);
assert.strictEqual(installer.includes('type_count++'), false);
assert.ok(installer.includes('/api/health'));
});
test('install.sh 只展示已实现的 SSL 方案且 Certbot 分支可达', () => {
const installer = fs.readFileSync(path.join(projectRoot, 'install.sh'), 'utf8');
assert.ok(installer.includes('deploy_certbot || ssl_fallback "1"'));
assert.ok(installer.includes('download_and_run_setup_script "https://get.acme.sh"'));
assert.strictEqual(installer.includes('证书申请功能开发中'), false);
assert.strictEqual(installer.includes('阿里云AccessKey ID'), false);
assert.strictEqual(installer.includes('腾讯云SecretId'), false);
});
console.log('\n========================================');
console.log('测试总结');
console.log('========================================');