name: Tests

on:
  push:
    branches:
      - dev-3.x
  pull_request:
    branches:
      - dev-3.x

jobs:
  build:
    strategy:
      max-parallel: 6
      fail-fast: true
      matrix:
        os:
          - ubuntu-latest
          - macos-latest
          - windows-latest
        python-version:
          - 3.7
          - 3.8
          - 3.9

    defaults:
      # Windows is sucks. Force use bash instead of PowerShell
      run:
        shell: bash

    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@master

      - name: Set up Python ${{ matrix.python-version }} on ${{ matrix.os }}
        uses: actions/setup-python@v1
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install and configure Poetry
        uses: snok/install-poetry@v1.1.4
        with:
          virtualenvs-create: true
          virtualenvs-in-project: true

      - name: Load cached venv
        id: cached-poetry-dependencies
        uses: actions/cache@v2
        with:
          path: .venv
          key: venv-${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('**/poetry.lock') }}

      - name: Project dependencies
        if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
        run: |
          poetry install --no-interaction

      - name: Lint code
        run: |
          poetry run flake8 aiogram
          poetry run mypy aiogram

      - name: Check code-style (Black)
        run: |
          poetry run black --check --diff aiogram tests

      - name: Run tests
        run: |
          poetry run pytest --cov=aiogram --cov-config .coveragerc --cov-report=xml

      - uses: codecov/codecov-action@v1
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          file: coverage.xml
          flags: unittests
          name: py-${{ matrix.python-version }}-${{ matrix.os }}
          fail_ci_if_error: true
