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

name: Test the library

on:
  push:
    branches:
      - master
    tags:
      - "*"
  pull_request:

jobs:
  test:
    name: Running tests
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true

      - name: "Install dependencies"
        run: |
          sudo apt-get install zlib1g-dev

      - name: Set up Python 3.9
        uses: actions/setup-python@v2
        with:
          python-version: 3.9
          cache: 'pip'

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip setuptools

      - name: Test with tox
        run: |
          pip install tox
          tox

      - name: Build docs
        if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')
        run: |
          tox -e docs
          touch ./docs/_build/html/.nojekyll

      - name: GH Pages Deployment
        if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
        uses: JamesIves/github-pages-deploy-action@4.1.3
        with:
          branch: gh-pages # The branch the action should deploy to.
          folder: ./docs/_build/html
          clean: true # Automatically remove deleted files from the deploy branch

  build_sdist:
    name: Build source distribution
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true

      - name: Build sdist
        run: pipx run build --sdist

      - uses: actions/upload-artifact@v3
        with:
          path: dist/*.tar.gz

  upload_pypi:
    needs: [test, build_sdist]
    runs-on: ubuntu-latest
    # upload to PyPI on every tag starting with 'v'
    if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
    # alternatively, to publish when a GitHub Release is created, use the following rule:
    # if: github.event_name == 'release' && github.event.action == 'published'
    steps:
      - uses: actions/download-artifact@v3
        with:
          # unpacks default artifact into dist/
          # if `name: artifact` is omitted, the action will create extra parent dir
          name: artifact
          path: dist

      - uses: pypa/gh-action-pypi-publish@v1.8.3
        with:
          user: __token__
          password: ${{ secrets.PYPI_PASSWORD }}
