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

name: continuous-integration

on:
  push:
    branches: [main]
    tags:
    - "v[0-9]+.[0-9]+.[0-9]+*"
  pull_request:

jobs:

  tests:

    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        python-version: ["3.9", "3.10", "3.11", "3.12"]
        include:
        - os: windows-latest
          python-version: 3.9

    runs-on: ${{ matrix.os }}

    steps:
    - uses: actions/checkout@v4
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -e .[testing]
    - name: Run pytest
      run: |
        pytest --cov=sphinx_external_toc --cov-report=xml --cov-report=term-missing
    - name: Upload to Codecov
      if: matrix.python-version == 3.11
      uses: codecov/codecov-action@v3
      with:
        name: pytests-py3.11
        flags: pytests
        file: ./coverage.xml
        fail_ci_if_error: true

  publish:

    name: Publish to PyPI
    needs: [tests]
    if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags')
    runs-on: ubuntu-latest
    steps:
    - name: Checkout source
      uses: actions/checkout@v4
    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: 3.11
    - name: install flit
      run: |
        pip install flit~=3.4
    - name: Build and publish
      run: |
        flit publish
      env:
        FLIT_USERNAME: __token__
        FLIT_PASSWORD: ${{ secrets.PYPI_KEY }}
