mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-23 11:43:34 +00:00
652696a9a6
Currently the CI is very slow for pypy vs cpython, one job is 24m vs 3m on cpython. This PR enables poetry environment caching and bypasses coverage checking for pypy. N.B. The poetry cache is keyed on a hash of the `poetry.lock` file.
117 lines
3.5 KiB
YAML
117 lines
3.5 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: ["master"]
|
|
pull_request:
|
|
branches: ["master"]
|
|
workflow_dispatch: # to allow manual re-runs
|
|
|
|
|
|
jobs:
|
|
linting:
|
|
name: "Perform linting checks"
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
matrix:
|
|
python-version: ["3.12"]
|
|
|
|
steps:
|
|
- uses: "actions/checkout@v4"
|
|
- name: Install poetry
|
|
run: pipx install poetry
|
|
- uses: "actions/setup-python@v5"
|
|
with:
|
|
python-version: "${{ matrix.python-version }}"
|
|
cache: 'poetry'
|
|
- name: "Install dependencies"
|
|
run: |
|
|
poetry install
|
|
- name: "Check supported device md files are up to date"
|
|
run: |
|
|
poetry run pre-commit run generate-supported --all-files
|
|
- name: "Linting and code formating (ruff)"
|
|
run: |
|
|
poetry run pre-commit run ruff --all-files
|
|
- name: "Typing checks (mypy)"
|
|
run: |
|
|
poetry run pre-commit run mypy --all-files
|
|
- name: "Run trailing-whitespace"
|
|
run: |
|
|
poetry run pre-commit run trailing-whitespace --all-files
|
|
- name: "Run end-of-file-fixer"
|
|
run: |
|
|
poetry run pre-commit run end-of-file-fixer --all-files
|
|
- name: "Run check-docstring-first"
|
|
run: |
|
|
poetry run pre-commit run check-docstring-first --all-files
|
|
- name: "Run debug-statements"
|
|
run: |
|
|
poetry run pre-commit run debug-statements --all-files
|
|
- name: "Run check-ast"
|
|
run: |
|
|
poetry run pre-commit run check-ast --all-files
|
|
|
|
|
|
tests:
|
|
name: Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }}
|
|
needs: linting
|
|
runs-on: ${{ matrix.os }}
|
|
continue-on-error: ${{ startsWith(matrix.python-version, 'pypy') }}
|
|
|
|
strategy:
|
|
matrix:
|
|
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "pypy-3.8", "pypy-3.10"]
|
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
extras: [false, true]
|
|
exclude:
|
|
- os: macos-latest
|
|
extras: true
|
|
- os: windows-latest
|
|
extras: true
|
|
- os: ubuntu-latest
|
|
python-version: "pypy-3.8"
|
|
extras: true
|
|
- os: ubuntu-latest
|
|
python-version: "pypy-3.10"
|
|
extras: true
|
|
- os: ubuntu-latest
|
|
python-version: "3.8"
|
|
extras: true
|
|
- os: ubuntu-latest
|
|
python-version: "3.9"
|
|
extras: true
|
|
- os: ubuntu-latest
|
|
python-version: "3.10"
|
|
extras: true
|
|
|
|
steps:
|
|
- uses: "actions/checkout@v4"
|
|
- name: Install poetry
|
|
run: pipx install poetry
|
|
- uses: "actions/setup-python@v5"
|
|
with:
|
|
python-version: "${{ matrix.python-version }}"
|
|
cache: 'poetry'
|
|
- name: "Install dependencies (no extras)"
|
|
if: matrix.extras == false
|
|
run: |
|
|
poetry install
|
|
- name: "Install dependencies (with extras)"
|
|
if: matrix.extras == true
|
|
run: |
|
|
poetry install --all-extras
|
|
- name: "Run tests (no coverage)"
|
|
if: ${{ startsWith(matrix.python-version, 'pypy') }}
|
|
run: |
|
|
poetry run pytest
|
|
- name: "Run tests (with coverage)"
|
|
if: ${{ !startsWith(matrix.python-version, 'pypy') }}
|
|
run: |
|
|
poetry run pytest --cov kasa --cov-report xml
|
|
- name: "Upload coverage to Codecov"
|
|
uses: "codecov/codecov-action@v3"
|
|
with:
|
|
token: ${{ secrets.CODECOV_TOKEN }}
|