Skip to content

chore: use custom node build #582

chore: use custom node build

chore: use custom node build #582

Workflow file for this run

name: CodSpeed
on:
push:
branches:
- "main"
pull_request:
workflow_dispatch:
permissions:
contents: read
id-token: write
jobs:
codspeed-instrumented:
name: Run CodSpeed instrumented (${{ matrix.plugin }})
runs-on: "ubuntu-latest"
strategy:
fail-fast: false
# Shard by plugin so the benchmark groups run in parallel instead of
# sequentially. CodSpeed aggregates the per-shard uploads on the commit.
matrix:
include:
- plugin: tinybench
bench: |
pnpm turbo run bench --filter=@codspeed/tinybench-plugin
pnpm --workspace-concurrency 1 -r bench-tinybench
- plugin: vitest
bench: |
pnpm turbo run bench --filter=@codspeed/vitest-plugin
pnpm --workspace-concurrency 1 -r bench-vitest
- plugin: benchmark.js
bench: |
pnpm turbo run bench --filter=@codspeed/benchmark.js-plugin
pnpm --workspace-concurrency 1 -r bench-benchmark-js
steps:
- uses: "actions/checkout@v4"
with:
fetch-depth: 0
submodules: true
- uses: pnpm/action-setup@v2
- uses: actions/setup-node@v3
with:
cache: pnpm
node-version-file: .nvmrc
- name: Restore turbo cache
uses: ./.github/actions/turbo-cache
with:
key-suffix: ${{ matrix.plugin }}
- run: pnpm install --frozen-lockfile --prefer-offline
- run: pnpm turbo run build
- name: Run simulation benchmarks
uses: CodSpeedHQ/action@main
with:
mode: simulation
run: ${{ matrix.bench }}
- name: Run memory benchmarks
uses: CodSpeedHQ/action@main
with:
mode: memory
run: ${{ matrix.bench }}
codspeed-walltime:
name: Run CodSpeed walltime
runs-on: "codspeed-macro"
env:
# The custom Node build below is v24, but the repo pins engines.node to
# v20 with engine-strict. Relax the check for this job so pnpm install
# accepts the custom Node; the runtime itself is compatible.
npm_config_engine_strict: "false"
steps:
- uses: "actions/checkout@v4"
with:
fetch-depth: 0
submodules: true
- uses: pnpm/action-setup@v2
- uses: actions/setup-node@v3
with:
cache: pnpm
node-version-file: .nvmrc
# Custom Node build with the V8 walltime-profiling patches (COD-2819,
# COD-2820) on top of v24.15.0. Prepended to PATH so the CodSpeed runner's
# `which node` resolves to it instead of the setup-node toolchain.
- name: Install custom Node build
env:
NODE_URL: https://github.com/GuillaumeLagrange/node/releases/download/v24.15.0-codspeed/node-v24.15.0-codspeed-linux-arm64.gz
NODE_SHA256: cc5501e713a88632d57a636ae9a0784fc78713056cd6caacc4e16df7b6a24721
run: |
mkdir -p "$RUNNER_TEMP/custom-node"
curl -fsSL "$NODE_URL" -o "$RUNNER_TEMP/custom-node/node.gz"
echo "$NODE_SHA256 $RUNNER_TEMP/custom-node/node.gz" | sha256sum -c -
gunzip -f "$RUNNER_TEMP/custom-node/node.gz"
chmod +x "$RUNNER_TEMP/custom-node/node"
echo "$RUNNER_TEMP/custom-node" >> "$GITHUB_PATH"
- name: Verify custom Node is on PATH
run: |
which node
node --version
node --interpreted-frames-native-stack -e "console.log('custom node ok:', process.version, process.versions.v8)"
- name: Restore turbo cache
uses: ./.github/actions/turbo-cache
- run: pnpm install --frozen-lockfile --prefer-offline
- run: pnpm turbo run build
- name: Run benchmarks
uses: CodSpeedHQ/action@3ab7a45ef04699335fd451268f4080ff83cc4ea5 # main
env:
CODSPEED_WALLTIME_PROFILER: samply
with:
runner-version: "v4.17.6-alpha.7"
mode: walltime
run: |
pnpm turbo run bench --filter=@codspeed/tinybench-plugin
pnpm turbo run bench --filter=@codspeed/vitest-plugin
pnpm turbo run bench --filter=@codspeed/benchmark.js-plugin
pnpm --workspace-concurrency 1 -r bench-tinybench
pnpm --workspace-concurrency 1 -r bench-vitest
codspeed-walltime-macos:
runs-on: macos-latest
steps:
- uses: "actions/checkout@v4"
with:
fetch-depth: 0
submodules: true
- uses: pnpm/action-setup@v2
- uses: actions/setup-node@v3
with:
cache: pnpm
node-version-file: .nvmrc
- name: Restore turbo cache
uses: ./.github/actions/turbo-cache
- run: pnpm install --frozen-lockfile --prefer-offline
- run: pnpm turbo run build
- name: Run macOS-only benchmarks
uses: CodSpeedHQ/action@main
with:
working-directory: packages/vitest-plugin
# Only run the macOS-only bench file: the rest of the suite already
# runs on the linux walltime job, and uploading the same benchmark
# twice for one commit is not supported.
run: pnpm turbo run bench --env-mode=loose --filter=@codspeed/vitest-plugin -- macos
mode: walltime
runner-version: latest
electron-e2e:
name: Run electron inbox e2e
runs-on: codspeed-macro
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: true
- name: Set up pnpm
uses: pnpm/action-setup@v4
# The example links @codspeed/playwright-plugin to packages/playwright-plugin via the
# `link:` protocol, so the in-repo plugin must be built (under the repo's
# own Node version) before the example installs and resolves the symlink.
- name: Set up Node.js (repo)
uses: actions/setup-node@v6
with:
node-version-file: .nvmrc
cache: pnpm
- name: Restore turbo cache
uses: ./.github/actions/turbo-cache
- name: Install repo dependencies
run: pnpm install --frozen-lockfile --prefer-offline
- name: Build @codspeed/playwright-plugin
run: pnpm turbo run build --filter=@codspeed/playwright-plugin
- name: Set up Node.js (example)
uses: actions/setup-node@v6
with:
node-version-file: examples/with-electron-and-walltime/package.json
cache: pnpm
cache-dependency-path: examples/with-electron-and-walltime/pnpm-lock.yaml
- name: Install dependencies
working-directory: examples/with-electron-and-walltime
run: pnpm install --frozen-lockfile
- name: Build electron app
working-directory: examples/with-electron-and-walltime
run: pnpm --filter @mail-client-demo/electron build
- name: Run electron inbox e2e under codspeed
uses: CodSpeedHQ/action@main
env:
CODSPEED_WALLTIME_PROFILER: "samply"
with:
working-directory: examples/with-electron-and-walltime
run: xvfb-run -a pnpm bench:electron
mode: walltime