version: 2.1

workflows:
  version: 2
  node-multi-build:
    jobs:
      - node-v10
      - node-v12
      - node-v14

jobs:
  node-v10:
    docker:
      - image: node:10
    steps:
      - build
  node-v12:
    docker:
      - image: node:12
    steps:
      - build
  node-v14:
    docker:
      - image: node:14
    steps:
      - build

commands:
  build:
    steps:
      - run:
          name: Node Version
          command: npm version
      - checkout
      - restore_cache:
          keys:
            - v{{ .Environment.CIRCLE_CACHE_VERSION }}-{{ arch }}-npm-cache-{{ .Branch }}-{{ .Environment.CIRCLE_JOB }}
            - v{{ .Environment.CIRCLE_CACHE_VERSION }}-{{ arch }}-npm-cache-master-{{ .Environment.CIRCLE_JOB }}
      - run:
          name: Install dependencies
          command: npm ci
      - run:
          name: Run Test
          command: npm run jest
      - run:
          name: Run ESLINT
          command: npm run eslint
      - save-npm-cache
  save-npm-lock:
    steps:
      - save_cache:
          key: v{{ .Environment.CIRCLE_CACHE_VERSION }}-{{ arch }}-npm-lock-{{ .Branch }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "package-lock.json" }}
          paths:
            - node_modules
  save-npm-cache:
    steps:
      - save_cache:
          key: v{{ .Environment.CIRCLE_CACHE_VERSION }}-{{ arch }}-npm-cache-{{ .Branch }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "package-lock.json" }}
          paths:
            - ~/.npm/_cacache
