// eslint-disable-next-line no-undef const util = require('util'); // eslint-disable-next-line no-undef const exec = util.promisify(require('child_process').exec); // Get items from `git diff develop' void (async () => { const { stdout: allFileNames } = await exec('git diff --name-only origin/develop'); // return if no changed file ends with .js const testFilesInChangedFiles = allFileNames .split('\n') .filter(fileName => fileName.endsWith('.spec.ts')) .filter(fileName => fileName.startsWith('+')); // Only get newly added files if (testFilesInChangedFiles.length === 0) { console.log('No test file changed, skipping stress test'); return; } const { stdout } = await exec(`git diff origin/develop -- **/*.spec.ts | grep test\\( | cat`); // eslint-disable-next-line no-undef const dbType = process.env.E2E_DB_TYPE; // get test names which is in the form of `+ test('test name', () => {' const testNames = stdout .match(/\+ {2}test\('(.*)',/g) // extract test name by removing `+ test('` and `',*` .map(testName => testName.replace("test('", '').trimEnd().slice(0, -2).slice(1, testName.length).trim()); console.log({ dbType, testNames }); // run all the tests by title using regex with exact match const { stdout: pwStdout } = await exec( `PLAYWRIGHT_HTML_REPORT=playwright-report-stress E2E_DB_TYPE=${dbType} pnpm exec playwright test --repeat-each=2 --workers=2 -g "${testNames.join( '|' )}"` ); console.log('pwStdout:', pwStdout); })();