name: Python package

on: [push]

jobs:

  format:
    name: Check formatting
    runs-on: ubuntu-latest
    steps:
    - name: Checkout sources
      uses: actions/checkout@v3
    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: 3.8
    - name: Check formatting
      uses: pre-commit/action@v3.0.0

  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
    - name: Checkout sources
      uses: actions/checkout@v3
    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: 3.8
    - name: Lint with flake8
      run: |
        python -m pip install --upgrade pip
        pip install flake8
        flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
        flake8 . --count --exit-zero --statistics
    - name: Lint with pylint
      run: |
        pip install pylint
        pip install -e .
        pylint --errors-only --score=n devolo_home_control_api
        pylint --exit-zero --score=n --disable=E --enable=useless-suppression devolo_home_control_api
    - name: Lint with mypy
      run: |
        pip install mypy types-requests types-setuptools
        mypy --ignore-missing-imports devolo_home_control_api

  test:
    name: Test with Python ${{ matrix.python-version }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
    steps:
    - name: Checkout sources
      uses: actions/checkout@v3
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v4
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -e .[test]
    - name: Test with pytest
      run: |
        pytest --cov=devolo_home_control_api
    - name: Preserve coverage
      uses: actions/upload-artifact@v3
      with:
        name: coverage
        path: .coverage

  coverage:
    name: Upload coverage
    runs-on: ubuntu-latest
    needs: test
    steps:
    - name: Checkout sources
      uses: actions/checkout@v3
    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: 3.8
    - name: Download coverage
      uses: actions/download-artifact@v3
      with:
        name: coverage
    - name: Coveralls
      run: |
        python -m pip install --upgrade pip
        pip install wheel coveralls==1.10.0
        export COVERALLS_REPO_TOKEN=${{ secrets.COVERALLS_TOKEN }}
        coveralls
    - name: Clean up coverage
      uses: geekyeggo/delete-artifact@v2
      with:
        name: coverage
