name: Python tests on: push: branches: [main] paths: - "python_pkg/lichess_bot/**" - "python_pkg/**" - "tests/**" - "linux_configuration/tests/**" # Both spellings: the root requirements.txt is a SYMLINK into meta/, # and GitHub matches path filters against the changed path as git # records it. Editing meta/requirements.txt therefore did NOT match # "requirements.txt", so a dependency fix silently skipped this # workflow and the red run stayed on an older commit. - "requirements.txt" - "meta/requirements.txt" - "meta/requirements-test.txt" - ".github/workflows/python-tests.yml" pull_request: branches: [main] paths: - "python_pkg/lichess_bot/**" - "python_pkg/**" - "tests/**" - "linux_configuration/tests/**" # Both spellings: the root requirements.txt is a SYMLINK into meta/, # and GitHub matches path filters against the changed path as git # records it. Editing meta/requirements.txt therefore did NOT match # "requirements.txt", so a dependency fix silently skipped this # workflow and the red run stayed on an older commit. - "requirements.txt" - "meta/requirements.txt" - "meta/requirements-test.txt" - ".github/workflows/python-tests.yml" workflow_dispatch: {} jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.x" # Cache the pip DOWNLOAD cache, keyed on the requirements file, so a # run that changes nothing about dependencies reuses the wheels # instead of re-fetching ~80 packages from PyPI. Points at # meta/requirements.txt, not the root symlink: the cache key is # hashed from the file at this path, and hashing a symlink is not # the same as hashing its target. cache: pip cache-dependency-path: meta/requirements-test.txt - name: Install system dependencies run: | set -euo pipefail sudo apt-get update && sudo apt-get install -y librsvg2-bin rsvg-convert --version - name: Install dependencies run: | python -m pip install --upgrade pip # The TEST subset, not the full requirements.txt. This job runs # pytest and nothing else, so the ~62 linters and formatters in the # full list were pure install time. See meta/requirements-test.txt. pip install -r meta/requirements-test.txt - name: Run pytest with coverage run: pytest --cov=python_pkg --cov-branch --cov-report=term-missing --cov-fail-under=100