Skip to content

Merge pull request #25990 from rgommers/azp-cleanup-choco #37

Merge pull request #25990 from rgommers/azp-cleanup-choco

Merge pull request #25990 from rgommers/azp-cleanup-choco #37

Workflow file for this run

name: Linux tests
# This file is meant for testing across supported Python versions, build types
# and interpreters (PyPy, python-dbg, a pre-release Python in summer time),
# build-via-sdist, run benchmarks, measure code coverage, and other build
# options.
on:
push:
branches:
# coverage comparison in the "full" step needs to run on main after merges
- 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:
lint:
# To enable this job and subsequent jobs on a fork, comment out:
if: github.repository == 'numpy/numpy' && github.event_name != 'push'
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
submodules: recursive
fetch-depth: 0
- uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0
with:
python-version: '3.9'
- name: Install linter requirements
run:
python -m pip install -r requirements/linter_requirements.txt
- name: Run linter on PR diff
run:
python tools/linter.py --branch origin/${{ github.base_ref }}
smoke_test:
# To enable this job on a fork, comment out:
if: github.repository == 'numpy/numpy'
runs-on: ubuntu-latest
env:
MESON_ARGS: "-Dallow-noblas=true -Dcpu-baseline=none -Dcpu-dispatch=none"
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
submodules: recursive
fetch-tags: true
- uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0
with:
python-version: '3.9'
- uses: ./.github/meson_actions
pypy:
needs: [smoke_test]
runs-on: ubuntu-latest
if: github.event_name != 'push'
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
submodules: recursive
fetch-tags: true
- uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0
with:
python-version: 'pypy3.9-v7.3.12'
- name: Setup using scipy-openblas
run: |
python -m pip install -r requirements/ci_requirements.txt
spin config-openblas --with-scipy-openblas=32
- uses: ./.github/meson_actions
debug:
needs: [smoke_test]
runs-on: ubuntu-latest
if: github.event_name != 'push'
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
submodules: recursive
fetch-tags: true
- name: Install debug Python
run: |
sudo apt-get update
sudo apt-get install python3-dbg ninja-build
- name: Build NumPy and install into venv
run: |
python3-dbg -m venv venv
source venv/bin/activate
pip install -U pip
pip install . -v -Csetup-args=-Dbuildtype=debug -Csetup-args=-Dallow-noblas=true
- name: Install test dependencies
run: |
source venv/bin/activate
pip install -r requirements/test_requirements.txt
- name: Run test suite
run: |
source venv/bin/activate
cd tools
pytest --pyargs numpy -m "not slow"
full:
# Build a wheel, install it, then run the full test suite with code coverage
needs: [smoke_test]
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
submodules: recursive
fetch-tags: true
- uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0
with:
python-version: '3.9'
- name: Install build and test dependencies from PyPI
run: |
pip install -r requirements/build_requirements.txt
pip install -r requirements/test_requirements.txt
- name: Install gfortran and setup OpenBLAS (MacPython build)
run: |
set -xe
sudo apt update
sudo apt install gfortran libgfortran5
python -m pip install -r requirements/ci32_requirements.txt
mkdir -p ./.openblas
python -c"import scipy_openblas32 as ob32; print(ob32.get_pkg_config())" > ./.openblas/scipy-openblas.pc
- name: Build a wheel
env:
PKG_CONFIG_PATH: ${{ github.workspace }}/.openblas
run: |
python -m build --wheel --no-isolation --skip-dependency-check
pip install dist/numpy*.whl
- name: Run full test suite
run: |
cd tools
pytest --pyargs numpy --cov-report=html:build/coverage
# TODO: gcov
benchmark:
needs: [smoke_test]
runs-on: ubuntu-latest
if: github.event_name != 'push'
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
submodules: recursive
fetch-tags: true
- uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0
with:
python-version: '3.9'
- name: Install build and benchmarking dependencies
run: |
sudo apt-get update
sudo apt-get install libopenblas-dev ninja-build
pip install spin cython asv virtualenv packaging
- name: Install NumPy
run: |
spin build -- -Dcpu-dispatch=none
# Ensure to keep the below steps as single-line bash commands (it's a
# workaround for asv#1333, and it may have side-effects on multi-line commands)
- name: Appease asv's need for machine info
shell: 'script -q -e -c "bash --noprofile --norc -eo pipefail {0}"'
run: |
asv machine --yes --config benchmarks/asv.conf.json
- name: Run benchmarks
shell: 'script -q -e -c "bash --noprofile --norc -eo pipefail {0}"'
run: |
spin bench --quick
sdist:
needs: [smoke_test]
runs-on: ubuntu-latest
if: github.event_name != 'push'
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
submodules: recursive
fetch-tags: true
- uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0
with:
python-version: '3.11'
- name: Install gfortran and setup OpenBLAS (sdist build)
run: |
set -xe
python -m pip install -r requirements/ci_requirements.txt
mkdir -p ./.openblas
python -c"import scipy_openblas64 as ob64; print(ob64.get_pkg_config())" > ./.openblas/scipy-openblas.pc
- name: Build a wheel via an sdist
env:
PKG_CONFIG_PATH: ${{ github.workspace }}/.openblas
run: |
pip install build
python -m build
pip install dist/numpy*.whl
- name: Install test dependencies
run: |
pip install -r requirements/test_requirements.txt
- name: Run test suite
run: |
cd tools
pytest --pyargs numpy -m "not slow"
array_api_tests:
needs: [smoke_test]
runs-on: ubuntu-latest
if: github.event_name != 'push'
steps:
- name: Checkout NumPy
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
submodules: recursive
fetch-tags: true
- name: Checkout array-api-tests
uses: actions/checkout@v4
with:
repository: data-apis/array-api-tests
ref: '9afe8c709d81f005c98d383c82ad5e1c2cd8166c' # Latest commit as of 2023-11-24
submodules: 'true'
path: 'array-api-tests'
- name: Set up Python
uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0
with:
python-version: '3.11'
- name: Install build and test dependencies from PyPI
run: |
python -m pip install -r requirements/build_requirements.txt
python -m pip install -r requirements/test_requirements.txt
python -m pip install -r array-api-tests/requirements.txt
- name: Build and install NumPy
run: |
python -m pip install . -v -Csetup-args=-Dallow-noblas=true -Csetup-args=-Dcpu-baseline=none -Csetup-args=-Dcpu-dispatch=none
- name: Run the test suite
env:
ARRAY_API_TESTS_MODULE: numpy
PYTHONWARNINGS: 'ignore::UserWarning::,ignore::DeprecationWarning::,ignore::RuntimeWarning::'
run: |
cd ${GITHUB_WORKSPACE}/array-api-tests
# remove once https://github.com/data-apis/array-api-tests/pull/217 is merged
touch pytest.ini
pytest array_api_tests -v -c pytest.ini --ci --max-examples=2 --derandomize --disable-deadline --skips-file ${GITHUB_WORKSPACE}/tools/ci/array-api-skips.txt
custom_checks:
needs: [smoke_test]
runs-on: ubuntu-latest
if: github.event_name != 'push'
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
submodules: recursive
fetch-tags: true
- uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0
with:
python-version: '3.11'
- name: Install build and test dependencies from PyPI
run: |
pip install -r requirements/build_requirements.txt
pip install -r requirements/test_requirements.txt
pip install vulture
- name: Build and install NumPy
run: |
# Install using the fastests way to build (no BLAS, no SIMD)
spin build -j2 -- -Dallow-noblas=true -Dcpu-baseline=none -Dcpu-dispatch=none
- name: Check build-internal dependencies
run: |
ninja -C build -t missingdeps
- name: Check installed test and stub files
run: |
python tools/check_installed_files.py $(find ./build-install -path '*/site-packages/numpy')
- name: Check for unreachable code paths in Python modules
run: |
# Need the explicit `bash -c` here because `grep` returns exit code 1 for no matches
bash -c "! vulture . --min-confidence 100 --exclude doc/,numpy/distutils/,vendored-meson/ | grep 'unreachable'"