Skip to content

Commit 8c1cea9

Browse files
committed
tools: add benchmark runner to test-shared
1 parent ad71790 commit 8c1cea9

File tree

2 files changed

+91
-6
lines changed

2 files changed

+91
-6
lines changed

.github/workflows/test-shared.yml

Lines changed: 91 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Test Shared librairies
1+
name: Benchmark and shared librairies
22

33
on:
44
pull_request:
@@ -19,6 +19,30 @@ on:
1919
- README.md
2020
- .github/**
2121
- '!.github/workflows/test-shared.yml'
22+
workflow_dispatch:
23+
inputs:
24+
repo:
25+
type: string
26+
description: 'GitHub repository to fetch from (default to the current repo)'
27+
pr_id:
28+
type: number
29+
required: true
30+
description: 'The PR to test'
31+
commit:
32+
required: true
33+
type: string
34+
description: 'The expect HEAD of the PR'
35+
category:
36+
required: true
37+
type: string
38+
description: The category (or categories) of tests to run, for example buffers, cluster etc. Maps to a folders in node/benchmark
39+
filter:
40+
type: string
41+
description: A substring to restrict the benchmarks to run in a category. e.g. `net-c2c`
42+
runs:
43+
type: number
44+
default: 30
45+
description: How many times to repeat each benchmark
2246

2347
concurrency:
2448
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
@@ -44,12 +68,28 @@ jobs:
4468
system: aarch64-linux
4569
- runner: macos-13
4670
system: x86_64-darwin
47-
- runner: macos-14
71+
- runner: macos-latest
4872
system: aarch64-darwin
4973
name: '${{ matrix.system }}: with shared libraries'
5074
runs-on: ${{ matrix.runner }}
5175
steps:
5276
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
77+
if: ${{ github.event_name != 'workflow_dispatch' }}
78+
79+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
80+
if: ${{ github.event_name == 'workflow_dispatch' }}
81+
with:
82+
repository: ${{ inputs.repo || github.repository }}
83+
ref: refs/pull/${{ inputs.pr_id }}/merge
84+
fetch-depth: 2
85+
86+
- name: Validate PR head and roll back to base commit
87+
if: ${{ github.event_name == 'workflow_dispatch' }}
88+
run: |
89+
[ "$(git rev-parse HEAD^2)" = "$EXPECTED_SHA" ]
90+
git reset HEAD^ --hard
91+
env:
92+
EXPECTED_SHA: ${{ inputs.commit }}
5393

5494
- uses: cachix/install-nix-action@f0fe604f8a612776892427721526b4c7cfb23aba # v31
5595
with:
@@ -71,10 +111,15 @@ jobs:
71111
core.exportVariable('ACTIONS_RESULTS_URL', process.env.ACTIONS_RESULTS_URL || '');
72112
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
73113
74-
- name: Patch npm gyp
114+
- name: Patch npm gyp (to be able to build addons for the tests)
115+
if: ${{ github.event_name != 'workflow_dispatch' }}
75116
run: curl -L https://github.com/npm/cli/pull/8531.diff | git apply --directory=deps/npm --exclude=deps/npm/package-lock.json
117+
118+
- name: Load shell.nix
119+
if: ${{ github.event_name == 'workflow_dispatch' }}
120+
run: curl -fsLSO https://github.com/${GITHUB_REPOSITORY}/raw/${GITHUB_SHA}/shell.nix
76121

77-
- name: Build Node.js and run tests
122+
- name: Build Node.js ${{ github.event_name == 'workflow_dispatch' && 'on the base commit' || 'and run tests' }}
78123
run: |
79124
nix-shell \
80125
--pure --keep FLAKY_TESTS \
@@ -84,5 +129,46 @@ jobs:
84129
--arg devTools '[]' \
85130
--arg benchmarkTools '[]' \
86131
--run '
87-
make run-ci -j4 V=1 TEST_CI_ARGS="-p actions --measure-flakiness 9 --skip-tests=$CI_SKIP_TESTS"
132+
make ${{ github.event_name == 'workflow_dispatch' && 'build' || 'run' }}-ci -j4 V=1 TEST_CI_ARGS="-p actions --measure-flakiness 9 --skip-tests=$CI_SKIP_TESTS"
133+
'
134+
135+
- name: Re-build Node.js on the merge commit
136+
# ccache is disabled here to avoid polluting the cache. Local build outputs should make this build relatively quick anyway.
137+
if: ${{ github.event_name == 'workflow_dispatch' }}
138+
run: |
139+
mv out/Release/node base_node
140+
git reset FETCH_HEAD --hard
141+
nix-shell \
142+
--pure \
143+
--arg loadJSBuiltinsDynamically false \
144+
--arg ccache 'null' \
145+
--arg devTools '[]' \
146+
--arg benchmarkTools '[]' \
147+
--run '
148+
make -j4 V=1
149+
'
150+
151+
- name: Run benchmark
152+
if: ${{ github.event_name == 'workflow_dispatch' }}
153+
run: |
154+
nix-shell \
155+
--pure --keep FILTER \
156+
--arg loadJSBuiltinsDynamically false \
157+
--arg ccache 'null' \
158+
--arg devTools '[]' \
159+
--option download-buffer-size "$NIX_DOWNLOAD_BUFFER_SIZE" \
160+
--run '
161+
set -exo pipefail
162+
./base_node benchmark/compare.js \
163+
--filter "$FILTER" \
164+
--runs ${{ inputs.runs }} \
165+
--old ./base_node --new ./node \
166+
-- ${{ inputs.category }} \
167+
| tee /dev/stderr \
168+
| Rscript benchmark/compare.R
88169
'
170+
env:
171+
FILTER: ${{ inputs.filter }}
172+
NIX_DOWNLOAD_BUFFER_SIZE: 536870912 # 512 MiB
173+
174+

shell.nix

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ pkgs.mkShell {
9191
shellHook = if (ccache != null) then ''
9292
export CC="${pkgs.lib.getExe ccache} $CC"
9393
export CXX="${pkgs.lib.getExe ccache} $CXX"
94-
ls "${pkgs.lib.getLib sharedLibDeps.uvwasi}"
9594
'' else "";
9695

9796
BUILD_WITH = if (ninja != null) then "ninja" else "make";

0 commit comments

Comments
 (0)