name: CI
on:
    push:
        branches:
        - main
    pull_request:
    schedule:
        - cron:  '17 3 * * 0'

concurrency:
    group: ${{ github.head_ref || github.ref_name }}
    cancel-in-progress: true

jobs:
    typos:
        name: Typos
        runs-on: ubuntu-latest
        steps:
        -   uses: actions/checkout@v4
        -   uses: crate-ci/typos@master

    ruff:
        name: Ruff
        runs-on: ubuntu-latest
        steps:
        -   uses: actions/checkout@v4
        -
            uses: actions/setup-python@v5
        -   name: "Main Script"
            run: |
                pip install ruff
                ruff check

    pylint:
        name: Pylint
        runs-on: ubuntu-latest
        steps:
        -   uses: actions/checkout@v4
        -   name: "Main Script"
            run: |
                USE_CONDA_BUILD=1
                curl -L -O https://gitlab.tiker.net/inducer/ci-support/raw/master/prepare-and-run-pylint.sh
                . ./prepare-and-run-pylint.sh "$(basename $GITHUB_REPOSITORY)" examples/*.py test/test_*.py

    mypy:
        name: Mypy
        runs-on: ubuntu-latest
        steps:
        -   uses: actions/checkout@v4
        -   name: "Main Script"
            run: |
                curl -L -O https://tiker.net/ci-support-v0
                . ./ci-support-v0

                build_py_project_in_conda_env
                python -m pip install mypy pytest
                ./run-mypy.sh

    pytest3_pocl:
        name: Pytest Conda Py3 POCL
        runs-on: ubuntu-latest
        steps:
        -   uses: actions/checkout@v4
        -   name: "Main Script"
            run: |
                curl -L -O https://tiker.net/ci-support-v0
                . ./ci-support-v0
                build_py_project_in_conda_env
                test_py_project

    pytest3_intel_cl:
        name: Pytest Conda Py3 Intel
        runs-on: ubuntu-latest
        steps:
        -   uses: actions/checkout@v4
        -   name: "Main Script"
            run: |
                curl -L -O https://raw.githubusercontent.com/illinois-scicomp/machine-shop-maintenance/main/install-intel-icd.sh
                sudo bash ./install-intel-icd.sh

                CONDA_ENVIRONMENT=.test-conda-env-py3.yml
                echo "- ocl-icd-system" >> "$CONDA_ENVIRONMENT"
                sed -i "/pocl/ d" "$CONDA_ENVIRONMENT"
                export PYOPENCL_TEST=intel
                source /opt/enable-intel-cl.sh

                curl -L -O https://tiker.net/ci-support-v0
                . ./ci-support-v0
                build_py_project_in_conda_env
                test_py_project

    examples3:
        name: Examples Conda Py3
        runs-on: ubuntu-latest
        steps:
        -   uses: actions/checkout@v4
        -   name: "Main Script"
            run: |
                export MPLBACKEND=Agg
                USE_CONDA_BUILD=1
                curl -L -O https://gitlab.tiker.net/inducer/ci-support/raw/main/build-py-project-and-run-examples.sh
                . ./build-py-project-and-run-examples.sh

    docs:
        name: Documentation
        runs-on: ubuntu-latest
        steps:
        -   uses: actions/checkout@v4
        -
            uses: actions/setup-python@v5
            with:
                python-version: '3.x'
        -   name: "Main Script"
            run: |
                curl -L -O https://tiker.net/ci-support-v0
                . ci-support-v0
                build_py_project_in_conda_env
                conda install graphviz

                CI_SUPPORT_SPHINX_VERSION_SPECIFIER=">=4.0"
                build_docs

    downstream_tests:
        strategy:
            matrix:
                downstream_project: [meshmode, grudge, mirgecom, mirgecom_examples]
            fail-fast: false

        name: Tests for downstream project ${{ matrix.downstream_project }}
        runs-on: ubuntu-latest
        steps:
        -   uses: actions/checkout@v4
        -   name: "Main Script"
            env:
                DOWNSTREAM_PROJECT: ${{ matrix.downstream_project }}
            run: |
                curl -L -O https://tiker.net/ci-support-v0
                . ./ci-support-v0
                test_downstream "$DOWNSTREAM_PROJECT"

                if [[ "$DOWNSTREAM_PROJECT" = "meshmode" ]]; then
                    python ../examples/simple-dg.py --lazy
                fi

# vim: sw=4