Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 113 additions & 0 deletions .github/workflows/stress-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
name: Stress Test

on:
workflow_dispatch:
inputs:
test_path:
description: 'Test path or glob (e.g. test/parallel/test-debugger-break.js or "test/parallel/test-debugger-*")'
required: true
type: string
os:
description: 'Runner to use'
required: true
default: macos-15
type: choice
options:
- macos-15
- ubuntu-24.04
- ubuntu-24.04-arm
repeat:
description: 'Number of times to repeat each test (--repeat)'
required: true
default: '1000'
type: string
test_jobs:
description: 'Number of jobs to run in parallel (-j).'
required: true
default: '1'
type: string
test_args:
description: 'Extra args for tools/test.py, space-separated (e.g. "-t 10 --worker")'
required: false
default: ''
type: string

env:
PYTHON_VERSION: '3.14'
XCODE_VERSION: '16.4'
CLANG_VERSION: '19'
RUSTC_VERSION: '1.82'

permissions:
contents: read

jobs:
stress-test:
runs-on: ${{ inputs.os }}
env:
# Linux builds with clang (matching test-linux.yml), macOS with gcc/g++.
CC: ${{ startsWith(inputs.os, 'ubuntu') && 'sccache clang-19' || 'sccache gcc' }}
CXX: ${{ startsWith(inputs.os, 'ubuntu') && 'sccache clang++-19' || 'sccache g++' }}
SCCACHE_GHA_ENABLED: ${{ github.base_ref == 'main' || github.ref_name == 'main' }}
SCCACHE_IDLE_TIMEOUT: '0'
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
path: node
- name: Install Clang ${{ env.CLANG_VERSION }}
if: runner.os == 'Linux'
uses: ./node/.github/actions/install-clang
with:
clang-version: ${{ env.CLANG_VERSION }}
- name: Set up Xcode ${{ env.XCODE_VERSION }}
if: runner.os == 'macOS'
run: sudo xcode-select -s /Applications/Xcode_${{ env.XCODE_VERSION }}.app
- name: Set up Python ${{ env.PYTHON_VERSION }}
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: ${{ env.PYTHON_VERSION }}
allow-prereleases: true
- name: Install Rust ${{ env.RUSTC_VERSION }}
run: |
rustup override set "$RUSTC_VERSION"
rustup --version
- name: Set up sccache
uses: Mozilla-Actions/sccache-action@9e7fa8a12102821edf02ca5dbea1acd0f89a2696 # v0.0.10
with:
version: v0.16.0
Comment on lines +75 to +78

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this runs infrequently then we may not get any benefit from sccache, unless it's the sort of thing that might be re-run several times in succession?

@joyeecheung joyeecheung Jun 25, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typically this would get multiple runs, e.g. one from main branch and one from PR branch, for comparison, and I think during verification it's likely to run a couple of attempts while it's being iterated on (e.g. this fix didn't make the flake go away, how about a different one, or there are several attempts to try to log more things for clues in the same PR/branch).

- name: Environment Information
run: npx envinfo@7.21.0
# This is needed due to https://github.com/nodejs/build/issues/3878
- name: Cleanup
if: runner.os == 'macOS'
run: |
echo "::group::Free space before cleanup"
df -h
echo "::endgroup::"
echo "::group::Cleaned Files"

sudo rm -rf /Users/runner/Library/Android/sdk

echo "::endgroup::"
echo "::group::Free space after cleanup"
df -h
echo "::endgroup::"
- name: Build
run: make -C node build-ci -j"$(getconf _NPROCESSORS_ONLN)" V=1 CONFIG_FLAGS="--error-on-warn --v8-enable-temporal-support"
- name: Stress run ${{ inputs.test_path }} x${{ inputs.repeat }}
shell: bash
env:
REPEAT: ${{ inputs.repeat }}
JOBS: ${{ inputs.test_jobs }}
TEST_ARGS: ${{ inputs.test_args }}
TEST_PATH: ${{ inputs.test_path }}
run: |
cd node
read -ra EXTRA_ARGS <<< "$TEST_ARGS"
python3 tools/test.py \
--repeat "$REPEAT" \
-j "$JOBS" \
-p actions \
"${EXTRA_ARGS[@]}" \
"$TEST_PATH"
Loading