feat(transformer/react): support development mode #8104
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Benchmark | |
on: | |
workflow_dispatch: | |
pull_request: | |
types: [opened, synchronize] | |
paths: | |
- '**/*.rs' | |
- 'napi/parser/**/*.js' | |
- 'napi/parser/**/*.mjs' | |
- 'Cargo.lock' | |
- '.github/workflows/benchmark.yml' | |
- 'tasks/benchmark/codspeed/*.mjs' | |
push: | |
branches: | |
- main | |
paths: | |
- '**/*.rs' | |
- 'napi/parser/**/*.js' | |
- 'napi/parser/**/*.mjs' | |
- 'Cargo.lock' | |
- '.github/workflows/benchmark.yml' | |
- 'tasks/benchmark/codspeed/*.mjs' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} | |
cancel-in-progress: true | |
jobs: | |
build: | |
name: Build Benchmark | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Branch | |
uses: taiki-e/checkout-action@v1 | |
- name: Install Rust Toolchain | |
uses: ./.github/actions/rustup | |
with: | |
shared-key: 'benchmark' | |
save-cache: ${{ github.ref_name == 'main' }} | |
- name: Build benchmark | |
env: | |
RUSTFLAGS: "-C debuginfo=1 -C strip=none -g --cfg codspeed" | |
shell: bash | |
run: | | |
cargo build --release -p oxc_benchmark --benches --features codspeed | |
rm target/release/deps/*.d | |
mkdir -p target/codspeed/oxc_benchmark/ | |
mv target/release/deps/lexer-* target/codspeed/oxc_benchmark/lexer | |
mv target/release/deps/parser-* target/codspeed/oxc_benchmark/parser | |
mv target/release/deps/transformer-* target/codspeed/oxc_benchmark/transformer | |
mv target/release/deps/semantic-* target/codspeed/oxc_benchmark/semantic | |
mv target/release/deps/minifier-* target/codspeed/oxc_benchmark/minifier | |
mv target/release/deps/codegen_sourcemap-* target/codspeed/oxc_benchmark/codegen_sourcemap | |
mv target/release/deps/sourcemap-* target/codspeed/oxc_benchmark/sourcemap | |
mv target/release/deps/linter-* target/codspeed/oxc_benchmark/linter | |
- name: Upload Binary | |
uses: actions/upload-artifact@v4 | |
with: | |
if-no-files-found: error | |
name: benchmark | |
path: ./target/codspeed/oxc_benchmark | |
benchmark: | |
needs: build | |
name: Benchmark | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: true | |
matrix: | |
component: | |
- lexer | |
- parser | |
- transformer | |
- semantic | |
- minifier | |
- codegen_sourcemap | |
- sourcemap | |
- linter | |
steps: | |
- name: Checkout Branch | |
uses: taiki-e/checkout-action@v1 | |
- name: Download Artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: benchmark | |
path: ./target/codspeed/oxc_benchmark | |
- name: Fix permission loss | |
shell: bash | |
run: | | |
ls ./target/codspeed/oxc_benchmark | |
chmod +x ./target/codspeed/oxc_benchmark/${{ matrix.component }} | |
- name: Install codspeed | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: cargo-codspeed | |
- name: Install Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
registry-url: 'https://registry.npmjs.org' | |
- name: Start bench results interceptor server | |
working-directory: ./tasks/benchmark/codspeed | |
env: | |
COMPONENT: ${{ matrix.component }} | |
run: | | |
corepack enable | |
pnpm install | |
node capture.mjs & | |
- name: Run benchmark | |
uses: CodSpeedHQ/action@v2 | |
timeout-minutes: 30 | |
with: | |
# Dummy token for tokenless runs, to suppress logging hash of metadata JSON (see `upload.mjs`) | |
token: ${{ secrets.CODSPEED_TOKEN || 'dummy' }} | |
upload-url: http://localhost:${{ env.INTERCEPT_PORT }}/upload | |
run: cargo codspeed run ${{ matrix.component }} | |
- name: Upload bench data artefact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: result-${{ matrix.component }} | |
path: ${{ env.DATA_DIR }} # # env.DEFAULT_PORT from capture.mjs | |
if-no-files-found: error | |
retention-days: 1 | |
# benchmark-napi: | |
# name: Benchmark NAPI parser | |
# runs-on: ubuntu-latest | |
# if: false | |
# steps: | |
# - name: Checkout Branch | |
# uses: taiki-e/checkout-action@v1 | |
# - name: Install Rust Toolchain | |
# uses: ./.github/actions/rustup | |
# with: | |
# shared-key: 'benchmark_napi' | |
# save-cache: ${{ github.ref_name == 'main' }} | |
# - name: Install codspeed | |
# uses: taiki-e/install-action@v2 | |
# with: | |
# tool: cargo-codspeed | |
# - name: Install Node.js | |
# uses: actions/setup-node@v4 | |
# with: | |
# node-version: 20 | |
# registry-url: 'https://registry.npmjs.org' | |
# - name: Start bench results interceptor server | |
# working-directory: ./tasks/benchmark/codspeed | |
# env: | |
# COMPONENT: 'parser_napi' | |
# run: | | |
# corepack enable | |
# pnpm install | |
# node capture.mjs & | |
# # CodSpeed gets measurements completely off for NAPI if run in `CodSpeedHQ/action`, | |
# # so instead run real benchmark without CodSpeed's instrumentation and save the results. | |
# # Then "Run Rust benchmark" step below runs a loop of some simple Rust code the number | |
# # of times required to take same amount of time as the real benchmark took. | |
# # This is all a workaround for https://github.com/CodSpeedHQ/action/issues/96 | |
# - name: Build NAPI Benchmark | |
# working-directory: ./napi/parser | |
# run: | | |
# corepack enable | |
# pnpm install | |
# pnpm build | |
# - name: Run NAPI Benchmark | |
# working-directory: ./napi/parser | |
# run: node parse.bench.mjs | |
# - name: Build Rust benchmark | |
# env: | |
# RUSTFLAGS: "-C debuginfo=2 -C strip=none -g --cfg codspeed" | |
# shell: bash | |
# run: | | |
# cargo build --release -p oxc_benchmark --bench parser_napi --no-default-features --features codspeed_napi | |
# mkdir -p target/codspeed/oxc_benchmark/ | |
# mv target/release/deps/parser_napi-* target/codspeed/oxc_benchmark | |
# rm -rf target/codspeed/oxc_benchmark/*.d | |
# - name: Run Rust benchmark | |
# uses: CodSpeedHQ/action@v2 | |
# timeout-minutes: 30 | |
# with: | |
# run: cargo codspeed run | |
# # Dummy token for tokenless runs, to suppress logging hash of metadata JSON (see `upload.mjs`) | |
# token: ${{ secrets.CODSPEED_TOKEN || 'dummy' }} | |
# upload-url: http://localhost:${{ env.INTERCEPT_PORT }}/upload | |
# - name: Upload bench data artefact | |
# uses: actions/upload-artifact@v4 | |
# with: | |
# name: 'parser_napi' | |
# path: ${{ env.DATA_DIR }} | |
# if-no-files-found: error | |
# retention-days: 1 | |
upload: | |
name: Upload benchmarks | |
# needs: [benchmark, benchmark-napi] | |
needs: [benchmark] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Branch | |
uses: taiki-e/checkout-action@v1 | |
- name: Install Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
registry-url: 'https://registry.npmjs.org' | |
- name: Create temp dir | |
working-directory: ./tasks/benchmark/codspeed | |
run: | | |
corepack enable | |
pnpm install | |
node create_temp_dir.mjs | |
- name: Download artefacts | |
uses: actions/download-artifact@v4 | |
with: | |
merge-multiple: true | |
pattern: result-* | |
path: ${{ env.DATA_DIR }} # env.DEFAULT_PORT from create_temp_dir.mjs | |
- name: Upload to Codspeed | |
working-directory: ./tasks/benchmark/codspeed | |
env: | |
CODSPEED_TOKEN: ${{ secrets.CODSPEED_TOKEN }} | |
run: node upload.mjs |