aliases:
  - &npm_secret
    name: Authenticate with NPM registry
    command: echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc
  - &install
    name: Yarn install
    command: |
      yarn install --frozen-lockfile
      yarn global add pkg
  - &test
    name: Yarn test
    command: yarn test
  - &github_pages
    name: Deploy GitHub pages to gh-pages branch
    command: yarn release-docs

version: 2
jobs:
  build:
    docker:
      - image: circleci/node:12.14
    working_directory: ~/paperspace-node
    steps:
      - checkout
      - restore_cache:
          keys:
            - paperspace-node-{{ .Branch }}-{{ checksum "yarn.lock" }}
            - paperspace-node-{{ .Branch }}
      - run: *install
      - run: *test
      - save_cache:
          key: paperspace-node-{{ .Branch }}-{{ checksum "yarn.lock" }}
          paths:
            - "~/.cache/yarn"
  publish_npm:
    working_directory: ~/paperspace-node
    docker:
      - image: circleci/node:12.14
    steps:
      - checkout
      - restore_cache:
          keys:
            - paperspace-node-{{ .Branch }}-{{ checksum "yarn.lock" }}
            - paperspace-node-{{ .Branch }}
      - attach_workspace:
          # Must be absolute path or relative path from working_directory
          at: ~/paperspace-node
      - run: *npm_secret
      - run: *install
      - run:
          name: Publish package to NPM
          command: npm publish --access=public
  publish_github_pages:
    working_directory: ~/paperspace-node
    docker:
      - image: circleci/node:12.14
    steps:
      - checkout
      - restore_cache:
          keys:
            - paperspace-node-{{ .Branch }}-{{ checksum "yarn.lock" }}
            - paperspace-node-{{ .Branch }}
      - attach_workspace:
          # Must be absolute path or relative path from working_directory
          at: ~/paperspace-node
      - run:
          name: Configure dependencies
          command: |
            git config user.email "${GITHUB_EMAIL}"
            git config user.name "${GITHUB_USER}"
      - add_ssh_keys:
          fingerprints: "ec:de:55:ff:b2:71:24:10:d5:52:1f:72:12:e5:1c:a6"
      - run: *npm_secret
      - run: *install
      - run: *github_pages

workflows:
  version: 2
  pipeline:
    jobs:
      - build:
          filters:
            tags:
              only: /^v.*/
      - publish_github_pages:
          requires:
            - build
          filters:
            tags:
              only: /^v.*/
            branches:
              ignore: /.*/
      - publish_npm:
          requires:
            - build
          filters:
            tags:
              only: /^v.*/
            branches:
              ignore: /.*/
