# Python CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-python/ for more details
#
version: 2
jobs:
  build:
    docker:
      - image: circleci/python:3.6.8-stretch-node
        environment:
          DATABASE_URL: postgresql://root@localhost/opentech?sslmode=disable
          PGHOST: localhost
          PGUSER: root
          DJANGO_SETTINGS_MODULE: opentech.settings.test
          SEND_MESSAGES: false

      - image: circleci/postgres:10.5
        environment:
          POSTGRES_USER: root
          POSTGRES_DB: opentech

    working_directory: ~/repo

    steps:
      - checkout

      - run:
          name: set owner on /usr/local
          command: sudo chown -R circleci:circleci /usr/local

      - restore_cache:
          keys:
            - v2-python-{{ .Branch }}-{{ checksum "requirements.txt" }}
            - v2-python-{{ .Branch }}-
            - v2-python-

      - restore_cache:
          keys:
            - v2-npm-{{ .Branch }}-{{ checksum "package-lock.json" }}
            - v2-npm-{{ .Branch }}-
            - v2-npm-

      - run:
          name: install python dependencies
          command: |
            python3 -m venv venv
            . venv/bin/activate
            pip install coverage codecov
            pip install -r requirements.txt

      - run:
          name: install node dependencies
          command: |
            npm install --quiet
            npm install -g gulp-cli

      - save_cache:
          paths:
            - ./venv
          key: v2-python-{{ .Branch }}-{{ checksum "requirements.txt" }}

      - save_cache:
          paths:
            - ./node_modules
            - /usr/local/lib/node_modules
            - /usr/local/bin
          key: v2-npm-{{ .Branch }}-{{ checksum "package-lock.json" }}

      - run:
          name: buils static assets
          command: gulp deploy

      - run:
          name: run tests
          command: |
            . venv/bin/activate
            flake8 ./opentech
            python manage.py collectstatic --noinput --verbosity=0
            python manage.py check
            python manage.py makemigrations --check --noinput --verbosity=1
            coverage run --source='opentech' manage.py test
            codecov
