@@ -14,6 +14,17 @@ const maxTime = 5;
14
14
// The minimum sample size required to perform statistical analysis.
15
15
const minSamples = 5 ;
16
16
17
+ // Get the revisions and make things happen!
18
+ if ( require . main === module ) {
19
+ const { benchmarks, revisions } = getArguments ( process . argv . slice ( 2 ) ) ;
20
+ const benchmarkProjects = prepareBenchmarkProjects ( revisions ) ;
21
+
22
+ runBenchmarks ( benchmarks , benchmarkProjects ) . catch ( ( error ) => {
23
+ console . error ( error ) ;
24
+ process . exit ( 1 ) ;
25
+ } ) ;
26
+ }
27
+
17
28
function localDir ( ...paths ) {
18
29
return path . join ( __dirname , '..' , ...paths ) ;
19
30
}
@@ -31,17 +42,16 @@ function exec(command, options = {}) {
31
42
// and returns path to its 'dist' directory.
32
43
function prepareBenchmarkProjects ( revisionList ) {
33
44
const tmpDir = path . join ( os . tmpdir ( ) , 'graphql-js-benchmark' ) ;
34
- fs . rmdirSync ( tmpDir , { recursive : true , force : true } ) ;
45
+ fs . rmSync ( tmpDir , { recursive : true , force : true } ) ;
35
46
fs . mkdirSync ( tmpDir ) ;
36
47
37
48
const setupDir = path . join ( tmpDir , 'setup' ) ;
38
- fs . rmdirSync ( setupDir , { recursive : true , force : true } ) ;
39
49
fs . mkdirSync ( setupDir ) ;
40
50
41
51
return revisionList . map ( ( revision ) => {
42
52
console . log ( `🍳 Preparing ${ revision } ...` ) ;
43
53
const projectPath = path . join ( setupDir , revision ) ;
44
- fs . rmdirSync ( projectPath , { recursive : true } ) ;
54
+ fs . rmSync ( projectPath , { recursive : true , force : true } ) ;
45
55
fs . mkdirSync ( projectPath ) ;
46
56
47
57
fs . writeFileSync (
@@ -73,12 +83,12 @@ function prepareBenchmarkProjects(revisionList) {
73
83
}
74
84
75
85
const repoDir = path . join ( tmpDir , hash ) ;
76
- fs . rmdirSync ( repoDir , { recursive : true , force : true } ) ;
86
+ fs . rmSync ( repoDir , { recursive : true , force : true } ) ;
77
87
fs . mkdirSync ( repoDir ) ;
78
88
exec ( `git archive "${ hash } " | tar -xC "${ repoDir } "` ) ;
79
89
exec ( 'npm --quiet ci' , { cwd : repoDir } ) ;
80
90
fs . renameSync ( buildNPMArchive ( repoDir ) , archivePath ) ;
81
- fs . rmdirSync ( repoDir , { recursive : true , force : true } ) ;
91
+ fs . rmSync ( repoDir , { recursive : true } ) ;
82
92
return archivePath ;
83
93
}
84
94
@@ -230,9 +240,7 @@ function maxBy(array, fn) {
230
240
}
231
241
232
242
// Prepare all revisions and run benchmarks matching a pattern against them.
233
- async function runBenchmarks ( benchmarks , revisions ) {
234
- const benchmarkProjects = prepareBenchmarkProjects ( revisions ) ;
235
-
243
+ async function runBenchmarks ( benchmarks , benchmarkProjects ) {
236
244
for ( const benchmark of benchmarks ) {
237
245
const results = [ ] ;
238
246
for ( let i = 0 ; i < benchmarkProjects . length ; ++ i ) {
@@ -266,31 +274,36 @@ async function runBenchmarks(benchmarks, revisions) {
266
274
267
275
function getArguments ( argv ) {
268
276
const revsIdx = argv . indexOf ( '--revs' ) ;
269
- const revsArgs = revsIdx === - 1 ? [ ] : argv . slice ( revsIdx + 1 ) ;
270
- const specificBenchmarks = revsIdx === - 1 ? argv : argv . slice ( 0 , revsIdx ) ;
271
- let assumeArgs ;
272
- let revisions ;
273
- switch ( revsArgs . length ) {
277
+ const revisions = revsIdx === - 1 ? [ ] : argv . slice ( revsIdx + 1 ) ;
278
+ const benchmarks = revsIdx === - 1 ? argv : argv . slice ( 0 , revsIdx ) ;
279
+
280
+ switch ( revisions . length ) {
274
281
case 0 :
275
- assumeArgs = [ ...specificBenchmarks , '--revs' , 'local' , 'HEAD' ] ;
276
- revisions = [ LOCAL , 'HEAD' ] ;
277
- break ;
278
- case 1 :
279
- assumeArgs = [ ...specificBenchmarks , '--revs' , 'local' , revsArgs [ 0 ] ] ;
280
- revisions = [ LOCAL , revsArgs [ 0 ] ] ;
281
- break ;
282
- default :
283
- revisions = revsArgs ;
282
+ revisions . unshift ( 'HEAD' ) ;
283
+ // fall through
284
+ case 1 : {
285
+ revisions . unshift ( 'local' ) ;
286
+
287
+ const assumeArgv = [ 'benchmark' , ...benchmarks , '--revs' , ...revisions ] ;
288
+ console . warn ( 'Assuming you meant: ' + bold ( assumeArgv . join ( ' ' ) ) ) ;
284
289
break ;
290
+ }
285
291
}
286
292
287
- if ( assumeArgs ) {
288
- console . warn (
289
- 'Assuming you meant: ' + bold ( 'benchmark ' + assumeArgs . join ( ' ' ) ) ,
290
- ) ;
293
+ if ( benchmarks . length === 0 ) {
294
+ benchmarks . push ( ...findAllBenchmarks ( ) ) ;
291
295
}
292
296
293
- return { specificBenchmarks, revisions } ;
297
+ return { benchmarks, revisions } ;
298
+ }
299
+
300
+ function findAllBenchmarks ( ) {
301
+ return fs
302
+ . readdirSync ( localDir ( 'benchmark' ) , { withFileTypes : true } )
303
+ . filter ( ( dirent ) => dirent . isFile ( ) )
304
+ . map ( ( dirent ) => dirent . name )
305
+ . filter ( ( name ) => name . endsWith ( '-benchmark.js' ) )
306
+ . map ( ( name ) => path . join ( 'benchmark' , name ) ) ;
294
307
}
295
308
296
309
function bold ( str ) {
@@ -317,26 +330,6 @@ function grey(str) {
317
330
return '\u001b[90m' + str + '\u001b[0m' ;
318
331
}
319
332
320
- function findAllBenchmarks ( ) {
321
- return fs
322
- . readdirSync ( localDir ( 'benchmark' ) , { withFileTypes : true } )
323
- . filter ( ( dirent ) => dirent . isFile ( ) )
324
- . map ( ( dirent ) => dirent . name )
325
- . filter ( ( name ) => name . endsWith ( '-benchmark.js' ) )
326
- . map ( ( name ) => path . join ( 'benchmark' , name ) ) ;
327
- }
328
-
329
- // Get the revisions and make things happen!
330
- if ( require . main === module ) {
331
- const { specificBenchmarks, revisions } = getArguments ( process . argv . slice ( 2 ) ) ;
332
- const benchmarks =
333
- specificBenchmarks . length > 0 ? specificBenchmarks : findAllBenchmarks ( ) ;
334
- runBenchmarks ( benchmarks , revisions ) . catch ( ( error ) => {
335
- console . error ( error ) ;
336
- process . exit ( 1 ) ;
337
- } ) ;
338
- }
339
-
340
333
function sampleModule ( modulePath ) {
341
334
const sampleCode = `
342
335
const assert = require('assert');
0 commit comments