import { spawn } from 'node:child_process'; import { pathToFileURL } from 'node:url'; import { ExecutionDataManager, buildReport } from '@qacg/qk-test-analytics'; export async function executeAndReport(run, report) { let exitCode = 1; try { exitCode = await run(); } catch (error) { console.error('[QKForce] Runner failed:', error.message); } try { await report(); } catch (error) { console.error('[QKForce] Report generation failed:', error.message); return exitCode || 1; } return exitCode; } function runWdio() { return new Promise((resolve, reject) => { if (!process.env.npm_execpath) { reject(new Error('Start the fixed profile with npm run qkforce:test')); return; } // The command is fixed locally. No package manifest field supplies a shell command. const child = spawn(process.execPath, [process.env.npm_execpath, 'run', 'test:wdio'], { stdio: 'inherit', shell: false }); child.once('error', reject); child.once('close', code => resolve(code ?? 1)); }); } if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) { new ExecutionDataManager().archiveCurrentReport(); process.exitCode = await executeAndReport(runWdio, () => buildReport({ reportsDir: 'qreport-results/media-bucket/reports', output: 'qreport-results/index.html' })); }