# 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: Python package

on:
  push:
    branches: [ develop, release/* ]
  pull_request:
    branches: [ develop ]
  schedule:
    - cron:  '27 19 * * *'

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.7, 3.8, 3.9, '3.10']
        database:
        - pgsql
        - mysql
        - sqlite
    # There's some recursion error here (See #76)
    steps:
    - uses: actions/checkout@v2
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        python -m pip install -r test-requirements.txt
        python -m pip install tox-gh-actions coveralls
        python -m pip install --upgrade wheel # stop pip complaining about a setup.py install
        sudo apt-get install python3-dev
        pip install .
    - name: Test with tox
      env:
        DB: ${{ matrix.database }}
        GA_PYTHON_VERSION: ${{ matrix.python-version }}
      run: |
        . ./github-ci.sh
        tox --workdir=.
    services:
      # Label used to access the service container
      postgres:
        # Docker Hub image
        image: postgres
        # Provide the password for postgres
        env:
          POSTGRES_PASSWORD: postgres
        # Set health checks to wait until postgres has started
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          # Maps tcp port 5432 on service container to the host
          - 5432:5432
      mysql:
        # Docker Hub image
        image: mysql
        # Provide the password for mysql
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: 1
          MYSQL_USER: test
          MYSQL_PASSWORD: mysql
          MYSQL_DATABASE: test
        ports:
          # Maps tcp port 3306 on service container to the host
          - 3306:3306

  dev-deploy:
    name: Deploy Dev Package to PyPI
    needs: build
    if: github.event_name == 'push'
      && (github.ref == 'refs/heads/develop'
          || startsWith(github.ref, 'refs/heads/release/'))
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python 3
        uses: actions/setup-python@v2
        with:
          python-version: 3
      - name: Install Deploy Dependencies
        run: pip install wheel twine
      - name: Deploy
        run: ./deploy.sh
        env:
          TWINE_USERNAME: __token__
          TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}
