diff --git a/.github/workflows/benchmark-tests.yml b/.github/workflows/benchmark-tests.yml new file mode 100644 index 0000000000..52f4d07970 --- /dev/null +++ b/.github/workflows/benchmark-tests.yml @@ -0,0 +1,38 @@ +name: Benchmark Tests + +on: + workflow_dispatch: + schedule: + - cron: '0 10 * * 1' + +env: + # Enable versioned runner quiet mode to make CI output easier to read: + OUTPUT_MODE: quiet + +jobs: + benchmarks: + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + node-version: [16.x, 18.x, 20.x, 22.x] + + steps: + - uses: actions/checkout@v4 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + - name: Install Dependencies + run: npm install + - name: Run Benchmark Tests + run: node ./bin/run-bench.js --filename=${{ github.base_ref || 'main' }}_${{ matrix.node-version }} + - name: Verify Benchmark Output + run: ls benchmark_results + - name: Archive Benchmark Test + uses: actions/upload-artifact@v4 + with: + name: benchmark-tests-${{ github.base_ref || 'main' }}-${{ matrix.node-version }} + path: ./benchmark_results + diff --git a/bin/run-bench.js b/bin/run-bench.js index 08d02cb022..bc2f0e7dda 100644 --- a/bin/run-bench.js +++ b/bin/run-bench.js @@ -20,7 +20,11 @@ const globs = [] const opts = Object.create(null) process.argv.slice(2).forEach(function forEachFileArg(file) { - if (/^--/.test(file)) { + if (/^--/.test(file) && file.indexOf('=') > -1) { + // this one has a value assigned + const arg = file.substring(2).split('=') + opts[arg[0]] = arg[1] + } else if (/^--/.test(file)) { opts[file.substring(2)] = true } else if (/[*]/.test(file)) { globs.push(path.join(benchpath, file)) @@ -69,13 +73,14 @@ class Printer { /* eslint-enable no-console */ } const resultPath = 'benchmark_results' + const filePrefix = opts.filename ? `${opts.filename}` : 'benchmark' try { await fs.stat(resultPath) } catch (e) { await fs.mkdir(resultPath) } const content = JSON.stringify(this._tests, null, 2) - const fileName = `${resultPath}/benchmark_${new Date().getTime()}.json` + const fileName = `${resultPath}/${filePrefix}_${new Date().getTime()}.json` await fs.writeFile(fileName, content) console.log(`Done! Test output written to ${fileName}`) }