name: CI on: push: branches: [main] pull_request: workflow_dispatch: jobs: lint: runs-on: ubuntu-latest name: Lint (ruff) steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Python 3.12 uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install ruff run: pip install ruff - name: ruff check run: ruff check . - name: ruff format --check run: ruff format --check . test: runs-on: ${{ matrix.os }} name: Tests (py${{ matrix.python }} / ${{ matrix.os }}) strategy: fail-fast: false matrix: os: [ubuntu-latest] python: ["3.10", "3.12", "3.13"] include: # Windows tests on 3.12 only — the version the release binaries ship # with. The self-hosted Windows runner blocks setup-python's install # script (PowerShell execution policy), so it uses the host's `py` # launcher + venv, same as release.yml. - os: windows-latest python: "3.12" steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python }} (Linux) if: runner.os == 'Linux' uses: actions/setup-python@v5 with: python-version: ${{ matrix.python }} - name: Set up Python venv (Windows) if: runner.os == 'Windows' shell: pwsh run: | py -${{ matrix.python }} -m venv .venv Add-Content -Path $env:GITHUB_PATH -Value "$env:GITHUB_WORKSPACE\.venv\Scripts" # bcc_core has no GUI imports, so the test suite needs no PySide6 — # keeps CI fast and avoids Qt system-library headaches on the runner. # cryptography is for tests/test_checksums.py (release signing helper). - name: Install test dependencies run: pip install pytest cryptography - name: Run tests run: python -m pytest -v