name: Tests
on:
  push:
    branches:
      - main
      - '*.x'
    paths-ignore:
      - 'docs/**'
      - '*.md'
      - '*.rst'
  pull_request:
    branches:
      - main
      - '*.x'
    paths-ignore:
      - 'docs/**'
      - '*.md'
      - '*.rst'
jobs:
  tests:
    name: ${{ matrix.name }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - {name: Linux, python: '3.11', os: ubuntu-latest, tox: py311}
          - {name: '3.8', python: '3.8', os: ubuntu-latest, tox: py38}
          - {name: '3.9', python: '3.9', os: ubuntu-latest, tox: py39}
          - {name: '3.10', python: '3.10', os: ubuntu-latest, tox: py310}
          - {name: '3.11', python: '3.11', os: ubuntu-latest, tox: py311}
          - {name: Typing, python: '3.12', os: ubuntu-latest, tox: typing}
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python }}
      - name: install external dependencies Linux
        if: matrix.os == 'ubuntu-latest'
        run: |
          sudo apt-get update
          sudo apt-get install libmemcached-dev memcached redis-server
      - name: setup dynamodb-local
        uses: rrainn/dynamodb-action@v2.0.1
      - name: update pip
        run: |
          pip install -U wheel
          pip install -U setuptools
          python -m pip install -U pip
      - name: get pip cache dir
        id: pip-cache
        run: echo "::set-output name=dir::$(pip cache dir)"
      - name: cache pip
        uses: actions/cache@v2
        with:
          path: ${{ steps.pip-cache.outputs.dir }}
          key: pip|${{ runner.os }}|${{ matrix.python }}|${{ hashFiles('setup.py') }}|${{ hashFiles('requirements/*.txt') }}
      - name: cache mypy
        if: matrix.tox == 'typing'
        uses: actions/cache@v2
        with:
          path: ./.mypy_cache
          key: mypy|${{ matrix.python }}|${{ hashFiles('setup.cfg') }}
      - run: pip install tox
      - run: tox -e ${{ matrix.tox }}