version: 2

aliases:
  - &restore-cache
    restore_cache:
        key: dependency-cache-{{ checksum "package.json" }}
  - &install-deps
    run:
        name: Install dependencies
        command: npm ci
  - &build-packages
    run:
        name: Build
        command: npm run build
  - &run-unit-tests
    run:
        name: Test
        command: npm run test

jobs:
  build:
    working_directory: ~/nest
    docker:
      - image: circleci/node:12
    steps:
      - checkout
      - run:
          name: Update NPM version
          command: 'sudo npm install -g npm@latest'
      - restore_cache:
          key: dependency-cache-{{ checksum "package.json" }}
      - run:
          name: Install dependencies
          command: npm ci
      - save_cache:
          key: dependency-cache-{{ checksum "package.json" }}
          paths:
            - ./node_modules
      - run:
          name: Build
          command: npm run build    

  unit_tests:
    working_directory: ~/nest
    docker:
      - image: circleci/node:12
    steps:
      - checkout
      - *restore-cache
      - *install-deps
      - *build-packages
      - *run-unit-tests

workflows:
  version: 2
  build-and-test:
    jobs:
      - build
      - unit_tests:
          requires:
            - build
      