()
| 69 | } |
| 70 | |
| 71 | async function _prepareBenchpressSetup(): Promise<BenchpressSetup> { |
| 72 | const module = await loadBenchpressModule(); |
| 73 | const { |
| 74 | SeleniumWebDriverAdapter, |
| 75 | Options, |
| 76 | JsonFileReporter, |
| 77 | RegressionSlopeValidator, |
| 78 | Validator, |
| 79 | MultiReporter, |
| 80 | ConsoleReporter, |
| 81 | SizeValidator, |
| 82 | MultiMetric, |
| 83 | Runner, |
| 84 | } = module; |
| 85 | |
| 86 | let runId = randomUUID(); |
| 87 | if (process.env.GIT_SHA) { |
| 88 | runId = process.env.GIT_SHA + ' ' + runId; |
| 89 | } |
| 90 | |
| 91 | const testOutputDirectory = process.env.TEST_UNDECLARED_OUTPUTS_DIR; |
| 92 | |
| 93 | if (testOutputDirectory === undefined) { |
| 94 | throw new Error( |
| 95 | 'Unexpected execution outside of a Bazel test. ' + |
| 96 | 'Missing `TEST_UNDECLARED_OUTPUTS_DIR` environment variable.', |
| 97 | ); |
| 98 | } |
| 99 | |
| 100 | const providers: benchpress.StaticProvider[] = [ |
| 101 | SeleniumWebDriverAdapter.PROTRACTOR_PROVIDERS, |
| 102 | {provide: Options.FORCE_GC, useValue: globalOptions.forceGc}, |
| 103 | {provide: Options.DEFAULT_DESCRIPTION, useValue: {'runId': runId}}, |
| 104 | JsonFileReporter.PROVIDERS, |
| 105 | {provide: JsonFileReporter.PATH, useValue: testOutputDirectory}, |
| 106 | ]; |
| 107 | if (!globalOptions.dryRun) { |
| 108 | providers.push({provide: Validator, useExisting: RegressionSlopeValidator}); |
| 109 | providers.push({ |
| 110 | provide: RegressionSlopeValidator.SAMPLE_SIZE, |
| 111 | useValue: globalOptions.sampleSize, |
| 112 | }); |
| 113 | providers.push(MultiReporter.provideWith([ConsoleReporter, JsonFileReporter])); |
| 114 | } else { |
| 115 | providers.push({provide: Validator, useExisting: SizeValidator}); |
| 116 | providers.push({provide: SizeValidator.SAMPLE_SIZE, useValue: 1}); |
| 117 | providers.push(MultiReporter.provideWith([])); |
| 118 | providers.push(MultiMetric.provideWith([])); |
| 119 | } |
| 120 | |
| 121 | return { |
| 122 | runner: new Runner(providers), |
| 123 | module, |
| 124 | }; |
| 125 | } |
| 126 | |
| 127 | /** Loads the benchpress module through a CJS/ESM interop. */ |
| 128 | async function loadBenchpressModule(): Promise<typeof benchpress> { |
no test coverage detected
searching dependent graphs…