name: tests on: push: branches: [master] pull_request: jobs: linux: runs-on: ubuntu-latest strategy: fail-fast: false matrix: python: ["3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python }} # PyQt6 ships Qt itself, but Qt still loads these from the system, even # for the offscreen platform the tests run on. QtNetwork wants the Kerberos # library, and the widgets want fontconfig, whether or not anything is # ever drawn. - name: Install the Qt runtime libraries run: | sudo apt-get update sudo apt-get install --no-install-recommends -y \ libegl1 libgl1 libxkbcommon0 libdbus-1-3 libglib2.0-0 \ libfontconfig1 libfreetype6 libgssapi-krb5-2 - name: Install PyQt6 run: python -m pip install --quiet PyQt6 # Nothing else is needed: the code is standard library and PyQt6, and the # tests reach neither the network nor a sound device. - name: Run the tests run: python -m unittest discover --verbose # The macOS backends are written to be checked from either side, so most of # what runs here also runs above. What only this job can catch is the half # that reads the real platform: the Carbon and CoreGraphics libraries have to # be there to be opened, the paths under ~/Library have to be the ones macOS # actually uses, and the Linux tests are skipped rather than failed. macos: runs-on: macos-latest strategy: fail-fast: false matrix: python: ["3.11", "3.13"] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python }} # No apt step: PyQt6's wheel carries the frameworks it needs on a Mac. - name: Install PyQt6 run: python -m pip install --quiet PyQt6 - name: Run the tests run: python -m unittest discover --verbose # The installer is most of what is new on a Mac, and a syntax error in it # would otherwise only turn up on somebody's machine. Running it is not on # the table here: it wants a microphone, a login session and a keychain. - name: Check the installer parses run: | bash -n install.sh bash -n scripts/install-mac.sh bash -n scripts/update.sh bash -n scripts/uninstall.sh bash -n scripts/release.sh bash -n packaging/build-appimage.sh bash -n packaging/build-dmg.sh