name: CI

# Enable Buildkit and let compose use it to speed up image building
env:
  DOCKER_BUILDKIT: 1
  COMPOSE_DOCKER_CLI_BUILD: 1

on:
  pull_request:
    branches: [ "master" ]
    paths-ignore: [ "docs/**" ]

  push:
    branches: [ "master" ]
    paths-ignore: [ "docs/**" ]


jobs:
  flake8:
    runs-on: ubuntu-latest
    steps:

      - name: Checkout Code Repository
        uses: actions/checkout@v2

      - name: Set up Python 3.8
        uses: actions/setup-python@v2
        with:
          python-version: 3.8

      - name: Install flake8
        run: |
          python -m pip install --upgrade pip
          pip install flake8

      - name: Lint with flake8
        run: flake8

# With no caching at all the entire ci process takes 4m 30s to complete!
  pytest:
    runs-on: ubuntu-latest
    steps:

      - name: Checkout Code Repository
        uses: actions/checkout@v2
      {% if cookiecutter.use_docker == 'y' -%}

      - name: Build the Stack
        run:  docker-compose -f local.yml build

      - name: Make DB Migrations
        run:  docker-compose -f local.yml run --rm django python manage.py migrate

      - name: Run the Stack
        run:  docker-compose -f local.yml up -d

      - name: Run Django Tests
        run:  docker-compose -f local.yml exec -T django pytest

      - name: Tear down the Stack
        run:  docker-compose down

      {%- else %}

      - name: Set up Python 3.8
        uses: actions/setup-python@v2
        with:
          python-version: 3.8

      - name: Get pip cache dir
        id: pip-cache-location
        run: |
          echo "::set-output name=dir::$(pip cache dir)"

      {% raw %}
      - name: Cache pip Project Dependencies
        uses: actions/cache@v2
        with:
          # Get the location of pip cache dir
          path: ${{ steps.pip-cache-location.outputs.dir }}
          # Look to see if there is a cache hit for the corresponding requirements file
          key: ${{ runner.os }}-pip-${{ hashFiles('**/local.txt') }}
          restore-keys: |
            ${{ runner.os }}-pip-
      {% endraw %}

      - name: Install Dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements/local.txt

      - name: Test with pytest
        run:  pytest

      {%- endif %}
