# Javascript Node CircleCI 2.0 configuration file
#
# Check {{ '/2.0/language-javascript/' | docs_url }} for more details
#
version: 2

defaults: &defaults
    working_directory: ~/repo
    docker:
        - image: circleci/node:12.11.1

jobs:
    test:
        <<: *defaults
        steps:
            - checkout

            - restore_cache:
                  keys:
                      - v1-dependencies-{{ checksum "package.json" }}
                      # fallback to using the latest cache if no exact match is found
                      - v1-dependencies-

            - run: npm install

            - run:
                  name: Compile typescript
                  command: npm run compile

            - run:
                  name: Lint code
                  command: npm run prettier

            - run:
                  name: Run tests
                  command: npm run test:coverage

            - store_artifacts:
                  path: coverage/lcov-report
                  destination: coverage

            # upload coverage report
            - run: curl -s https://codecov.io/bash | bash -s -- -t "${CODECOV_TOKEN}"

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

            - persist_to_workspace:
                  root: ~/repo
                  paths: .
    deploy:
        <<: *defaults
        steps:
            - attach_workspace:
                  at: ~/repo
            - run:
                  name: Authenticate with registry
                  command: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/repo/.npmrc
            - run:
                  name: Publish package
                  command: npm publish --access public

workflows:
    version: 2
    test-deploy:
        jobs:
            - test:
                  filters:
                      tags:
                          only: /^v.*/
            - deploy:
                  requires:
                      - test
                  filters:
                      tags:
                          only: /^v.*/
                      branches:
                          ignore: /.*/
