Skip to content

AML-146 Exclude unnecessary builds #2

AML-146 Exclude unnecessary builds

AML-146 Exclude unnecessary builds #2

Workflow file for this run

name: Linux Meson tests
# This is a single job: Python 3.9, building with Meson, using -Werror to
# ensure we remain at zero build warnings. Other Meson CI jobs are running
# on https://github.com/rgommers/scipy/tree/meson
on:
push:
branches:
- main
- maintenance/**
pull_request:
branches:
- main
- maintenance/**
permissions:
contents: read # to fetch code (actions/checkout)
env:
CCACHE_DIR: "${{ github.workspace }}/.ccache"
INSTALLDIR: "build-install"
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
test_meson:
name: Meson build
# If using act to run CI locally the github object does not exist and the usual skipping should not be enforced
if: "github.repository == 'scipy/scipy' || github.repository == ''"
runs-on: ubuntu-22.04
strategy:
matrix:
python-version: ['3.9', '3.11-dev']
maintenance-branch:
- ${{ contains(github.ref, 'maintenance/') || contains(github.base_ref, 'maintenance/') }}
exclude:
- maintenance-branch: true
python-version: '3.11-dev'
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: 'environment.yml'
- name: Install Ubuntu dependencies
run: |
# NOTE: not the same OpenBLAS version as in upstream CI (I'm being lazy here)
sudo apt-get update
sudo apt-get install -y libopenblas-dev libatlas-base-dev liblapack-dev gfortran libgmp-dev libmpfr-dev libsuitesparse-dev ccache libmpc-dev
- name: Install Python packages
if: matrix.python-version == '3.9'
run: |
python -m pip install numpy cython pytest pytest-xdist pytest-timeout pybind11 mpmath gmpy2 pythran ninja meson click rich-click doit pydevtool pooch
- name: Install Python packages from repositories
if: matrix.python-version == '3.11-dev'
run: |
python -m pip install git+https://github.com/numpy/numpy.git
python -m pip install ninja cython pytest pybind11 pytest-xdist pytest-timeout click rich-click doit pydevtool pooch
python -m pip install git+https://github.com/serge-sans-paille/pythran.git
python -m pip install git+https://github.com/mesonbuild/meson.git
- name: Prepare compiler cache
id: prep-ccache
shell: bash
run: |
mkdir -p "${CCACHE_DIR}"
echo "dir=$CCACHE_DIR" >> $GITHUB_OUTPUT
NOW=$(date -u +"%F-%T")
echo "timestamp=${NOW}" >> $GITHUB_OUTPUT
- name: Setup compiler cache
uses: actions/cache@v3
id: cache-ccache
# Reference: https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows#matching-a-cache-key
# NOTE: The caching strategy is modeled in a way that it will always have a unique cache key for each workflow run
# (even if the same workflow is run multiple times). The restore keys are not unique and for a partial match, they will
# return the most recently created cache entry, according to the GitHub Action Docs.
with:
path: ${{ steps.prep-ccache.outputs.dir }}
# Restores ccache from either a previous build on this branch or on main
key: ${{ github.workflow }}-${{ matrix.python-version }}-ccache-linux-${{ steps.prep-ccache.outputs.timestamp }}
# This evaluates to `Linux Tests-3.9-ccache-linux-` which is not unique. As the CI matrix is expanded, this will
# need to be updated to be unique so that the cache is not restored from a different job altogether.
restore-keys: |
${{ github.workflow }}-${{ matrix.python-version }}-ccache-linux-
- name: Setup build and install scipy
run: |
python dev.py build -j 2 --werror
- name: Ccache performance
shell: bash -l {0}
run: ccache -s
- name: Check installation
run: |
pushd tools
python check_installation.py ${{ env.INSTALLDIR }}
./check_pyext_symbol_hiding.sh ../build
popd
- name: Mypy
if: matrix.python-version == '3.9'
run: |
# Packages that are only needed for their annotations
python -m pip install -r mypy_requirements.txt
python -m pip install types-psutil pybind11 sphinx
python -u dev.py mypy
- name: Test SciPy
run: |
export OMP_NUM_THREADS=2
export SCIPY_USE_PROPACK=1
python dev.py --no-build test -j 2 -- --durations 10 --timeout=60
test_venv_install:
name: Pip install into venv
if: "github.repository == 'scipy/scipy' || github.repository == ''"
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Install Ubuntu dependencies
run: |
# We're not running the full test suite here, only testing the install
# into a venv is working, so leave out optional dependencies. That's
# also why we can get away with an old version of OpenBLAS from Ubuntu
sudo apt-get update
sudo apt-get install -y python3-dev libopenblas-dev pkg-config gfortran
- name: Create venv, install SciPy
run: |
python -m venv ../venvs/scipy-venv
source ../venvs/scipy-venv/bin/activate
# Note that this uses build isolation. That's why we don't need build
# dependencies to be installed in the venv itself.
python -m pip install . -vv
- name: Basic imports and tests
run: |
source ../venvs/scipy-venv/bin/activate
cd ..
python -c "import scipy"
python -c "import scipy.linalg"
python -m pip install pytest
python -c "from scipy import cluster; cluster.test()"