From d49ff1933b22e04c1bc72df72d259abc45676e1a Mon Sep 17 00:00:00 2001 From: Brandon Ly Date: Tue, 31 Oct 2023 08:05:37 -0500 Subject: [PATCH 1/4] Add option for runner --- packages/reassure-cli/src/commands/measure.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/reassure-cli/src/commands/measure.ts b/packages/reassure-cli/src/commands/measure.ts index 66e2dded..3d9a907a 100644 --- a/packages/reassure-cli/src/commands/measure.ts +++ b/packages/reassure-cli/src/commands/measure.ts @@ -16,6 +16,7 @@ export interface MeasureOptions extends CommonOptions { branch?: string; commitHash?: string; testMatch?: string; + runner?: string; } export async function run(options: MeasureOptions) { @@ -145,6 +146,11 @@ export const command: CommandModule<{}, MeasureOptions> = { type: 'string', default: undefined, describe: 'Run performance tests for a specific test file', + }) + .option('runner', { + type: 'string', + default: 'jest', + describe: 'Specify which test runner to use. Valid values are: jest (default) and vitest.', }); }, handler: (args) => run(args), From 7b32d9b31eedf124d19d7270d6f0d6751d836ec2 Mon Sep 17 00:00:00 2001 From: Brandon Ly Date: Tue, 31 Oct 2023 08:15:57 -0500 Subject: [PATCH 2/4] Add validaton --- packages/reassure-cli/src/commands/measure.ts | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/reassure-cli/src/commands/measure.ts b/packages/reassure-cli/src/commands/measure.ts index 3d9a907a..2b18127f 100644 --- a/packages/reassure-cli/src/commands/measure.ts +++ b/packages/reassure-cli/src/commands/measure.ts @@ -10,13 +10,15 @@ import { applyCommonOptions, CommonOptions } from '../options'; import { getGitBranch, getGitCommitHash } from '../utils/git'; import { configureLoggerOptions } from '../utils/logger'; +const RUNNERS: string[] = ['jest', 'vitest'] as const; + export interface MeasureOptions extends CommonOptions { + runner: string; // default value is provided so not marking as optional baseline?: boolean; compare?: boolean; branch?: string; commitHash?: string; testMatch?: string; - runner?: string; } export async function run(options: MeasureOptions) { @@ -41,10 +43,17 @@ export async function run(options: MeasureOptions) { const header = { metadata }; writeFileSync(outputFile, JSON.stringify(header) + '\n'); - const testRunnerPath = process.env.TEST_RUNNER_PATH ?? getJestBinPath(); + if (!RUNNERS.includes(options.runner)) { + logger.error(`❌ Invalid runner provided: ${options.runner}. Valid options are 'jest' and 'vitest'`); + process.exitCode = 1; + return; + } + + const testRunnerPath = process.env.TEST_RUNNER_PATH ?? getBinPath(options.runner); + if (!testRunnerPath) { logger.error( - `❌ Unable to find Jest binary path. Pass explicit $TEST_RUNNER_PATH env variable to resolve the issue.` + `❌ Unable to find test runner binary path for ${options.runner}. Pass explicit $TEST_RUNNER_PATH env variable to resolve the issue.` ); process.exitCode = 1; return; @@ -156,6 +165,17 @@ export const command: CommandModule<{}, MeasureOptions> = { handler: (args) => run(args), }; +export function getBinPath(runner: string) { + try { + // eslint-disable-next-line import/no-extraneous-dependencies + const runnerPackageJson = require(`${runner}/package.json`); + const runnerPackagePath = dirname(require.resolve(`${runner}/package.json`)); + return resolve(runnerPackagePath, runnerPackageJson.bin.jest || runnerPackageJson.bin); + } catch (error) { + return null; + } +} + export function getJestBinPath() { try { // eslint-disable-next-line import/no-extraneous-dependencies From 99dda12e1b4cce8d21a6b37cde7b17f94789accb Mon Sep 17 00:00:00 2001 From: Brandon Ly Date: Wed, 1 Nov 2023 17:04:59 -0500 Subject: [PATCH 3/4] Update getBinPath --- packages/reassure-cli/src/commands/measure.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/reassure-cli/src/commands/measure.ts b/packages/reassure-cli/src/commands/measure.ts index 2b18127f..1fb96f94 100644 --- a/packages/reassure-cli/src/commands/measure.ts +++ b/packages/reassure-cli/src/commands/measure.ts @@ -170,7 +170,7 @@ export function getBinPath(runner: string) { // eslint-disable-next-line import/no-extraneous-dependencies const runnerPackageJson = require(`${runner}/package.json`); const runnerPackagePath = dirname(require.resolve(`${runner}/package.json`)); - return resolve(runnerPackagePath, runnerPackageJson.bin.jest || runnerPackageJson.bin); + return resolve(runnerPackagePath, runnerPackageJson.bin['runner'] || runnerPackageJson.bin); } catch (error) { return null; } From bc0825cd527b7a31850e06ede8bd550e8f6aa356 Mon Sep 17 00:00:00 2001 From: Brandon Ly Date: Wed, 1 Nov 2023 17:13:25 -0500 Subject: [PATCH 4/4] Remove getJestBinpath --- packages/reassure-cli/src/commands/measure.ts | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/packages/reassure-cli/src/commands/measure.ts b/packages/reassure-cli/src/commands/measure.ts index 1fb96f94..d87291e1 100644 --- a/packages/reassure-cli/src/commands/measure.ts +++ b/packages/reassure-cli/src/commands/measure.ts @@ -175,14 +175,3 @@ export function getBinPath(runner: string) { return null; } } - -export function getJestBinPath() { - try { - // eslint-disable-next-line import/no-extraneous-dependencies - const jestPackageJson = require('jest/package.json'); - const jestPackagePath = dirname(require.resolve('jest/package.json')); - return resolve(jestPackagePath, jestPackageJson.bin.jest || jestPackageJson.bin); - } catch (error) { - return null; - } -}