name: CI

on:
  push:
    branches:
    - main
    tags:
  pull_request:

jobs:
  tests:
    name: ${{ matrix.name }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: true
      matrix:
        include:

          - name: Python 3.7 with minimal dependencies
            os: ubuntu-latest
            python: 3.7
            toxenv: py37-test

          - name: Python 3.8 with all optional dependencies
            os: ubuntu-latest
            python: 3.8
            toxenv: py38-test-alldeps
            toxargs: -v --develop

          - name: Python 3.6 with oldest supported version of all dependencies
            os: ubuntu-16.04
            python: 3.6
            toxenv: py36-test-oldestdeps   
            
          - name: Python 3.7 with numpy 1.21 and full coverage
            os: ubuntu-latest
            python: 3.7
            toxenv: py37-test-alldeps-numpy121-cov

          - name: Python 3.8 with all optional dependencies (Windows)
            os: windows-latest
            python: 3.8
            toxenv: py38-test-alldeps
            
          - name: Python 3.7 with all optional dependencies (MacOS X)
            os: macos-latest
            python: 3.7
            toxenv: py37-test-alldeps

    steps:
    - name: Checkout code
      uses: actions/checkout@v2
      with:
        fetch-depth: 0
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python }}
    - name: Install language-pack-de and tzdata
      if: startsWith(matrix.os, 'ubuntu')
      run: sudo apt-get install language-pack-de tzdata
    - name: Install Python dependencies
      run: python -m pip install --upgrade tox codecov
    - name: Run tests
      run: tox ${{ matrix.toxargs }} -e ${{ matrix.toxenv }} -- ${{ matrix.toxposargs }}
    - name: Upload coverage to codecov
      if: ${{ contains(matrix.toxenv,'-cov') }}
      uses: codecov/codecov-action@v1
      with:
        file: ./coverage.xml

  allowed_failures:
    name: ${{ matrix.name }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:

          - name: Code style checks
            os: ubuntu-latest
            python: 3.x
            toxenv: codestyle
 
          - name: (Allowed Failure) Python 3.7 with dev version of key dependencies
            os: ubuntu-latest
            python: 3.7
            toxenv: py37-test-devdeps

    steps:
    - name: Checkout code
      uses: actions/checkout@v2
      with:
        fetch-depth: 0
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python }}
    - name: Install language-pack-de and tzdata
      if: startsWith(matrix.os, 'ubuntu')
      run: sudo apt-get install language-pack-de tzdata
    - name: Install Python dependencies
      run: python -m pip install --upgrade tox codecov
    - name: Run tests
      run: tox ${{ matrix.toxargs }} -e ${{ matrix.toxenv }} -- ${{ matrix.toxposargs }}
