---
version: 2

references:

  filter_all: &filter_all
    filters:
      branches:
        only: /.*/
      tags:
        only: /.*/

  filter_stg: &filter_head
    filters:
      branches:
        only: master
      tags:
        only: stg

  filter_prd: &filter_release
    filters:
      branches:
        ignore: /.*/
      tags:
        only: /v[0-9]+\.[0-9]+\.[0-9]+(-[0-9]+)?/

jobs:

  test_node10:
    docker:
      - image: circleci/node:10
    working_directory: ~/src
    steps:
      - checkout
      - restore_cache:
          keys:
          - v2-node10-dependencies-{{ checksum "package.json" }}
          - v2-node10-dependencies-
      - run: npm install
      - save_cache:
          key: v2-node10-dependencies-{{ checksum "package.json" }}
          paths:
            - node_modules
      - run: npm test

  test_node12:
    docker:
      - image: circleci/node:12
    working_directory: ~/src
    steps:
      - checkout
      - restore_cache:
          keys:
          - v2-node12-dependencies-{{ checksum "package.json" }}
          - v2-node12-dependencies-
      - run: npm install
      - save_cache:
          key: v2-node12-dependencies-{{ checksum "package.json" }}
          paths:
            - node_modules
      - run: npm test
      - run: cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js

  test_node14:
    docker:
      - image: circleci/node:14
    working_directory: ~/src
    steps:
      - checkout
      - restore_cache:
          keys:
          - v2-node14-dependencies-{{ checksum "package.json" }}
          - v2-node14-dependencies-
      - run: npm install
      - save_cache:
          key: v2-node14-dependencies-{{ checksum "package.json" }}
          paths:
            - node_modules
      - run: npm test

  deploy_docs:
    docker:
      - image: circleci/node:14
    working_directory: ~/src
    steps:
      - checkout
      - restore_cache:
          key: v1-website-dependencies-{{ checksum "website/package.json" }}
      - run:
          name: Build
          command: |
            sudo apt-get -y install awscli
            bash ./.circleci/scripts/deploy-docs.sh
      - save_cache:
          key: v1-website-dependencies-{{ checksum "website/package.json" }}
          paths:
            - website/node_modules

  deploy_package:
    docker:
      - image: circleci/node:12
    working_directory: ~/repo
    steps:
      - checkout
      - restore_cache:
          keys:
          - v2-node12-dependencies-{{ checksum "package.json" }}
          - v2-node12-dependencies-
      - run: npm install
      - run: |
          echo "$NPMRC" > ~/.npmrc
          chmod 600 ~/.npmrc
          if [[ "$CIRCLE_TAG" = *-* ]]; then
            npm publish --tag=prerelease
          else
            npm publish
          fi

workflows:
  version: 2
  test:
    jobs:
      - test_node10:
          <<: *filter_all
      - test_node12:
          <<: *filter_all
      - test_node14:
          <<: *filter_all
      - deploy_docs:
          <<: *filter_head
          context:
            - Documentation
          requires:
            - test_node10
            - test_node12
            - test_node14
      - deploy_package:
          <<: *filter_release
          context:
            - npm-publish
          requires:
            - test_node10
            - test_node12
            - test_node14
