CI: clean up cibuildwheel config a bit #2184
Workflow file for this run
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: Test with compiler sanitizers | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
- maintenance/** | |
defaults: | |
run: | |
shell: bash | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
permissions: | |
contents: read # to fetch code (actions/checkout) | |
jobs: | |
clang_ASAN: | |
# To enable this workflow on a fork, comment out: | |
if: github.repository == 'numpy/numpy' | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
submodules: recursive | |
fetch-tags: true | |
persist-credentials: false | |
- name: Set up pyenv | |
run: | | |
git clone https://github.com/pyenv/pyenv.git "$HOME/.pyenv" | |
PYENV_ROOT="$HOME/.pyenv" | |
PYENV_BIN="$PYENV_ROOT/bin" | |
PYENV_SHIMS="$PYENV_ROOT/shims" | |
echo "$PYENV_BIN" >> $GITHUB_PATH | |
echo "$PYENV_SHIMS" >> $GITHUB_PATH | |
echo "PYENV_ROOT=$PYENV_ROOT" >> $GITHUB_ENV | |
- name: Check pyenv is working | |
run: | |
pyenv --version | |
- name: Set up LLVM | |
run: | | |
brew install llvm@19 | |
LLVM_PREFIX=$(brew --prefix llvm@19) | |
echo CC="$LLVM_PREFIX/bin/clang" >> $GITHUB_ENV | |
echo CXX="$LLVM_PREFIX/bin/clang++" >> $GITHUB_ENV | |
echo LDFLAGS="-L$LLVM_PREFIX/lib" >> $GITHUB_ENV | |
echo CPPFLAGS="-I$LLVM_PREFIX/include" >> $GITHUB_ENV | |
- name: Build Python with address sanitizer | |
run: | | |
CONFIGURE_OPTS="--with-address-sanitizer" pyenv install 3.14t | |
pyenv global 3.14t | |
- name: Install dependencies | |
run: | | |
pip install -r requirements/build_requirements.txt | |
pip install -r requirements/ci_requirements.txt | |
pip install -r requirements/test_requirements.txt | |
# xdist captures stdout/stderr, but we want the ASAN output | |
pip uninstall -y pytest-xdist | |
- name: Build | |
run: | |
python -m spin build -j2 -- -Db_sanitize=address | |
- name: Test | |
run: | | |
# pass -s to pytest to see ASAN errors and warnings, otherwise pytest captures them | |
ASAN_OPTIONS=detect_leaks=0:symbolize=1:strict_init_order=true:allocator_may_return_null=1 \ | |
python -m spin test -- -v -s --timeout=600 --durations=10 | |
clang_TSAN: | |
# To enable this workflow on a fork, comment out: | |
if: github.repository == 'numpy/numpy' | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/nascheme/numpy-tsan:3.14t | |
options: --shm-size=2g # increase memory for large matrix ops | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Trust working directory and initialize submodules | |
run: | | |
git config --global --add safe.directory /__w/numpy/numpy | |
git submodule update --init --recursive | |
- name: Uninstall pytest-xdist (conflicts with TSAN) | |
run: pip uninstall -y pytest-xdist | |
- name: Build NumPy with ThreadSanitizer | |
run: python -m spin build -j2 -- -Db_sanitize=thread | |
- name: Run tests under prebuilt TSAN container | |
run: | | |
export TSAN_OPTIONS="halt_on_error=0:allocator_may_return_null=1:suppressions=$GITHUB_WORKSPACE/tools/ci/tsan_suppressions.txt" | |
echo "TSAN_OPTIONS=$TSAN_OPTIONS" | |
python -m spin test \ | |
`find numpy -name "test*.py" | xargs grep -l "import threading" | tr '\n' ' '` \ | |
-- -v -s --timeout=600 --durations=10 |