# Javascript Node CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-javascript/ for more details

version: 2
jobs:
  setup:
    docker:
      - image: circleci/node:10.12.0-stretch
    working_directory: ~/repo
    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-repo-{{ .Environment.CIRCLE_SHA1 }}
            - v1-dependencies-{{ checksum "package.json" }}
      - run: yarn
      - save_cache:
          key: v1-dependencies-{{ checksum "package.json" }}
          paths:
            - node_modules
            - yarn.lock
      - save_cache:
          key: v1-repo-{{ .Environment.CIRCLE_SHA1 }}
          paths:
            - ~/.ssh
            - ~/repo

  build:
    docker:
      - image: circleci/node:10.12.0-stretch
    working_directory: ~/repo
    steps:
      - restore_cache:
          keys:
            - v1-repo-{{ .Environment.CIRCLE_SHA1 }}
      - run: NODE_ENV=development yarn webpack
      - run: NODE_ENV=production yarn webpack -p
      - save_cache:
          key: v1-build-{{ .Environment.CIRCLE_SHA1 }}
          paths:
            - ./build

  documentation:
    docker:
      - image: circleci/node:10.12.0-stretch
    working_directory: ~/repo
    steps:
      - restore_cache:
          keys:
            - v1-repo-{{ .Environment.CIRCLE_SHA1 }}
      - run: CI=false yarn docz build
      - save_cache:
          key: v1-docs-{{ .Environment.CIRCLE_SHA1 }}
          paths:
            - ./docs

  test:
    docker:
      - image: circleci/node:10.12.0-stretch
    working_directory: ~/repo
    steps:
      - restore_cache:
          keys:
            - v1-repo-{{ .Environment.CIRCLE_SHA1 }}
      - run: yarn test

  publish:
    docker:
      - image: circleci/node:10.12.0-stretch
    working_directory: ~/repo
    steps:
      - add_ssh_keys:
          fingerprints:
            - "ca:0f:fb:ed:9e:0c:aa:ba:9d:79:76:8c:35:69:57:de"
      - restore_cache:
          keys:
            - v1-repo-{{ .Environment.CIRCLE_SHA1 }}
            - v1-build-{{ .Environment.CIRCLE_SHA1 }}
            - v1-docs-{{ .Environment.CIRCLE_SHA1 }}
      - run: git add ./build ./docs
      - run: git commit -m 'CircleCI - update build & docs' || echo "No changes to commit"
      - run: git push origin HEAD

workflows:
  version: 2
  build_and_test:
    jobs:
      - setup
      - build:
          requires:
            - setup
      - documentation:
          requires:
            - setup
      - test:
          requires:
            - setup
      - publish:
          requires:
            - build
            - documentation
            - test
