@@ -244,8 +244,10 @@ export class Runner {
244
244
) ;
245
245
246
246
// bisect through the releases
247
- let left = 0 ;
248
- let right = versions . length - 1 ;
247
+ const LEFT_POS = 0 ;
248
+ const RIGHT_POS = versions . length - 1 ;
249
+ let left = LEFT_POS ;
250
+ let right = RIGHT_POS ;
249
251
let result : TestResult | undefined = undefined ;
250
252
const testOrder : ( number | undefined ) [ ] = [ ] ;
251
253
const results = new Array < TestResult > ( versions . length ) ;
@@ -258,7 +260,6 @@ export class Runner {
258
260
result = await this . run ( ver . version , fiddle , opts ) ;
259
261
results [ mid ] = result ;
260
262
log ( `${ Runner . displayResult ( result ) } ${ versions [ mid ] . version } \n` ) ;
261
-
262
263
if ( result . status === 'test_passed' ) {
263
264
left = mid ;
264
265
continue ;
@@ -270,6 +271,19 @@ export class Runner {
270
271
}
271
272
}
272
273
274
+ // validates the status of the boundary versions if we've reached the end
275
+ // of the bisect and one of our pointers is at a boundary.
276
+
277
+ const boundaries : Array < number > = [ ] ;
278
+ if ( left === LEFT_POS && ! results [ LEFT_POS ] ) boundaries . push ( LEFT_POS ) ;
279
+ if ( right === RIGHT_POS && ! results [ RIGHT_POS ] ) boundaries . push ( RIGHT_POS ) ;
280
+
281
+ for ( const position of boundaries ) {
282
+ const result = await this . run ( versions [ position ] . version , fiddle , opts ) ;
283
+ results [ position ] = result ;
284
+ log ( `${ Runner . displayResult ( result ) } ${ versions [ position ] . version } \n` ) ;
285
+ }
286
+
273
287
log ( `🏁 finished bisecting across ${ versions . length } versions...` ) ;
274
288
versions . forEach ( ( ver , i ) => {
275
289
const n = testOrder . indexOf ( i ) ;
@@ -297,19 +311,25 @@ export class Runner {
297
311
`https://github.com/electron/electron/compare/v${ good } ...v${ bad } ↔` ,
298
312
] . join ( '\n' ) ,
299
313
) ;
300
- } else {
301
- // FIXME: log some failure
302
- }
303
314
304
- if ( success ) {
305
315
return {
306
316
range : [ versions [ left ] . version , versions [ right ] . version ] ,
307
317
status : 'bisect_succeeded' ,
308
318
} ;
319
+ } else {
320
+ // FIXME: log some failure
321
+ if (
322
+ result ?. status === 'test_error' ||
323
+ result ?. status === 'system_error'
324
+ ) {
325
+ return { status : result . status } ;
326
+ }
327
+
328
+ if ( results [ left ] . status === results [ right ] . status ) {
329
+ return { status : 'test_error' } ;
330
+ }
331
+
332
+ return { status : 'system_error' } ;
309
333
}
310
- if ( result ?. status === 'test_error' || result ?. status === 'system_error' ) {
311
- return { status : result . status } ;
312
- }
313
- return { status : 'system_error' } ;
314
334
}
315
335
}
0 commit comments