# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions

name: Testing

on: push

jobs:
  lint:
    name: Lint code
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - uses: actions/setup-python@v2
        name: Install Python
        with:
          python-version: '3.8'

      # Lint things before going any further
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install flake8

      - name: Lint with flake8
        run: |
          # stop the build if there are Python syntax errors or undefined names
          flake8 . --count --show-source --statistics
          # exit-zero treats all errors as warnings.
          flake8 . --count --exit-zero --max-complexity=10 --statistics

  test:
    name: Test on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      max-parallel: 2
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest]
        python-version: [3.7, 3.8, 3.9]

    steps:
      # Checkout and env setup
      - uses: actions/checkout@v2
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install dependencies (Linux)
        if: ${{ runner.os == 'Linux' }}
        run: |
          sudo apt-get update
          sudo bash scripts/ci_prepare_linux_for_build.sh

      - name: Install dependencies (macOS)
        if: ${{ runner.os == 'macOS' }}
        run: |
          bash scripts/ci_prepare_macos_for_build.sh

      - name: Build project
        run: |
          bash run_developer_setup.sh

      # Install and test
      - name: Install project
        run: |
          pip install -e .[tests]

      - name: Test project
        run: |
          pytest
