Refactor workflow to DAG architecture with expanded testing, CI modernisation, and validated numerical equivalence #1
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: CodeEntropy PR | |
| on: | |
| pull_request: | |
| concurrency: | |
| group: pr-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| unit: | |
| name: Unit tests (py${{ matrix.python-version }} • ${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 25 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-24.04, macos-14, windows-2025] | |
| python-version: ["3.12", "3.13", "3.14"] | |
| steps: | |
| - name: Checkout repo | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: pip | |
| - name: Install CodeEntropy and its testing dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -e .[testing] | |
| - name: Run unit test suite | |
| run: | | |
| python -m pytest tests/unit -q | |
| regression-quick: | |
| name: Quick regression (py${{ matrix.python-version }} • ${{ matrix.os }}) | |
| needs: unit | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 35 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-24.04, macos-14, windows-2025] | |
| python-version: ["3.12", "3.13", "3.14"] | |
| steps: | |
| - name: Checkout repo | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: pip | |
| - name: Cache regression test data downloads | |
| uses: actions/cache@v4 | |
| with: | |
| path: .testdata | |
| key: codeentropy-testdata-v1-${{ runner.os }}-py${{ matrix.python-version }} | |
| - name: Install CodeEntropy and its testing dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -e .[testing] | |
| - name: Run quick regression suite (slow excluded) | |
| run: | | |
| python -m pytest tests/regression -q | |
| - name: Upload regression artifacts on failure | |
| if: failure() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: quick-regression-failure-${{ matrix.os }}-py${{ matrix.python-version }} | |
| path: | | |
| .testdata/** | |
| tests/regression/**/.pytest_cache/** | |
| /tmp/pytest-of-*/pytest-*/**/config.yaml | |
| /tmp/pytest-of-*/pytest-*/**/codeentropy_stdout.txt | |
| /tmp/pytest-of-*/pytest-*/**/codeentropy_stderr.txt | |
| /tmp/pytest-of-*/pytest-*/**/codeentropy_output.json | |
| docs: | |
| name: Docs build (latest) | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 25 | |
| steps: | |
| - name: Checkout repo | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 | |
| - name: Set up Python 3.14 | |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 | |
| with: | |
| python-version: "3.14" | |
| cache: pip | |
| - name: Install python dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -e .[docs] | |
| - name: Build docs | |
| run: | | |
| cd docs | |
| make | |
| pre-commit: | |
| name: Pre-commit | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Checkout repo | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 | |
| - name: Set up Python 3.14 | |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 | |
| with: | |
| python-version: "3.14" | |
| cache: pip | |
| - name: Install python dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -e .[pre-commit] | |
| - name: Run pre-commit | |
| shell: bash | |
| run: | | |
| pre-commit install | |
| pre-commit run --all-files || { | |
| git status --short | |
| git diff | |
| exit 1 | |
| } |