#!/usr/bin/env node // health_check.js — проверяет что всё готово для UI-тестирования const { execSync } = require('child_process'); const fs = require('fs'); const path = require('path'); const CHROMIUM_PATH = path.join( process.env.HOME, '.cache/ms-playwright/chromium_headless_shell-1223/chrome-headless-shell-linux64/chrome-headless-shell' ); const LIB_PATHS = [ path.join(process.env.HOME, 'chromium-libs/libs/usr/lib/x86_64-linux-gnu'), path.join(process.env.HOME, 'chromium-libs/libs/lib/x86_64-linux-gnu') ]; const LD_LIBRARY_PATH = LIB_PATHS.join(':'); const checks = []; // 1. Chromium binary exists if (fs.existsSync(CHROMIUM_PATH)) { checks.push({ name: 'Chromium binary', status: 'OK' }); } else { checks.push({ name: 'Chromium binary', status: 'FAIL', detail: `Not found: ${CHROMIUM_PATH}` }); } // 2. Libraries exist if (fs.existsSync(LIB_PATHS[0])) { const libs = fs.readdirSync(LIB_PATHS[0]).filter(f => f.endsWith('.so') || f.includes('.so.')); checks.push({ name: 'Shared libraries', status: libs.length > 20 ? 'OK' : 'FAIL', detail: `${libs.length} .so files` }); } else { checks.push({ name: 'Shared libraries', status: 'FAIL', detail: `Not found: ${LIB_PATHS[0]}` }); } // 3. Chromium launches try { const env = { ...process.env, LD_LIBRARY_PATH }; execSync(`"${CHROMIUM_PATH}" --headless --disable-gpu --no-sandbox --dump-dom about:blank`, { env, timeout: 10000, stdio: 'pipe' }); checks.push({ name: 'Chromium launches', status: 'OK' }); } catch (e) { checks.push({ name: 'Chromium launches', status: 'FAIL', detail: e.message.slice(0, 200) }); } // 4. Playwright available try { require('playwright-core'); checks.push({ name: 'Playwright module', status: 'OK' }); } catch { checks.push({ name: 'Playwright module', status: 'FAIL', detail: 'Run: npm install (in scripts/)' }); } // Output const allOk = checks.every(c => c.status === 'OK'); console.log(allOk ? '✅ All checks passed' : '❌ Some checks failed'); checks.forEach(c => { const icon = c.status === 'OK' ? '✓' : '✗'; console.log(` ${icon} ${c.name}: ${c.status}${c.detail ? ' — ' + c.detail : ''}`); }); process.exit(allOk ? 0 : 1);