version: 2.1

orbs:
    node: circleci/node@1.1.6
    coveralls: coveralls/coveralls@1.0.4

# Define common steps all parts of the test workflow use
references:
    ignore-gh-pages: &ignore-gh-pages
        branches:
            ignore:
                - gh-pages

commands:
    shared-test-steps:
        steps:
            - checkout
            - node/with-cache:
                  steps:
                      - run:
                            name: rebuild packages for this node version
                            command: npm rebuild
                      - run:
                            name: display-node-version
                            command: node --version
                      - run:
                            name: test
                            command: npm test
                            environment:
                                NODE_ENV: test

jobs:
    build:
        executor:
            name: node/default
        steps:
            - checkout
            - node/with-cache:
                  steps:
                      - run:
                            name: npm-install
                            command: npm install

    linter:
        executor:
            name: node/default
        steps:
            - checkout
            - node/with-cache:
                  steps:
                      - run:
                            name: linter
                            command: npm run lint

    deploy-docs-website:
        executor:
            name: node/default
        steps:
            - checkout
            - run:
                name: Install and configure dependencies
                command: |
                    git config user.email "nickcambel5@gmail.com"
                    git config user.name "ci-build"
            - add_ssh_keys:
                  fingerprints:
                      - '8d:2f:92:78:66:bb:eb:af:2d:bf:5f:99:fc:28:cc:8f'
            - node/with-cache:
                  steps:
                      - run:
                            name: deploy docs
                            command: npm run doc

    test-node-default:
        executor:
            name: node/default
        steps:
            - checkout
            - shared-test-steps
            - coveralls/upload

# Run all the tests is parallel
workflows:
    build-and-test:
        jobs:
            - build:
                  filters:
                      <<: *ignore-gh-pages

            - linter:
                  filters:
                      <<: *ignore-gh-pages
                  requires:
                      - build

            - test-node-default:
                  filters:
                      <<: *ignore-gh-pages
                  requires:
                      - linter

            - deploy-docs-website:
                  filters:
                      branches:
                          only:
                              - master
                  requires:
                      - test-node-default
