mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
rustup show always install the profiles set in rust-toolchain.toml, I added an action to remove this line so we can install components selectively. This should reduce Rust installation time, which can be significant on Windows.
146 lines
4.2 KiB
YAML
146 lines
4.2 KiB
YAML
name: Benchmark
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
pull_request:
|
|
paths:
|
|
- './github/workflow/benchmark.yml'
|
|
- 'crates/oxc_parser/**'
|
|
- 'crates/oxc_ast/**'
|
|
- 'crates/oxc_semantic/**'
|
|
- 'tasks/benchmark/**'
|
|
- 'rust-toolchain.toml'
|
|
- '!**/*.md'
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
CARGO_TERM_QUIET: true
|
|
|
|
jobs:
|
|
benchmark:
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest, windows-latest] # `macos-latest` is too unstable to be useful for benchmark, the variance is always huge.
|
|
name: Run benchmark on ${{ matrix.os }}
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
|
|
- name: Install Rust Toolchain
|
|
uses: ./.github/actions/rustup
|
|
|
|
- name: Rust Cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
shared-key: benchmark
|
|
|
|
- name: Cache Benchmark Files # This doesn't speed up things, it is just for saving some bandwidth
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: './target/*.js'
|
|
key: benchmark-files-${{ hashFiles('./tasks/benchmark/src') }}
|
|
|
|
- name: Compile
|
|
run: cargo build --release -p oxc_benchmark
|
|
|
|
- name: Run Bench on PR Branch
|
|
run: cargo benchmark --save-baseline pr
|
|
|
|
- name: Checkout Main Branch
|
|
uses: actions/checkout@v3
|
|
with:
|
|
clean: false
|
|
ref: main
|
|
|
|
- name: Install Rust Toolchain
|
|
uses: ./.github/actions/rustup
|
|
|
|
- name: Compile
|
|
run: cargo build --release -p oxc_benchmark
|
|
|
|
- name: Run Bench on Main Branch
|
|
run: cargo benchmark --save-baseline main
|
|
|
|
- name: Upload benchmark results
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: benchmark-results-${{ matrix.os }}
|
|
path: ./target/criterion
|
|
|
|
- name: Remove Criterion Artifact
|
|
uses: JesseTG/rm@v1.0.3
|
|
with:
|
|
path: ./target/criterion
|
|
|
|
benchmark-compare:
|
|
runs-on: ubuntu-latest
|
|
name: Compare Benchmarks
|
|
needs:
|
|
- benchmark
|
|
|
|
steps:
|
|
- name: Install critcmp
|
|
uses: taiki-e/install-action@v2
|
|
with:
|
|
tool: critcmp
|
|
|
|
- name: Linux | Download PR benchmark results
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: benchmark-results-ubuntu-latest
|
|
path: ./target/criterion
|
|
|
|
- name: Linux | Compare benchmark results
|
|
shell: bash
|
|
run: |
|
|
echo "## Benchmark Results" >> summary.md
|
|
echo "### Linux" >> summary.md
|
|
echo "\`\`\`" >> summary.md
|
|
critcmp main pr >> summary.md
|
|
echo "\`\`\`" >> summary.md
|
|
echo "" >> summary.md
|
|
|
|
- name: Linux | Cleanup benchmark results
|
|
run: rm -rf ./target/criterion
|
|
|
|
- name: Windows | Download PR benchmark results
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: benchmark-results-windows-latest
|
|
path: ./target/criterion
|
|
|
|
- name: Windows | Compare benchmark results
|
|
shell: bash
|
|
run: |
|
|
echo "### Windows" >> summary.md
|
|
echo "\`\`\`" >> summary.md
|
|
critcmp main pr >> summary.md
|
|
echo "\`\`\`" >> summary.md
|
|
echo "" >> summary.md
|
|
cat summary.md > $GITHUB_STEP_SUMMARY
|
|
|
|
- name: Find Comment
|
|
# Check if the event is not triggered by a fork
|
|
if: github.event.pull_request.head.repo.full_name == github.repository
|
|
uses: peter-evans/find-comment@v2
|
|
id: fc
|
|
with:
|
|
issue-number: ${{ github.event.pull_request.number }}
|
|
comment-author: 'github-actions[bot]'
|
|
body-includes: Benchmark Results
|
|
|
|
- name: Create or update comment
|
|
# Check if the event is not triggered by a fork
|
|
if: github.event.pull_request.head.repo.full_name == github.repository
|
|
uses: peter-evans/create-or-update-comment@v2
|
|
with:
|
|
issue-number: ${{ github.event.pull_request.number }}
|
|
edit-mode: replace
|
|
comment-id: ${{ steps.fc.outputs.comment-id }}
|
|
body-file: summary.md
|