restore_cache: &restore_cache
  keys:
    - node-modules-{{ arch }}-{{ checksum "package-lock.json" }}

save_cache: &save_cache
  key: node-modules-{{ arch }}-{{ checksum "package-lock.json" }}
  paths:
    - node_modules

steps: &steps
  - checkout
  - restore_cache: *restore_cache
  - run: npm install
  - run: npm test
  - run: npm run coveralls || true
  - save_cache: *save_cache
  - store_test_results:
      path: reports

version: 2
jobs:
  lint:
    docker:
      - image: node:10
    steps:
      - checkout
      - restore_cache: *restore_cache
      - run: npm ci
      - run: npm run lint
      - save_cache: *save_cache

  release:
    docker:
      - image: node:10
    steps:
      - checkout
      - restore_cache: *restore_cache
      - run: npm ci
      - deploy:
          command: |
            if [ "${CIRCLE_BRANCH}" == "master" ]; then
              npm run build
              # According to the sematic release code, this command will not run
              # when there are no changes
              npm run semantic-release
            fi
      - save_cache: *save_cache

workflows:
  version: 2
  build:
    jobs:
      # Reminder: we don't want to block tests on lint, otherwise #no-push
      # prevents tests from running
      - lint
      - release:
          context: semantic-release
          filters:
            branches:
              only: master
          requires:
            - lint
