chore: use custom node build #582
This file contains hidden or 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: 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 |