version: 2.0

references:
  executor_config: &executor_config
    docker:
      - image: circleci/node:10.16
    working_directory: ~/app

jobs:
  setup:
    <<: *executor_config
    steps:
      - checkout

      - restore_cache:
          keys:
          - v1.0-dependencies-{{ checksum "package-lock.json" }}
          - v1.0-dependencies-

      - run: npm install

      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-{{ checksum "package.json" }}
      - persist_to_workspace:
          root: .
          paths: .

  build:
    <<: *executor_config
    steps:
      - attach_workspace:
          at: .

      - run: npm run build

      - persist_to_workspace:
          root: .
          paths: .

  trigger-docker-hub:
    <<: *executor_config
    steps:
      - attach_workspace:
          at: .
      - run:
          name: Trigger DockerHub
          command: .docker/triggerDockerHub.sh

workflows:
  version: 2
  build-test-deploy:
    jobs:
      - setup:
          filters:
            tags:
              only: /.*/
      - build:
          requires:
            - setup
          filters:
            tags:
              only: /.*/
      - trigger-docker-hub:
          requires:
            - build
          filters:
            tags:
              only:
                - latest
                - /^v[0-9a-zA-Z.-]+$/
            branches:
              only:
                - master
