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 }}