Skip to content

Merge pull request #2497 from devitocodes/fix-func-rebuild #7197

Merge pull request #2497 from devitocodes/fix-func-rebuild

Merge pull request #2497 from devitocodes/fix-func-rebuild #7197

name: CI-core
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
# Trigger the workflow on push or pull request,
# but only for the master branch
push:
branches:
- master
pull_request:
branches:
- master
jobs:
pytest:
name: ${{ matrix.name }}-${{ matrix.set }}
runs-on: "${{ matrix.os }}"
env:
DEVITO_ARCH: "${{ matrix.arch }}"
DEVITO_LANGUAGE: ${{ matrix.language }}
OMP_NUM_THREADS: 2
strategy:
# Prevent all build to stop if a single one fails
fail-fast: false
matrix:
name: [
pytest-ubuntu-py311-gcc11-noomp,
pytest-ubuntu-py312-gcc12-omp,
pytest-ubuntu-py39-gcc7-omp,
pytest-ubuntu-py310-gcc10-noomp,
pytest-ubuntu-py312-gcc13-omp,
pytest-ubuntu-py39-gcc9-omp,
pytest-osx-py312-clang-omp,
pytest-docker-py39-gcc-omp,
pytest-docker-py39-icx-omp
]
set: [base, adjoint]
include:
- name: pytest-ubuntu-py311-gcc11-noomp
python-version: '3.11'
os: ubuntu-22.04
arch: "gcc-11"
language: "C"
sympy: "1.11"
- name: pytest-ubuntu-py312-gcc12-omp
python-version: '3.12'
os: ubuntu-24.04
arch: "gcc-12"
language: "openmp"
sympy: "1.13"
- name: pytest-ubuntu-py39-gcc7-omp
python-version: '3.9'
os: ubuntu-20.04
arch: "gcc-7"
language: "openmp"
sympy: "1.9"
- name: pytest-ubuntu-py310-gcc10-noomp
python-version: '3.10'
os: ubuntu-20.04
arch: "gcc-10"
language: "C"
sympy: "1.11"
- name: pytest-ubuntu-py312-gcc13-omp
python-version: '3.12'
os: ubuntu-24.04
arch: "gcc-13"
language: "openmp"
sympy: "1.13"
- name: pytest-ubuntu-py39-gcc9-omp
python-version: '3.9'
os: ubuntu-20.04
arch: "custom"
language: "openmp"
sympy: "1.10"
- name: pytest-osx-py312-clang-omp
python-version: '3.12'
os: macos-latest
arch: "clang"
language: "openmp"
sympy: "1.13"
- name: pytest-docker-py39-gcc-omp
python-version: '3.9'
os: ubuntu-latest
arch: "gcc"
language: "openmp"
sympy: "1.12"
- name: pytest-docker-py39-icx-omp
python-version: '3.9'
os: ubuntu-latest
arch: "icx"
language: "openmp"
sympy: "1.12"
- set: base
test-set: 'not adjoint'
- set: adjoint
test-set: 'adjoint'
exclude:
- name: pytest-osx-py312-clang-omp
set: adjoint
steps:
- name: Checkout devito
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
if: "!contains(matrix.name, 'docker')"
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
- name: Build docker image
if: contains(matrix.name, 'docker')
run: |
docker build . --file docker/Dockerfile.devito --tag devito_img --build-arg base=devitocodes/bases:cpu-${{ matrix.arch }}
- name: Set run prefix
run: |
if [[ "${{ matrix.name }}" =~ "docker" ]]; then
echo "RUN_CMD=docker run --rm -t -e CODECOV_TOKEN=${{ secrets.CODECOV_TOKEN }} --name testrun devito_img" >> $GITHUB_ENV
else
echo "RUN_CMD=" >> $GITHUB_ENV
fi
id: set-run
- name: Install ${{ matrix.arch }} compiler
if: "runner.os == 'linux' && !contains(matrix.name, 'docker') && matrix.arch !='custom' "
run : |
sudo apt-get install -y ${{ matrix.arch }}
- name: Set tests (reduced number for OSX)
run : |
if [ "${{ runner.os }}" == 'macOS' ]; then
brew install llvm libomp
echo "/opt/homebrew/opt/llvm/bin" >> $GITHUB_PATH
fi
id: set-tests
- name: Set pip flags for latest python (3.12)
run: |
if [ "${{ matrix.python-version }}" == '3.12' ]; then
echo "PIPFLAGS='--break-system-packages'" >> $GITHUB_ENV
fi
- name: Install dependencies
if: "!contains(matrix.name, 'docker')"
run: |
python3 -m pip install ${{ env.PIPFLAGS }} --upgrade pip
python3 -m pip install ${{ env.PIPFLAGS }} sympy==${{matrix.sympy}}
python3 -m pip install ${{ env.PIPFLAGS }} -e .[tests,extras]
- name: Check configuration
run: |
${{ env.RUN_CMD }} python3 -c "from devito import configuration; print(''.join(['%s: %s \n' % (k, v) for (k, v) in configuration.items()]))"
- name: Test with pytest
run: |
${{ env.RUN_CMD }} pytest -k "${{ matrix.test-set }}" -m "not parallel" --cov --cov-config=.coveragerc --cov-report=xml ${{ env.TESTS }}
- name: Upload coverage to Codecov
if: "!contains(matrix.name, 'docker')"
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
name: ${{ matrix.name }}