# generator: n-circle2-cli
# template: component

references:

  container_config_node8: &container_config_node8
    working_directory: ~/project/build
    docker:
      - image: circleci/node:8-browsers

  container_config_lambda_node8: &container_config_lambda_node8
    working_directory: ~/project/build
    docker:
      - image: lambci/lambda:build-nodejs8.10

  workspace_root: &workspace_root
    ~/project

  attach_workspace: &attach_workspace
    attach_workspace:
      at: *workspace_root

  npm_cache_keys: &npm_cache_keys
    keys:
        - v1-dependency-npm-{{ checksum "package.json" }}-
        - v1-dependency-npm-{{ checksum "package.json" }}
        - v1-dependency-npm-

  cache_npm_cache: &cache_npm_cache
    save_cache:
        key: v1-dependency-npm-{{ checksum "package.json" }}-{{ epoch }}
        paths:
        - ./node_modules/

  restore_npm_cache: &restore_npm_cache
    restore_cache:
        <<: *npm_cache_keys

  filters_only_master: &filters_only_master
    branches:
      only: master

  filters_ignore_master: &filters_ignore_master
    branches:
      ignore: master

  filters_ignore_tags: &filters_ignore_tags
    tags:
      ignore: /.*/

  filters_version_tag: &filters_version_tag
    tags:
      only:
        - /^v?\d+\.\d+\.\d+(?:-beta\.\d+)?$/
    branches:
      ignore: /.*/

version: 2

jobs:

  build:
    <<: *container_config_node8
    steps:
      - checkout
      - run:
          name: Checkout next-ci-shared-helpers
          command: git clone --depth 1 git@github.com:Financial-Times/next-ci-shared-helpers.git .circleci/shared-helpers
      - *restore_npm_cache
      - run:
          name: Install project dependencies
          command: make install
      - run:
          name: shared-helper / npm-install-peer-deps
          command: .circleci/shared-helpers/helper-npm-install-peer-deps
      - run:
          name: shared-helper / npm-update
          command: .circleci/shared-helpers/helper-npm-update
      - run:
          name: shared-helper / generate-build-state-artifacts
          command: .circleci/shared-helpers/helper-generate-build-state-artifacts
          when: always
      - *cache_npm_cache
      - store_artifacts:
          path: build-state
          destination: build-state
      - persist_to_workspace:
          root: *workspace_root
          paths:
            - build

  test:
    <<: *container_config_node8
    steps:
      - *attach_workspace
      - run:
          name: Run tests
          command: make test
          environment:
            JEST_JUNIT_OUTPUT: test-results/jest/results.xml
            MOCHA_FILE: test-results/mocha/results.xml
      - store_test_results:
          path: test-results
      - store_artifacts:
          path: test-results
          destination: test-results

  publish:
    <<: *container_config_node8
    steps:
      - *attach_workspace
      - run:
          name: shared-helper / npm-store-auth-token
          command: .circleci/shared-helpers/helper-npm-store-auth-token
      - run: npx snyk monitor --org=customer-products --project-name=Financial-Times/n-gage
      - run:
          name: shared-helper / npm-version-and-publish-public
          command: .circleci/shared-helpers/helper-npm-version-and-publish-public

workflows:

  version: 2

  build-test:
    jobs:
      - build:
          filters:
            <<: *filters_ignore_tags
      - test:
          requires:
            - build

  build-test-publish:
    jobs:
      - build:
          filters:
            <<: *filters_version_tag
      - test:
          filters:
            <<: *filters_version_tag
          requires:
            - build
      - publish:
          filters:
            <<: *filters_version_tag
          requires:
            - test

  nightly:
    triggers:
      - schedule:
          cron: "0 0 * * *"
          filters:
            <<: *filters_only_master
    jobs:
      - build:
          context: next-nightly-build
      - test:
          requires:
            - build
          context: next-nightly-build

notify:
  webhooks:
    - url: https://ft-next-webhooks.herokuapp.com/circleci2-workflow
