build-benchmark.jsβ’2.93 kB
#!/usr/bin/env node
/**
* Build performance benchmarking script
* Measures and reports build times for all packages
*/
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
const BENCHMARK_FILE = 'build-benchmark.json';
function measureBuildTime(command, description) {
console.log(`\nπ ${description}...`);
const startTime = Date.now();
try {
execSync(command, { stdio: 'inherit' });
const endTime = Date.now();
const duration = endTime - startTime;
console.log(`β
${description} completed in ${duration}ms`);
return { success: true, duration, command, description };
} catch (error) {
const endTime = Date.now();
const duration = endTime - startTime;
console.error(`β ${description} failed after ${duration}ms`);
return { success: false, duration, command, description, error: error.message };
}
}
function saveBenchmark(results) {
const benchmark = {
timestamp: new Date().toISOString(),
platform: process.platform,
nodeVersion: process.version,
results
};
let history = [];
if (fs.existsSync(BENCHMARK_FILE)) {
try {
history = JSON.parse(fs.readFileSync(BENCHMARK_FILE, 'utf8'));
} catch (e) {
console.warn('Could not read existing benchmark file');
}
}
history.push(benchmark);
// Keep only last 10 benchmarks
if (history.length > 10) {
history = history.slice(-10);
}
fs.writeFileSync(BENCHMARK_FILE, JSON.stringify(history, null, 2));
console.log(`\nπ Benchmark saved to ${BENCHMARK_FILE}`);
}
function main() {
console.log('π Starting build performance benchmark...');
const results = [];
// Clean first
results.push(measureBuildTime('pnpm clean', 'Clean all packages'));
// Build individual packages
results.push(measureBuildTime('pnpm build:core', 'Build core package'));
results.push(measureBuildTime('pnpm build:mcp', 'Build MCP package'));
results.push(measureBuildTime('pnpm build:vscode', 'Build VSCode extension'));
// Full build
results.push(measureBuildTime('pnpm -r --filter="./packages/chrome-extension" build', 'Build Chrome extension'));
const totalTime = results.reduce((sum, result) => sum + result.duration, 0);
const successCount = results.filter(r => r.success).length;
console.log(`\nπ Benchmark Summary:`);
console.log(` Total time: ${totalTime}ms`);
console.log(` Successful builds: ${successCount}/${results.length}`);
console.log(` Platform: ${process.platform}`);
console.log(` Node version: ${process.version}`);
saveBenchmark(results);
}
if (require.main === module) {
main();
}
module.exports = { measureBuildTime, saveBenchmark };