49 lines
1.8 KiB
JavaScript
49 lines
1.8 KiB
JavaScript
#!/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);
|
|
}
|