AML-146 Exclude unnecessary builds #2
This file contains 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: 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()" |