name: "CI"

on:
  push:
  pull_request:

defaults:
  run:
    shell: bash

jobs:
  tests:
    name: "Python ${{ matrix.python }} on ${{ matrix.os }}"
    runs-on: "${{ matrix.os }}"

    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-latest
          - macos-latest
          - windows-latest
        python:
          # When changing this list, be sure to check the [gh-actions] list in
          # tox.ini so that tox will run properly.
          - "2.7"
          - "3.5"
          - "3.6"
          - "3.7"
          - "3.8"
          - "3.9"
          - "3.10"
        exclude:
          # Windows 2.7 doesn't work because Microsoft removed stuff we needed.
          - os: windows-latest
            python: "2.7"

    steps:
      - name: "Check out the repo"
        uses: "actions/checkout@v2"

      - name: "Set up Python"
        uses: "actions/setup-python@v2"
        with:
          python-version: "${{ matrix.python }}"

      - name: "Install dependencies"
        run: |
          python -m pip install -r requirements.pip

      - name: "Run tox for ${{ matrix.python }}"
        run: |
          python -m tox
          python -m coverage debug data

      - name: "Upload coverage data"
        uses: actions/upload-artifact@v2
        with:
          name: covdata
          path: .coverage.*

  combine:
    name: "Combine and report coverage"
    needs: tests
    runs-on: ubuntu-latest

    steps:
      - name: "Check out the repo"
        uses: "actions/checkout@v2"
        with:
          fetch-depth: "0"

      - name: "Set up Python"
        uses: "actions/setup-python@v2"
        with:
          python-version: "3.8"

      - name: "Install dependencies"
        run: |
          python -m pip install -r requirements.pip

      - name: "Download coverage data"
        uses: actions/download-artifact@v2
        with:
          name: covdata

      - name: "Combine and report"
        run: |
          python -m coverage combine
          python -m coverage report -m
