Stabilize CI test runs with deterministic environment settings #75
This file contains hidden or 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: Pull Request CI | |
| on: | |
| pull_request: | |
| concurrency: | |
| group: pr-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| OMP_NUM_THREADS: 1 | |
| MKL_NUM_THREADS: 1 | |
| OPENBLAS_NUM_THREADS: 1 | |
| NUMEXPR_NUM_THREADS: 1 | |
| PYTHONHASHSEED: 0 | |
| jobs: | |
| unit: | |
| name: Unit | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 25 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-24.04, macos-15, windows-2025] | |
| python-version: ["3.12", "3.13", "3.14"] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: pip | |
| - name: Install testing dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -e .[testing] | |
| - name: Run unit tests | |
| run: | | |
| python -m pytest tests/unit -n auto --dist=loadscope | |
| discover-systems: | |
| name: Discover regression systems | |
| runs-on: ubuntu-24.04 | |
| outputs: | |
| systems: ${{ steps.set-systems.outputs.systems }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 | |
| - name: Set up Python 3.14 | |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 | |
| with: | |
| python-version: "3.14" | |
| cache: pip | |
| - name: Install testing dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -e .[testing] | |
| - name: Discover systems | |
| id: set-systems | |
| run: | | |
| SYSTEMS=$(python -m tests.regression.list_systems) | |
| echo "systems=$SYSTEMS" >> $GITHUB_OUTPUT | |
| regression-quick: | |
| name: Regression (fast) • ${{ matrix.system }} | |
| needs: [unit, discover-systems] | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 35 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| system: ${{ fromJson(needs.discover-systems.outputs.systems) }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 | |
| - name: Set up Python 3.14 | |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 | |
| with: | |
| python-version: "3.14" | |
| cache: pip | |
| - name: Install testing dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -e .[testing] | |
| - name: Run fast regression tests | |
| run: | | |
| python -m pytest tests/regression \ | |
| -m "not slow" \ | |
| -n 0 \ | |
| -k "${{ matrix.system }}" \ | |
| -vv \ | |
| --durations=20 | |
| - name: Upload artifacts (failure) | |
| if: failure() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: quick-regression-failure-${{ matrix.system }} | |
| path: | | |
| .testdata/** | |
| /tmp/pytest-of-*/pytest-*/** | |
| docs: | |
| name: Docs | |
| needs: unit | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 25 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 | |
| - name: Set up Python 3.14 | |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 | |
| with: | |
| python-version: "3.14" | |
| cache: pip | |
| - name: Install docs dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -e .[docs] | |
| - name: Build docs | |
| run: | | |
| make -C docs clean | |
| make -C docs html SPHINXOPTS="-W --keep-going" | |
| - name: Upload docs artifact | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: docs-html | |
| path: docs/_build/html | |
| pre-commit: | |
| name: Pre-commit | |
| needs: unit | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 | |
| - name: Set up Python 3.14 | |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 | |
| with: | |
| python-version: "3.14" | |
| cache: pip | |
| - name: Install pre-commit dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -e .[pre-commit] | |
| - name: Run pre-commit | |
| run: | | |
| pre-commit install | |
| pre-commit run --all-files || { | |
| git status --short | |
| git diff | |
| exit 1 | |
| } | |
| coverage: | |
| name: Coverage | |
| needs: unit | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 30 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 | |
| - name: Set up Python 3.14 | |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 | |
| with: | |
| python-version: "3.14" | |
| cache: pip | |
| - name: Install testing dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -e .[testing] | |
| - name: Run coverage | |
| run: | | |
| pytest tests/unit \ | |
| --cov CodeEntropy \ | |
| --cov-report term-missing \ | |
| --cov-report xml \ | |
| -n auto \ | |
| --dist=loadscope \ | |
| -q | |
| - name: Upload coverage to Coveralls | |
| uses: coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| file: coverage.xml | |
| fail-on-error: false |