Test #1287
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: 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: ${{ matrix.os }} (${{ matrix.python-version }}) ${{ matrix.add-extra || '' }} ${{ matrix.resolution || ''}} | |
| runs-on: ${{ matrix.os }} | |
| env: | |
| UV_PRERELEASE: ${{ github.event_name == 'schedule' && 'allow' || 'if-necessary-or-explicit' }} | |
| UV_NO_SYNC: 1 | |
| UV_MANAGED_PYTHON: 1 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.9", "3.13"] | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| add-extra: [pyqt6, pyside6] | |
| include: | |
| - os: windows-latest | |
| python-version: "3.11" | |
| resolution: "lowest-direct" | |
| add-extra: pyside6 | |
| - os: macos-latest | |
| python-version: "3.12" | |
| resolution: "lowest-direct" | |
| add-extra: pyqt6 | |
| - python-version: "3.9" | |
| os: ubuntu-latest | |
| add-extra: pyqt5 | |
| - python-version: "3.9" | |
| os: ubuntu-latest | |
| add-extra: pyside2 | |
| - python-version: "3.11" | |
| os: windows-latest | |
| add-extra: pyqt5 | |
| - python-version: "3.10" | |
| os: ubuntu-latest | |
| add-extra: pyside2 | |
| - python-version: "3.12" | |
| os: ubuntu-latest | |
| add-extra: pyqt6 | |
| - python-version: "3.12" | |
| os: ubuntu-latest | |
| add-extra: pyside6 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| - name: 🐍 Set up Python ${{ matrix.python-version }} | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| enable-cache: true | |
| cache-dependency-glob: "**/pyproject.toml" | |
| - uses: pyvista/setup-headless-display-action@v4 | |
| with: | |
| qt: true | |
| - name: Install Dependencies | |
| run: uv sync --no-dev --group test --extra ${{ matrix.add-extra }} --resolution ${{ matrix.resolution || 'highest'}} | |
| - name: 🧪 Run Tests | |
| run: uv run coverage run -p -m pytest -v | |
| # If something goes wrong with --pre tests, we can open an issue in the repo | |
| - name: 📝 Report --pre Failures | |
| if: failure() && github.event_name == 'schedule' | |
| uses: JasonEtco/create-an-issue@v2 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| PLATFORM: ${{ matrix.os }} | |
| PYTHON: ${{ matrix.python-version }} | |
| RUN_ID: ${{ github.run_id }} | |
| TITLE: "[test-bot] pip install --pre is failing" | |
| with: | |
| filename: .github/TEST_FAIL_TEMPLATE.md | |
| update_existing: true | |
| - name: Upload coverage | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: covreport-${{ matrix.os }}-py${{ matrix.python-version }}-${{ matrix.add-extra }}-${{ matrix.resolution }} | |
| path: ./.coverage* | |
| include-hidden-files: true | |
| upload_coverage: | |
| if: always() | |
| needs: [test] | |
| 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-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" | |
| # napari hasn't pinned pytest-qt, but still requires pyside2 tests | |
| post-install-cmd: "pip install lxml_html_clean pytest-qt==4.4.0" | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| qt: ["pyqt5", "pyside2"] | |
| check-manifest: | |
| name: Check Manifest | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - run: pipx run check-manifest | |
| build-and-inspect-package: | |
| name: Build & inspect package. | |
| needs: test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| - uses: hynek/build-and-inspect-python-package@v2 | |
| upload-to-pypi: | |
| if: success() && startsWith(github.ref, 'refs/tags/') && github.event_name != 'schedule' && github.repository == 'pyapp-kit/superqt' | |
| name: Upload package to PyPI | |
| needs: build-and-inspect-package | |
| runs-on: ubuntu-latest | |
| permissions: | |
| id-token: write | |
| contents: write | |
| steps: | |
| - name: Download built artifact to dist/ | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: Packages | |
| path: dist | |
| - name: 🚢 Publish to PyPI | |
| uses: pypa/gh-action-pypi-publish@release/v1 | |
| - uses: softprops/action-gh-release@v2 | |
| with: | |
| generate_release_notes: true | |
| files: "./dist/*" |