name: Test concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true on: push: branches: [main] tags: [v*] pull_request: workflow_dispatch: schedule: - cron: "0 0 * * 0" # run weekly jobs: test: name: Test uses: pyapp-kit/workflows/.github/workflows/test-pyrepo.yml@v2 with: os: ${{ matrix.platform }} python-version: ${{ matrix.python-version }} qt: ${{ matrix.backend }} pip-install-pre-release: ${{ github.event_name == 'schedule' }} coverage-upload: artifact strategy: fail-fast: false matrix: platform: [ubuntu-latest, windows-latest, macos-13] python-version: ["3.9", "3.10", "3.11", "3.12"] backend: [pyqt5, pyside2, pyqt6] exclude: # Abort (core dumped) on linux pyqt6, unknown reason - platform: ubuntu-latest backend: pyqt6 # lack of wheels for pyside2/py3.11 - python-version: "3.11" backend: pyside2 - python-version: "3.12" backend: pyside2 - python-version: "3.12" backend: pyqt5 include: - python-version: "3.13" platform: windows-latest backend: "pyqt6" - python-version: "3.13" platform: ubuntu-latest backend: "pyqt6" - python-version: "3.10" platform: macos-latest backend: "'pyside6<6.8'" - python-version: "3.11" platform: macos-latest backend: "'pyside6<6.8'" - python-version: "3.10" platform: windows-latest backend: "'pyside6<6.8'" - python-version: "3.12" platform: windows-latest backend: "'pyside6<6.8'" # legacy Qt - python-version: 3.9 platform: ubuntu-latest backend: "pyqt5==5.12.*" - python-version: 3.9 platform: ubuntu-latest backend: "pyqt5==5.13.*" - python-version: 3.9 platform: ubuntu-latest backend: "pyqt5==5.14.*" test-qt-minreqs: uses: pyapp-kit/workflows/.github/workflows/test-pyrepo.yml@v2 with: python-version: "3.9" qt: pyqt5 pip-post-installs: "qtpy==1.1.0 typing-extensions==4.5.0" # 4.5.0 is just for pint pip-install-flags: -e coverage-upload: artifact upload_coverage: if: always() needs: [test, test-qt-minreqs] uses: pyapp-kit/workflows/.github/workflows/upload-coverage.yml@v2 secrets: inherit test_napari: uses: pyapp-kit/workflows/.github/workflows/test-dependents.yml@v2 with: dependency-repo: napari/napari dependency-ref: ${{ matrix.napari-version }} dependency-extras: "testing" qt: ${{ matrix.qt }} pytest-args: 'src/napari/_qt --import-mode=importlib -k "not async and not qt_dims_2 and not qt_viewer_console_focus and not keybinding_editor and not preferences_dialog_not_dismissed"' python-version: "3.10" post-install-cmd: "pip install lxml_html_clean" strategy: fail-fast: false matrix: napari-version: [ "" ] qt: [ "pyqt5", "pyside2" ] check-manifest: name: Check Manifest runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: pipx run check-manifest deploy: # this will run when you have tagged a commit, starting with "v*" # and requires that you have put your twine API key in your # github secrets (see readme for details) needs: [test, check-manifest] if: ${{ github.repository == 'pyapp-kit/superqt' && contains(github.ref, 'tags') }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.x" - name: Install dependencies run: | python -m pip install --upgrade pip pip install build twine - name: Build and publish env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.TWINE_API_KEY }} run: | git tag python -m build twine check dist/* twine upload dist/* - uses: softprops/action-gh-release@v2 with: generate_release_notes: true