CI #2002
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: CI | |
| on: | |
| push: | |
| branches: | |
| - main | |
| tags: | |
| - v* | |
| pull_request: | |
| branches: | |
| - "*" | |
| release: | |
| types: | |
| - published | |
| schedule: | |
| # Daily at 05:47 | |
| - cron: '47 5 * * *' | |
| concurrency: | |
| group: ${{ github.ref }}-${{ github.workflow }}-${{ github.event_name }}-${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) && github.sha || '' }} | |
| cancel-in-progress: true | |
| env: | |
| PIP_NO_PYTHON_VERSION_WARNING: 1 | |
| permissions: | |
| id-token: write | |
| jobs: | |
| build: | |
| name: Build | |
| runs-on: ubuntu-latest | |
| container: docker://python:3.11-buster | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Build | |
| run: | | |
| python -m venv venv | |
| venv/bin/pip install --upgrade pip | |
| venv/bin/pip install build | |
| venv/bin/python -m build --outdir dist/ | |
| - uses: actions/upload-artifact@v5 | |
| if: always() | |
| with: | |
| name: dist | |
| path: dist/* | |
| if-no-files-found: error | |
| test: | |
| name: ${{ matrix.os.name }} ${{ matrix.python.name }} ${{ matrix.reactor.name }} ${{ matrix.arch.name }} | |
| needs: build | |
| runs-on: ${{ matrix.os.runs-on[matrix.arch.matrix] }} | |
| container: ${{ matrix.os.container[matrix.python.docker] }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - name: 🐧 | |
| matrix: linux | |
| runs-on: | |
| intel: ubuntu-latest | |
| python_platform: linux | |
| container: | |
| "2.7": docker://python:2.7-buster | |
| "3.6": docker://python:3.6-bullseye | |
| "3.7": docker://python:3.7-bookworm | |
| "3.8": docker://python:3.8-bookworm | |
| "3.9": docker://python:3.9-bookworm | |
| "3.10": docker://python:3.10-bookworm | |
| "3.11": docker://python:3.11-bookworm | |
| "3.12": docker://python:3.12-bookworm | |
| "3.13": docker://python:3.13-bookworm | |
| "pypy2.7": docker://pypy:2.7-bookworm | |
| "pypy3.7": docker://pypy:3.7-bullseye | |
| "pypy3.8": docker://pypy:3.8-bookworm | |
| "pypy3.9": docker://pypy:3.9-bookworm | |
| "pypy3.10": docker://pypy:3.10-bookworm | |
| - name: 🪟 | |
| matrix: windows | |
| runs-on: | |
| intel: windows-latest | |
| python_platform: win32 | |
| - name: 🍎 | |
| matrix: macos | |
| runs-on: | |
| arm: macos-latest | |
| intel: macos-15-intel | |
| python_platform: darwin | |
| python: | |
| - name: CPython 2.7 | |
| tox: py27 | |
| major-dot-minor: 2.7 | |
| action: 2.7 | |
| docker: 2.7 | |
| implementation: cpython | |
| major: 2 | |
| - name: CPython 3.6 | |
| tox: py36 | |
| major-dot-minor: 3.6 | |
| action: 3.6 | |
| docker: 3.6 | |
| implementation: cpython | |
| major: 3 | |
| - name: CPython 3.7 | |
| tox: py37 | |
| major-dot-minor: 3.7 | |
| action: 3.7 | |
| docker: 3.7 | |
| implementation: cpython | |
| major: 3 | |
| - name: CPython 3.8 | |
| tox: py38 | |
| major-dot-minor: 3.8 | |
| action: 3.8 | |
| docker: 3.8 | |
| implementation: cpython | |
| major: 3 | |
| - name: CPython 3.9 | |
| tox: py39 | |
| major-dot-minor: 3.9 | |
| action: 3.9 | |
| docker: 3.9 | |
| implementation: cpython | |
| major: 3 | |
| - name: CPython 3.10 | |
| tox: py310 | |
| major-dot-minor: "3.10" | |
| action: "3.10" | |
| docker: "3.10" | |
| implementation: cpython | |
| major: 3 | |
| - name: CPython 3.11 | |
| tox: py311 | |
| major-dot-minor: "3.11" | |
| action: "3.11" | |
| docker: "3.11" | |
| implementation: cpython | |
| major: 3 | |
| - name: CPython 3.12 | |
| tox: py312 | |
| major-dot-minor: "3.12" | |
| action: "3.12" | |
| docker: "3.12" | |
| implementation: cpython | |
| major: 3 | |
| - name: CPython 3.13 | |
| tox: py313 | |
| major-dot-minor: "3.13" | |
| action: "3.13" | |
| docker: "3.13" | |
| implementation: cpython | |
| major: 3 | |
| # disabled due to installation failures | |
| # https://github.com/pytest-dev/pytest-twisted/pull/157 | |
| # - name: PyPy 2.7 | |
| # tox: pypy27 | |
| # action: pypy-2.7 | |
| # docker: pypy2.7 | |
| # implementation: pypy | |
| # major: 2 | |
| - name: PyPy 3.7 | |
| tox: pypy37 | |
| major-dot-minor: 3.7 | |
| action: pypy-3.7 | |
| docker: pypy3.7 | |
| implementation: pypy | |
| major: 3 | |
| - name: PyPy 3.8 | |
| tox: pypy38 | |
| major-dot-minor: 3.8 | |
| action: pypy-3.8 | |
| docker: pypy3.8 | |
| implementation: pypy | |
| major: 3 | |
| - name: PyPy 3.9 | |
| tox: pypy39 | |
| major-dot-minor: 3.9 | |
| action: pypy-3.9 | |
| docker: pypy3.9 | |
| implementation: pypy | |
| major: 3 | |
| - name: PyPy 3.10 | |
| tox: pypy310 | |
| major-dot-minor: "3.10" | |
| action: pypy-3.10 | |
| docker: pypy3.10 | |
| implementation: pypy | |
| major: 3 | |
| reactor: | |
| - name: default | |
| tox: default | |
| dependencies: default | |
| - name: PyQt5 | |
| tox: pyqt5 | |
| dependencies: qt5 | |
| - name: PySide2 | |
| tox: pyside2 | |
| dependencies: qt5 | |
| - name: asyncio | |
| tox: asyncio | |
| dependencies: asyncio | |
| arch: | |
| - name: ARM | |
| matrix: arm | |
| setup-python: | |
| architecture: arm64 | |
| - name: Intel | |
| matrix: intel | |
| setup-python: | |
| architecture: x64 | |
| exclude: | |
| - python: | |
| major: 2 | |
| os: | |
| python_platform: darwin | |
| - python: | |
| major: 2 | |
| os: | |
| python_platform: win32 | |
| - python: | |
| major: 2 | |
| reactor: | |
| tox: pyqt5 | |
| - python: | |
| major: 2 | |
| reactor: | |
| tox: pyside2 | |
| - python: | |
| major-dot-minor: "3.11" | |
| reactor: | |
| tox: pyside2 | |
| - python: | |
| major-dot-minor: "3.12" | |
| reactor: | |
| tox: pyside2 | |
| - python: | |
| major-dot-minor: "3.13" | |
| reactor: | |
| tox: pyside2 | |
| - python: | |
| major: 2 | |
| reactor: | |
| tox: asyncio | |
| - python: | |
| implementation: pypy | |
| reactor: | |
| tox: pyqt5 | |
| - python: | |
| implementation: pypy | |
| reactor: | |
| tox: pyside2 | |
| - os: | |
| matrix: linux | |
| arch: | |
| matrix: arm | |
| - os: | |
| matrix: windows | |
| arch: | |
| matrix: arm | |
| - os: | |
| matrix: macos | |
| python: | |
| major-dot-minor: "3.6" | |
| arch: | |
| matrix: arm | |
| - os: | |
| matrix: macos | |
| python: | |
| major-dot-minor: "3.7" | |
| arch: | |
| matrix: arm | |
| - arch: | |
| matrix: arm | |
| reactor: | |
| tox: pyside2 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Enable Problem Matchers | |
| run: | | |
| echo "::add-matcher::.github/local-problem-matchers.json" | |
| - name: Set up ${{ matrix.python.name }} | |
| if: ${{ job.container == '' }} | |
| uses: actions/setup-python@v6 | |
| with: | |
| # This allows the matrix to specify just the major.minor version while still | |
| # expanding it to get the latest patch version including alpha releases. | |
| # This avoids the need to update for each new alpha, beta, release candidate, | |
| # and then finally an actual release version. actions/setup-python doesn't | |
| # support this for PyPy presently so we get no help there. | |
| # | |
| # CPython -> 3.9.0-alpha - 3.9.X | |
| # PyPy -> pypy-3.7 | |
| python-version: ${{ fromJSON(format('["{0}", "{1}"]', format('{0}.0-alpha - {0}.X', matrix.python.action), matrix.python.action))[startsWith(matrix.python.action, 'pypy')] }} | |
| architecture: ${{ matrix.arch.setup-python.architecture }} | |
| - name: Report Python information | |
| shell: bash | |
| run: | | |
| python -c 'import sys; print(sys.version)' | |
| echo | |
| echo " <=======>" | |
| echo | |
| pip --version | |
| echo | |
| echo " <=======>" | |
| echo | |
| pip list | |
| echo | |
| echo " <=======>" | |
| echo | |
| pip freeze --all | |
| - name: Install Linux Qt5 dependencies | |
| if: matrix.os.python_platform == 'linux' && matrix.reactor.dependencies == 'qt5' | |
| run: | | |
| apt-get update --yes | |
| apt-get install --yes libgl1 | |
| - name: Install | |
| run: | | |
| pip install tox | |
| - uses: actions/download-artifact@v6 | |
| with: | |
| name: dist | |
| path: dist/ | |
| - name: Test | |
| shell: bash | |
| run: | | |
| tox --installpkg dist/*.whl -v -e "${{ matrix.python.tox }}-${{ matrix.reactor.tox }}reactor" | |
| linting: | |
| name: Linting | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| python: | |
| - short: 311 | |
| dotted: "3.11" | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python ${{ matrix.python.dotted }} | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python.dotted }} | |
| architecture: x64 | |
| - name: Install | |
| run: | | |
| pip install tox | |
| - name: Test | |
| run: | | |
| tox -v -e linting | |
| publish: | |
| name: Publish | |
| runs-on: ubuntu-latest | |
| needs: | |
| - build | |
| - test | |
| - linting | |
| steps: | |
| - uses: actions/download-artifact@v6 | |
| with: | |
| name: dist | |
| path: dist/ | |
| - uses: pypa/gh-action-pypi-publish@release/v1 | |
| if: github.event_name == 'release' | |
| with: | |
| packages-dir: dist/ | |
| skip-existing: true | |
| all: | |
| name: All | |
| runs-on: ubuntu-latest | |
| needs: | |
| - build | |
| - test | |
| - linting | |
| - publish | |
| steps: | |
| - name: This | |
| shell: python | |
| run: | | |
| import this |