Skip to content

Bump mypy from 1.9.0 to 1.11.1 #399

Bump mypy from 1.9.0 to 1.11.1

Bump mypy from 1.9.0 to 1.11.1 #399

Workflow file for this run

# Docs:
# https://help.github.com/en/actions/automating-your-workflow-with-github-actions
name: CI
on:
push:
branches: ["trunk"]
pull_request:
branches: ["*"]
jobs:
lint:
name: Linters
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: System Python Information
uses: twisted/python-info-action@v1
- name: Set up Tox environment
run: |
pip install tox
tox run -e lint --notest
- name: Tox Python Information
uses: twisted/python-info-action@v1
with:
python-path: .tox/lint/*/python
- name: Run Linters
run: tox run -e lint
mypy:
name: Mypy (static type checker)
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: System Python Information
uses: twisted/python-info-action@v1
- name: Set up Tox environment
run: |
pip install tox
tox run -e mypy --notest
- name: Tox Python Information
uses: twisted/python-info-action@v1
with:
python-path: .tox/mypy/*/python
- name: Run Mypy
run: tox run -e mypy
docs:
name: Build documentation
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: System Python Information
uses: twisted/python-info-action@v1
- name: Set up Tox environment
run: |
pip install tox
tox run -e docs --notest
- name: Tox Python Information
uses: twisted/python-info-action@v1
with:
python-path: .tox/docs/*/python
- name: Build documentation
run: tox run -e docs
docs-linkcheck:
name: Documentation link check
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: System Python Information
uses: twisted/python-info-action@v1
- name: Set up Tox environment
run: |
pip install tox
tox run -e docs-linkcheck --notest
- name: Tox Python Information
uses: twisted/python-info-action@v1
with:
python-path: .tox/docs-linkcheck/*/python
- name: Check for broken links in documentation
run: tox run -e docs-linkcheck
packaging:
name: Packaging
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: System Python Information
uses: twisted/python-info-action@v1
- name: Set up Tox environment
run: |
pip install tox
tox run -e packaging --notest
- name: Tox Python Information
uses: twisted/python-info-action@v1
with:
python-path: .tox/packaging/*/python
- name: Check packaging
run: tox run -e packaging
unit:
name: "${{ matrix.tox-suffix }}Py:${{ matrix.python-version }} - Tw:${{ matrix.twisted-version }} - ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
timeout-minutes: 30
continue-on-error: ${{ matrix.optional }}
services:
mysql:
image: "${{ matrix.mysql-image }}"
env:
MYSQL_ROOT_PASSWORD: "ghamysqlpassword"
MYSQL_DATABASE: "ghamysqldb"
ports:
- "3306:3306"
options: >-
--health-cmd "mysqladmin ping -ppass"
--health-interval 10s
--health-start-period 10s
--health-timeout 5s
--health-retries 10
postgres16:
# https://github.com/actions/runner/issues/822
image: "${{ matrix.pg-image }}"
env:
POSTGRES_DB: "ghapgdb"
POSTGRES_USER: "ghapguser"
POSTGRES_PASSWORD: "ghapgpass"
POSTGRES_PORT: "5432"
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
strategy:
matrix:
os: ["ubuntu-latest"]
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
twisted-version: ["21.2", "22.1", "23.10"]
tox-prefix: ["coverage"]
tox-suffix: [""]
optional: [false]
pg-image: [""]
include:
- os: "ubuntu-latest"
python-version: "pypy-3.8"
twisted-version: "current"
# We need at least one PyPy environment with coverage enabled, but
# it's quite slow so we'll disable it everywhere else.
tox-prefix: "test"
optional: false
- os: "ubuntu-latest"
python-version: "pypy-3.9"
twisted-version: "current"
tox-prefix: "coverage"
optional: false
- os: "ubuntu-latest"
python-version: "3.12"
twisted-version: "23.10"
tox-prefix: "coverage"
tox-suffix: "-postgres"
pg-image: "postgres:16"
optional: false
- os: "ubuntu-latest"
python-version: "3.12"
twisted-version: "23.10"
tox-prefix: "coverage"
tox-suffix: "-mysql"
mysql-image: "mysql:8.0.29"
optional: false
steps:
- name: Checkout source code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: |
${{ matrix.python-version }}
3.11
- name: System Python Information
uses: twisted/python-info-action@v1
- name: Translate Python version to Tox environment
shell: python
run: |
from os import environ
from pathlib import Path
py = "${{ matrix.python-version }}"
py = "".join(py.split(".")[:2]) # Combine major/minor, toss rest
py = py.replace("pypy-", "py") # For Pypy: have a litte less py
tw = "${{ matrix.twisted-version }}"
tw = tw.replace(".", "")
env = f"${{ matrix.tox-prefix }}-py{py}-tw{tw}${{ matrix.tox-suffix }}"
print(f"TOX_ENV={env}")
p = Path(environ["GITHUB_ENV"])
f = p.open(mode="a")
f.write(f"TOX_ENV={env}\n")
- name: Set up Tox environment
run: |
pip install tox
tox run -e ${TOX_ENV} --notest
- name: Tox Python Information
uses: twisted/python-info-action@v1
with:
python-path: .tox/${TOX_ENV}/*/python
- name: Run unit tests
run: tox run -e ${TOX_ENV}
env:
PGHOST: "localhost"
PGPORT: "5432"
PGUSER: "ghapguser"
PGDATABASE: "ghapgdb"
PGPASSWORD: "ghapgpass"
MYSQL_USER: "root"
MYSQL_PWD: "ghamysqlpassword"
MYSQL_DATABASE: "ghamysqldb"
MYSQL_HOST: "localhost"
MYSQL_PORT: "3306"
- name: Combine coverage
run: tox run -e coverage_combine,coverage_report
if: ${{ matrix.tox-prefix == 'coverage' }}
- name: Upload Coverage XML
uses: actions/upload-artifact@v3
with:
name: coverage-debug
path: coverage.xml
- name: Upload Trial log artifact
if: ${{ failure() }}
uses: actions/upload-artifact@v3
with:
name: trial
path: .tox/${TOX_ENV}/log/trial.log
# Use the latest supported Python version for combining coverage to
# prevent parsing errors in older versions when looking at modern code.
- uses: "actions/setup-python@v5"
with:
python-version: "3.11"
- name: "Upload coverage to Codecov"
uses: "codecov/codecov-action@v3"
if: ${{ matrix.tox-prefix == 'coverage' }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
env_vars: GITHUB_REF,GITHUB_COMMIT,GITHUB_USER,GITHUB_WORKFLOW
fail_ci_if_error: true
env:
GITHUB_REF: ${{ github.ref }}
GITHUB_COMMIT: ${{ github.sha }}
GITHUB_USER: ${{ github.actor }}
GITHUB_WORKFLOW: ${{ github.workflow }}
# Helper so that on GitHub repo settings we can configure to single job.
# Then required jobs can be updated directly form the code,
# without having to go the GitHub repo setting -> Protected branch
# and all the clicking.
dbxs-required:
runs-on: ubuntu-latest
timeout-minutes: 10
if: always()
# Add here the jobs that should block the merge of a PR.
needs:
- lint
- mypy
- docs
- docs-linkcheck
- packaging
- unit
steps:
- name: Require all successes
shell: python3 {0}
env:
RESULTS: ${{ toJSON(needs.*.result) }}
run: |
import json
import os
import sys
results = json.loads(os.environ["RESULTS"])
sys.exit(0 if all(result == "success" for result in results) else 1)