Skip to content

Use typing_extensions.TypedDict on python < 3.12 for pydantic support #887

Use typing_extensions.TypedDict on python < 3.12 for pydantic support

Use typing_extensions.TypedDict on python < 3.12 for pydantic support #887

Workflow file for this run

name: Tests
on:
release:
types: [ published ]
pull_request:
push:
env:
PY_COLORS: "1"
jobs:
test:
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.experimental }} # See: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idcontinue-on-error
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
experimental: [false]
python-version: [
"3.8",
"3.9",
"3.10",
"3.11",
"3.12",
"3.13",
"pypy-3.9",
"pypy-3.10",
]
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install tox
- name: Setup SocketCAN
if: ${{ matrix.os == 'ubuntu-latest' }}
run: |
sudo apt-get -y install linux-modules-extra-$(uname -r)
sudo ./test/open_vcan.sh
- name: Test with pytest via tox
run: |
tox -e gh
env:
# SocketCAN tests currently fail with PyPy because it does not support raw CAN sockets
# See: https://foss.heptapod.net/pypy/pypy/-/issues/3809
TEST_SOCKETCAN: "${{ matrix.os == 'ubuntu-latest' && ! startsWith(matrix.python-version, 'pypy' ) }}"
- name: Coveralls Parallel
uses: coverallsapp/github-action@v2
with:
github-token: ${{ secrets.github_token }}
flag-name: Unittests-${{ matrix.os }}-${{ matrix.python-version }}
parallel: true
path-to-lcov: ./coverage.lcov
coveralls:
needs: test
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
uses: coverallsapp/github-action@v2
with:
github-token: ${{ secrets.github_token }}
parallel-finished: true
static-code-analysis:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e .[lint]
- name: mypy 3.8
run: |
mypy --python-version 3.8 .
- name: mypy 3.9
run: |
mypy --python-version 3.9 .
- name: mypy 3.10
run: |
mypy --python-version 3.10 .
- name: mypy 3.11
run: |
mypy --python-version 3.11 .
- name: mypy 3.12
run: |
mypy --python-version 3.12 .
- name: ruff
run: |
ruff check can
- name: pylint
run: |
pylint \
can/**.py \
can/io \
doc/conf.py \
examples/**.py \
can/interfaces/socketcan
format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e .[lint]
- name: Code Format Check with Black
run: |
black --check --verbose .
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e .[canalystii,gs_usb,mf4]
pip install -r doc/doc-requirements.txt
- name: Build documentation
run: |
python -m sphinx -Wan --keep-going doc build
- name: Run doctest
run: |
python -m sphinx -b doctest -W --keep-going doc build
build:
name: Packaging
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # fetch tags for setuptools-scm
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Build wheel and sdist
run: pipx run build
- name: Check build artifacts
run: pipx run twine check --strict dist/*
- name: Save artifacts
uses: actions/upload-artifact@v4
with:
name: release
path: ./dist
upload_pypi:
needs: [build]
name: Release to PyPi
runs-on: ubuntu-latest
permissions:
id-token: write
attestations: write
# upload to PyPI only on release
if: github.event.release && github.event.action == 'published'
steps:
- uses: actions/download-artifact@v4
with:
path: dist
merge-multiple: true
- name: Publish release distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1