Files
CRM_Montzar/scripts/check.mjs
T

49 lines
1.8 KiB
JavaScript
Raw Normal View History

#!/usr/bin/env node
/**
* بررسی قبل از پوش: بیلد shared، تایپ API و تست‌ها، تایپ وب.
* npm run check — بررسی کامل
* npm run check -- --e2e — به‌علاوهٔ تست‌های مرورگری (نیاز به e2e/.env)
*/
import { spawn } from 'node:child_process';
const withE2e = process.argv.includes('--e2e');
function run(label, cmd, cwd = '.') {
return new Promise((resolve) => {
const started = Date.now();
const child = spawn(cmd, { cwd, shell: true, env: process.env });
let out = '';
child.stdout.on('data', (d) => (out += d));
child.stderr.on('data', (d) => (out += d));
child.on('close', (code) => {
const sec = ((Date.now() - started) / 1000).toFixed(0);
if (code === 0) console.log(` ✔ ${label} (${sec}s)`);
else console.log(` ✖ ${label} (${sec}s)\n${out.trim().split('\n').slice(-40).join('\n')}\n`);
resolve(code === 0);
});
});
}
console.log('بررسی پروژه…');
const steps = [];
if (!(await run('بیلد @mento/shared', 'npm run build -w @mento/shared'))) process.exit(1);
steps.push(
run('تایپ API', 'npx tsc --noEmit -p tsconfig.json', 'apps/api'),
run('تایپ تست‌های API', 'npx tsc --noEmit -p test/tsconfig.json', 'apps/api'),
run('تست‌های واحد API', 'npm test -w @mento/api'),
run('تایپ وب (vue-tsc)', 'npx vue-tsc -b', 'apps/web'),
);
const results = await Promise.all(steps);
if (withE2e && results.every(Boolean)) {
results.push(await run('تست‌های مرورگری (Playwright)', 'npx playwright test'));
}
if (results.every(Boolean)) {
console.log('همه‌چیز سالم است.');
} else {
console.log('بررسی ناموفق بود؛ قبل از پوش مشکل‌ها را رفع کنید. (اضطراری: git push --no-verify)');
process.exit(1);
}