# -*- coding: utf-8 -*-
#
# Copyright (C) 2020 CERN.
# Copyright (C) 2020 Northwestern University.
#
# Invenio App RDM is free software; you can redistribute it and/or modify it
# under the terms of the MIT License; see LICENSE file for more details.

name: CI

on:
  push:
    branches: master
  pull_request:
    branches: master
  schedule:
    # * is a special character in YAML so you have to quote this string
    - cron:  '0 3 * * 6'
  workflow_dispatch:
    inputs:
      reason:
        description: 'Reason'
        required: false
        default: 'Manual trigger'

jobs:
  Tests:
    runs-on: ubuntu-20.04
    strategy:
      matrix:
          python-version: [3.6, 3.7, 3.8, 3.9]
          requirements-level: [min, pypi]
          db-service: [postgresql9, postgresql12]
          search-service: [elasticsearch6, elasticsearch7]
          exclude:
          - python-version: 3.6
            requirements-level: pypi

          - python-version: 3.7
            requirements-level: min

          - python-version: 3.8
            requirements-level: min

          - python-version: 3.9
            requirements-level: min

          - db-service: postgresql12
            requirements-level: min

          - search-service: elasticsearch7
            requirements-level: min

          - db-service: postgresql9
            requirements-level: pypi

          - search-service: elasticsearch6
            requirements-level: pypi
          include:
          - db-service: postgresql9
            DB_EXTRAS: "postgresql"

          - db-service: postgresql12
            DB_EXTRAS: "postgresql"

          - search-service: elasticsearch6
            SEARCH_EXTRAS: "elasticsearch6"

          - search-service: elasticsearch7
            SEARCH_EXTRAS: "elasticsearch7"

    env:
      DB: ${{ matrix.db-service }}
      SEARCH: ${{ matrix.search-service }}
      EXTRAS: all,${{ matrix.DB_EXTRAS }},${{ matrix.SEARCH_EXTRAS }}
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python-version }}

      - name: Generate dependencies
        run: |
          python -m pip install --upgrade pip setuptools py wheel requirements-builder
          requirements-builder -e "$EXTRAS" --level=${{ matrix.requirements-level }} setup.py > .${{ matrix.requirements-level }}-${{ matrix.python-version }}-requirements.txt

      - name: Cache pip
        uses: actions/cache@v2
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ hashFiles('.${{ matrix.requirements-level }}-${{ matrix.python-version }}-requirements.txt') }}

      - name: Install dependencies
        run: |
          pip install -r .${{ matrix.requirements-level }}-${{ matrix.python-version }}-requirements.txt
          pip install ".[$EXTRAS]"
          pip freeze
          docker --version
          docker-compose --version

      - name: Run tests
        run: |
          ./run-tests.sh
