Skip to content

Expand mypy CI checks to three more files #5443

Expand mypy CI checks to three more files

Expand mypy CI checks to three more files #5443

Workflow file for this run

name: CI
on:
push:
branches:
- main
- 2.*
pull_request: ~
env:
CACHE_VERSION: 3
KEY_PREFIX: venv
DEFAULT_PYTHON: "3.13"
PRE_COMMIT_CACHE: ~/.cache/pre-commit
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
base-checks:
name: Checks
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Check out code from GitHub
uses: actions/[email protected]
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/[email protected]
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Generate partial Python venv restore key
id: generate-python-key
run: >-
echo "key=base-venv-${{ env.CACHE_VERSION }}-${{
hashFiles('pyproject.toml', 'requirements_dev.txt',
'requirements_full.txt', 'requirements_minimal.txt') }}" >> $GITHUB_OUTPUT
- name: Restore Python virtual environment
id: cache-venv
uses: actions/[email protected]
with:
path: venv
key: >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
steps.generate-python-key.outputs.key }}
- name: Create Python virtual environment
if: steps.cache-venv.outputs.cache-hit != 'true'
run: |
python -m venv venv
. venv/bin/activate
python -m pip install -U pip setuptools wheel
pip install -U -r requirements_full.txt
- name: Generate pre-commit restore key
id: generate-pre-commit-key
run: >-
echo "key=pre-commit-${{ env.CACHE_VERSION }}-${{
hashFiles('.pre-commit-config.yaml') }}" >> $GITHUB_OUTPUT
- name: Restore pre-commit environment
id: cache-precommit
uses: actions/[email protected]
with:
path: ${{ env.PRE_COMMIT_CACHE }}
key: >-
${{ runner.os }}-${{ steps.generate-pre-commit-key.outputs.key }}
- name: Install pre-commit dependencies
if: steps.cache-precommit.outputs.cache-hit != 'true'
run: |
. venv/bin/activate
pre-commit install --install-hooks
- name: Run pre-commit checks
run: |
. venv/bin/activate
pre-commit run pylint --all-files
tests-linux:
name: tests / run / ${{ matrix.python-version }} / Linux
runs-on: ubuntu-latest
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
python-version: [3.9, "3.10", "3.11", "3.12", "3.13"]
outputs:
python-key: ${{ steps.generate-python-key.outputs.key }}
steps:
- name: Check out code from GitHub
uses: actions/[email protected]
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/[email protected]
with:
python-version: ${{ matrix.python-version }}
check-latest: true
- name: Install Qt
if: ${{ matrix.python-version == '3.10' }}
run: |
sudo apt-get update
sudo apt-get install build-essential libgl1-mesa-dev
- name: Generate partial Python venv restore key
id: generate-python-key
run: >-
echo "key=${{ env.KEY_PREFIX }}-${{ env.CACHE_VERSION }}-${{
hashFiles('pyproject.toml', 'requirements_dev.txt',
'requirements_full.txt', 'requirements_minimal.txt') }}" >> $GITHUB_OUTPUT
- name: Restore Python virtual environment
id: cache-venv
uses: actions/[email protected]
with:
path: venv
key: >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
steps.generate-python-key.outputs.key }}
- name: Create Python virtual environment
if: steps.cache-venv.outputs.cache-hit != 'true'
run: |
python -m venv venv
. venv/bin/activate
python -m pip install -U pip wheel
pip install -U -r requirements_full.txt
pip install -e .
- name: Run pytest
run: |
. venv/bin/activate
pytest --cov
- name: Upload coverage artifact
uses: actions/[email protected]
with:
name: coverage-linux-${{ matrix.python-version }}
path: .coverage
include-hidden-files: true
tests-windows:
name: tests / run / ${{ matrix.python-version }} / Windows
runs-on: windows-latest
timeout-minutes: 20
needs: tests-linux
strategy:
fail-fast: false
matrix:
python-version: [3.9, "3.10", "3.11", "3.12", "3.13"]
steps:
- name: Set temp directory
run: echo "TEMP=$env:USERPROFILE\AppData\Local\Temp" >> $env:GITHUB_ENV
# Workaround to set correct temp directory on Windows
# https://github.com/actions/virtual-environments/issues/712
- name: Check out code from GitHub
uses: actions/[email protected]
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/[email protected]
with:
python-version: ${{ matrix.python-version }}
check-latest: true
- name: Generate partial Python venv restore key
id: generate-python-key
run: >-
echo "key=${{ env.KEY_PREFIX }}-${{ env.CACHE_VERSION }}-${{
hashFiles('pyproject.toml', 'requirements_dev.txt',
'requirements_full.txt', 'requirements_minimal.txt') }}" >> $GITHUB_OUTPUT
- name: Restore Python virtual environment
id: cache-venv
uses: actions/[email protected]
with:
path: venv
key: >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
steps.generate-python-key.outputs.key }}
- name: Create Python virtual environment
if: steps.cache-venv.outputs.cache-hit != 'true'
run: |
python -m venv venv
. venv\\Scripts\\activate
python -m pip install -U pip setuptools wheel
pip install -U -r requirements_full.txt
pip install -e .
- name: Run pytest
run: |
. venv\\Scripts\\activate
pytest --cov
- name: Upload coverage artifact
uses: actions/[email protected]
with:
name: coverage-windows-${{ matrix.python-version }}
path: .coverage
include-hidden-files: true
tests-pypy:
name: tests / run / ${{ matrix.python-version }} / Linux
runs-on: ubuntu-latest
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
# We only test on the lowest and highest supported PyPy versions
python-version: ["pypy3.9", "pypy3.10"]
steps:
- name: Check out code from GitHub
uses: actions/[email protected]
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/[email protected]
with:
python-version: ${{ matrix.python-version }}
check-latest: true
- name: Generate partial Python venv restore key
id: generate-python-key
run: >-
echo "key=${{ env.KEY_PREFIX }}-${{ env.CACHE_VERSION }}-${{
hashFiles('pyproject.toml', 'requirements_minimal.txt')
}}" >> $GITHUB_OUTPUT
- name: Restore Python virtual environment
id: cache-venv
uses: actions/[email protected]
with:
path: venv
key: >-
${{ runner.os }}-${{ matrix.python-version }}-${{
steps.generate-python-key.outputs.key }}
- name: Create Python virtual environment
if: steps.cache-venv.outputs.cache-hit != 'true'
run: |
python -m venv venv
. venv/bin/activate
python -m pip install -U pip setuptools wheel
pip install -U -r requirements_minimal.txt
pip install -e .
- name: Run pytest
run: |
. venv/bin/activate
pytest --cov
- name: Upload coverage artifact
uses: actions/[email protected]
with:
name: coverage-pypy-${{ matrix.python-version }}
path: .coverage
include-hidden-files: true
coverage:
name: tests / process / coverage
runs-on: ubuntu-latest
timeout-minutes: 10
needs: ["tests-linux", "tests-windows", "tests-pypy"]
steps:
- name: Check out code from GitHub
uses: actions/[email protected]
- name: Set up Python 3.13
id: python
uses: actions/[email protected]
with:
python-version: "3.13"
check-latest: true
- name: Install dependencies
run: pip install -U -r requirements_minimal.txt
- name: Download all coverage artifacts
uses: actions/[email protected]
- name: Combine Linux coverage results
run: |
coverage combine coverage-linux*/.coverage
coverage xml -o coverage-linux.xml
- uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
verbose: true
flags: linux
files: coverage-linux.xml
- name: Combine Windows coverage results
run: |
coverage combine coverage-windows*/.coverage
coverage xml -o coverage-windows.xml
- uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
verbose: true
flags: windows
files: coverage-windows.xml
- name: Combine PyPy coverage results
run: |
coverage combine coverage-pypy*/.coverage
coverage xml -o coverage-pypy.xml
- uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
verbose: true
flags: pypy
files: coverage-pypy.xml