version: 2
jobs:
  build:
    docker:
      - image: circleci/node:latest
    working_directory: ~/repo

    steps:
      - checkout
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "package.json" }}
          - v1-dependencies-
      - run:
          name: Install npm dependencies
          command: yarn --production=false
      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-{{ checksum "package.json" }}

  test:
    docker:
      - image: circleci/node:latest
    working_directory: ~/repo
    steps:
      - checkout
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "package.json" }}
          - v1-dependencies-
      - run:
          name: Run tests
          command: yarn test --coverage
      - run:
          name: Generate coveralls config
          command: "echo repo_token: $COVERALLS_REPO_TOKEN > ./.coveralls.yml"
      - run:
          name: Upload coverage to coveralls
          command: cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js
      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-{{ checksum "package.json" }}
  compile:
    docker:
      - image: circleci/node:latest
    working_directory: ~/repo
    steps:
      - checkout
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "package.json" }}
          - v1-dependencies-
      - run:
          name: Compile final build
          command: yarn build
      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-{{ checksum "package.json" }}


workflows:
  version: 2
  test_and_compile:
    jobs:
      - build
      - test:
          requires:
            - build
      - compile:
          requires:
            - build
