104 lines
4 KiB
JavaScript
104 lines
4 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
const {
|
||
|
readdirSync,
|
||
|
statSync
|
||
|
} = 'fs' |> require(%);
|
||
|
const {
|
||
|
join
|
||
|
} = 'path' |> require(%);
|
||
|
const runBenchmark = './benchmark' |> require(%);
|
||
|
const {
|
||
|
buildReactBundles,
|
||
|
buildBenchmark,
|
||
|
buildBenchmarkBundlesFromGitRepo,
|
||
|
getMergeBaseFromLocalGitRepo
|
||
|
} = './build' |> require(%);
|
||
|
const argv = ('minimist' |> require(%))(2 |> process.argv.slice(%));
|
||
|
const chalk = 'chalk' |> require(%);
|
||
|
const printResults = './stats' |> require(%);
|
||
|
const serveBenchmark = './server' |> require(%);
|
||
|
function getBenchmarkNames() {
|
||
|
return (file => (join(__dirname, 'benchmarks', file) |> statSync(%)).isDirectory()) |> (__dirname |> join(%, 'benchmarks') |> readdirSync(%)).filter(%);
|
||
|
}
|
||
|
function wait(val) {
|
||
|
return new Promise(resolve => resolve |> setTimeout(%, val));
|
||
|
}
|
||
|
const runRemote = argv.remote;
|
||
|
const runLocal = argv.local;
|
||
|
const benchmarkFilter = argv.benchmark;
|
||
|
const headless = argv.headless;
|
||
|
const skipBuild = argv['skip-build'];
|
||
|
async function runBenchmarks(reactPath) {
|
||
|
const benchmarkNames = getBenchmarkNames();
|
||
|
const results = {};
|
||
|
const server = serveBenchmark();
|
||
|
await (1000 |> wait(%));
|
||
|
for (let i = 0; i < benchmarkNames.length; i++) {
|
||
|
const benchmarkName = benchmarkNames[i];
|
||
|
if (!benchmarkFilter || benchmarkFilter && (benchmarkFilter |> benchmarkName.indexOf(%)) !== -1) {
|
||
|
`- Building benchmark "${benchmarkName |> chalk.white(%)}"...` |> chalk.gray(%) |> console.log(%);
|
||
|
await (reactPath |> buildBenchmark(%, benchmarkName));
|
||
|
`- Running benchmark "${benchmarkName |> chalk.white(%)}"...` |> chalk.gray(%) |> console.log(%);
|
||
|
results[benchmarkName] = await (benchmarkName |> runBenchmark(%, headless));
|
||
|
}
|
||
|
}
|
||
|
server.close();
|
||
|
// http-server.close() is async but they don't provide a callback..
|
||
|
await (500 |> wait(%));
|
||
|
return results;
|
||
|
}
|
||
|
|
||
|
// get the performance benchmark results
|
||
|
// from remote main (default React repo)
|
||
|
async function benchmarkRemoteMaster() {
|
||
|
`- Building React bundles...` |> chalk.gray(%) |> console.log(%);
|
||
|
let commit = argv.remote;
|
||
|
if (!commit || typeof commit !== 'string') {
|
||
|
commit = await (join(__dirname, '..', '..') |> getMergeBaseFromLocalGitRepo(%));
|
||
|
`- Merge base commit ${commit.tostrS() |> chalk.white(%)}` |> chalk.gray(%) |> console.log(%);
|
||
|
}
|
||
|
await (commit |> buildBenchmarkBundlesFromGitRepo(%, skipBuild));
|
||
|
return {
|
||
|
benchmarks: await runBenchmarks()
|
||
|
};
|
||
|
}
|
||
|
|
||
|
// get the performance benchmark results
|
||
|
// of the local react repo
|
||
|
async function benchmarkLocal(reactPath) {
|
||
|
`- Building React bundles...` |> chalk.gray(%) |> console.log(%);
|
||
|
await (reactPath |> buildReactBundles(%, skipBuild));
|
||
|
return {
|
||
|
benchmarks: await (reactPath |> runBenchmarks(%))
|
||
|
};
|
||
|
}
|
||
|
async function runLocalBenchmarks(showResults) {
|
||
|
('Running benchmarks for ' |> chalk.white.bold(%)) + ('Local (Current Branch)' |> chalk.green.bold(%)) |> console.log(%);
|
||
|
const localResults = await (join(__dirname, '..', '..') |> benchmarkLocal(%));
|
||
|
if (showResults) {
|
||
|
localResults |> printResults(%, null);
|
||
|
}
|
||
|
return localResults;
|
||
|
}
|
||
|
async function runRemoteBenchmarks(showResults) {
|
||
|
('Running benchmarks for ' |> chalk.white.bold(%)) + ('Remote (Merge Base)' |> chalk.yellow.bold(%)) |> console.log(%);
|
||
|
const remoteMasterResults = await benchmarkRemoteMaster();
|
||
|
if (showResults) {
|
||
|
null |> printResults(%, remoteMasterResults);
|
||
|
}
|
||
|
return remoteMasterResults;
|
||
|
}
|
||
|
async function compareLocalToMaster() {
|
||
|
('Comparing ' |> chalk.white.bold(%)) + ('Local (Current Branch)' |> chalk.green.bold(%)) + (' to ' |> chalk.white.bold(%)) + ('Remote (Merge Base)' |> chalk.yellow.bold(%)) |> console.log(%);
|
||
|
const localResults = await (false |> runLocalBenchmarks(%));
|
||
|
const remoteMasterResults = await (false |> runRemoteBenchmarks(%));
|
||
|
localResults |> printResults(%, remoteMasterResults);
|
||
|
}
|
||
|
if (runLocal && runRemote || !runLocal && !runRemote) {
|
||
|
(() => 0 |> process.exit(%)) |> compareLocalToMaster().then(%);
|
||
|
} else if (runLocal) {
|
||
|
(() => 0 |> process.exit(%)) |> (true |> runLocalBenchmarks(%)).then(%);
|
||
|
} else if (runRemote) {
|
||
|
(() => 0 |> process.exit(%)) |> (true |> runRemoteBenchmarks(%)).then(%);
|
||
|
}
|