version: 2

defaults: &defaults
  working_directory: ~/zunder
  docker:
    - image: cypress/base:8
      environment:
        TERM: xterm
        npm_config_loglevel: warn

jobs:
  install-and-cache-deps:
    <<: *defaults
    steps:
      - checkout
      - restore_cache:
          keys:
            - zunder-{{ checksum "circle.yml" }}-{{ .Branch }}-{{ checksum "package-lock.json" }}
            - zunder-{{ checksum "circle.yml" }}-{{ .Branch }}
            - zunder-{{ checksum "circle.yml" }}-
            - zunder-
      - run: npm ci
      - run: cd test/projects && npm ci
      # run verify and then save cache. Then verified status is cached
      - run: npm run cypress:verify
      - save_cache:
          key: zunder-{{ checksum "circle.yml" }}-{{ .Branch }}-{{ checksum "package-lock.json" }}
          paths:
            - ~/.npm
            - ~/.cache
      - persist_to_workspace:
          root: ~/
          paths:
            - zunder/node_modules
            - zunder/test/projects/node_modules
            - .cache

  lint:
    <<: *defaults
    steps:
      - checkout
      - attach_workspace:
          at: ~/
      - run: npm run lint

  build:
    <<: *defaults
    steps:
      - checkout
      - attach_workspace:
          at: ~/
      - run: npm run build
      - persist_to_workspace:
          root: ~/
          paths:
            - zunder/dist

  test:
    <<: *defaults
    steps:
      - checkout
      - attach_workspace:
          at: ~/
      - run: npm test -- --record
      - store_artifacts:
          path: npm-debug.log

workflows:
  version: 2
  "lint, build, & test":
    jobs:
      - install-and-cache-deps
      - lint:
          requires:
            - install-and-cache-deps
      - build:
          requires:
            - lint
      - test:
          requires:
            - build
