diff --git a/.github/workflows/bench.yaml b/.github/workflows/bench.yaml new file mode 100644 index 00000000..1535c312 --- /dev/null +++ b/.github/workflows/bench.yaml @@ -0,0 +1,76 @@ +name: Benchmark + +on: + pull_request: + +jobs: + bench: + name: Bench + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: 14 + + - name: Install + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + profile: default + override: true + + - name: Generate Cargo.lock + uses: actions-rs/cargo@v1 + with: + command: generate-lockfile + + - name: Cache cargo registry + uses: actions/cache@v1 + with: + path: ~/.cargo/registry + key: bench-cargo-registry-trimmed-${{ hashFiles('**/Cargo.lock') }} + + - name: Cache cargo index + uses: actions/cache@v1 + with: + path: ~/.cargo/git + key: bench-cargo-index-trimmed-${{ hashFiles('**/Cargo.lock') }} + + - name: Cache NPM dependencies + uses: actions/cache@v1 + with: + path: node_modules + key: bench-${{ hashFiles('yarn.lock') }} + restore-keys: | + npm-cache- + + - name: 'Install dependencies' + run: yarn install --frozen-lockfile --registry https://registry.npmjs.org + + - name: 'Build ts' + run: yarn build + + - name: 'Build bench' + run: yarn build:bench + + - name: 'Run benchmark' + run: yarn bench + + - name: Store benchmark result + uses: rhysd/github-action-benchmark@v1 + with: + tool: 'benchmarkjs' + output-file-path: bench.txt + comment-on-alert: true + github-token: ${{ secrets.GH_TOKEN }} + auto-push: true + comment-always: true + + - name: Clear the cargo caches + run: | + cargo install cargo-cache --no-default-features --features ci-autoclean + cargo-cache diff --git a/.gitignore b/.gitignore index 76557bf1..440b7098 100644 --- a/.gitignore +++ b/.gitignore @@ -156,4 +156,5 @@ Temporary Items # End of https://www.gitignore.io/api/macos scripts -sys/.node-headers \ No newline at end of file +sys/.node-headers +bench.txt diff --git a/bench/bench.ts b/bench/bench.ts index 984fd4f2..70e16588 100644 --- a/bench/bench.ts +++ b/bench/bench.ts @@ -1,11 +1,27 @@ +import { promises as fs } from 'fs' +import { join } from 'path' + +import { Summary } from 'benny/lib/internal/common-types' + import { benchAsync } from './async' import { benchNoop } from './noop' import { benchPlus } from './plus' async function run() { - await benchNoop() - await benchPlus() - await benchAsync() + const output = [await benchNoop(), await benchPlus(), await benchAsync()] + .map(formatSummary) + .join('\n') + + await fs.writeFile(join(process.cwd(), 'bench.txt'), output, 'utf8') +} + +function formatSummary(summary: Summary): string { + return summary.results + .map( + (result) => + `${summary.name}#${result.name} x ${result.ops} ops/sec ±${result.margin}% (${result.samples} runs sampled)`, + ) + .join('\n') } run().catch((e) => {