JSTQL-JS-Transform/output_testing/15runner.js

104 lines
4 KiB
JavaScript
Raw Normal View History

'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(%);
}