name: Python CI

on:
  push: {}
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        python-version:
        - "3.8"
        - "3.9"
        - "3.10"
        - "3.11"
        - "3.12"
        - "3.13"
        os: [ubuntu-latest, macos-latest, windows-latest]
        include:
        - python-version: "pypy-3.9"
          os: ubuntu-latest
        - python-version: "pypy-3.10"
          os: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v4
      with:
        python-version: ${{ matrix.python-version }}
        allow-prereleases: true
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip twine
        pip install poetry
        poetry install
    - name: Run test suite
      run: |
        poetry run py.test -v --cov=tinydb
    - name: Perform type check
      run: |
        poetry run pip install pytest-mypy
        poetry run pytest --mypy -m mypy tinydb tests
    - name: Verify dist package format
      run: |
        poetry build
        twine check dist/*
      if: ${{ contains(matrix.python-version, '3.12') }}
    - name: Upload coverage result
      if: ${{ env.COVERALLS_REPO_TOKEN != 'windows-latest' }}
      env:
        COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: |
         poetry run coveralls
