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.10"] steps: - uses: "actions/checkout@v2" - uses: "actions/setup-python@v2" with: python-version: "${{ matrix.python-version }}" - name: "Install dependencies" run: | python -m pip install --upgrade pip poetry poetry install - name: "Run pyupgrade" run: | poetry run pre-commit run pyupgrade --all-files - name: "Code formating (black)" run: | poetry run pre-commit run black --all-files - name: "Code formating (flake8)" run: | poetry run pre-commit run flake8 --all-files - name: "Order of imports (isort)" run: | poetry run pre-commit run isort --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 }}" needs: linting runs-on: ${{ matrix.os }} strategy: matrix: python-version: ["3.7", "3.8", "3.9", "3.10", "pypy-3.7"] os: [ubuntu-latest, macos-latest, windows-latest] # exclude pypy on windows, as the poetry install seems to be very flaky: # PermissionError(13, 'The process cannot access the file because it is being used by another process')) # at C:\hostedtoolcache\windows\PyPy\3.7.10\x86\site-packages\requests\models.py:761 in generate exclude: - python-version: pypy-3.7 os: windows-latest steps: - uses: "actions/checkout@v2" - uses: "actions/setup-python@v2" with: python-version: "${{ matrix.python-version }}" - name: "Install dependencies" run: | python -m pip install --upgrade pip poetry poetry install - name: "Run tests" run: | poetry run pytest --cov kasa --cov-report xml - name: "Upload coverage to Codecov" uses: "codecov/codecov-action@v2" with: fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }}