Skip to content

CI

CI #1761

Workflow file for this run

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@v4
- 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@v4
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
"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-13
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
# 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: 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@v4
- 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@v5
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@v4
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@v4
- name: Set up Python ${{ matrix.python.dotted }}
uses: actions/setup-python@v5
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@v4
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