# Ruby CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-ruby/ for more details
#
version: 2
jobs:
  build:
    docker:
      # specify the version you desire here
      - image: circleci/ruby:2.6.3-node-browsers

      # Specify service dependencies here if necessary
      # CircleCI maintains a library of pre-built images
      # documented at https://circleci.com/docs/2.0/circleci-images/
      - image: circleci/postgres:9.4

    working_directory: ~/build

    steps:
      - checkout

      - run:
          name: Which bundler?
          command: bundle -v

      # Restore bundle cache
      - restore_cache:
          keys:
            - chatwoot-bundle-v2-{{ checksum "Gemfile.lock" }}
            - chatwoot-bundle-v2-

      - run:
          name: Bundle Install
          command: bundle check || bundle install

      - run:
          name: Rubocop
          command: bundle exec rubocop

      # Store bundle cache
      - save_cache:
          key: chatwoot-bundle-v2-{{ checksum "Gemfile.lock" }}
          paths:
            - vendor/bundle

      # Only necessary if app uses webpacker or yarn in some other way
      - restore_cache:
          keys:
            - chatwoot-yarn-{{ checksum "yarn.lock" }}
            - chatwoot-yarn-

      - run:
          name: yarn
          command: yarn install --cache-folder ~/.cache/yarn

      - run:
          name: eslint
          command: yarn run eslint

      - run:
          name: test
          command: yarn test

      - run:
          name: Copy files
          command: |
            cp shared/config/database.yml config/database.yml
            cp shared/config/application.yml config/application.yml

      # Store yarn / webpacker cache
      - save_cache:
          key: chatwoot-yarn-{{ checksum "yarn.lock" }}
          paths:
            - ~/.cache/yarn

      # Database setup
      - run: yarn install --check-files
      - run: bundle exec rake db:create
      - run: bundle exec rake db:schema:load


      # Run rails tests
      - type: shell
        command: |
          bundle exec rspec $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)

      # collect reports
      - store_test_results:
          path: /tmp/test-results
      - store_artifacts:
          path: /tmp/test-results
          destination: test-results
