version: 2.1

parameters:
  node_version:
    type: string
    default: '18.17'

orbs:
  codecov: codecov/codecov@3.2.4

executors:
  node:
    docker:
      - image: cimg/node:<< pipeline.parameters.node_version >>
    # Everything is faster in RAM!
    # https://support.circleci.com/hc/en-us/articles/360054908812-Speed-up-steps-using-a-RAM-disk
    working_directory: /mnt/ramdisk/project

jobs:
  test:
    executor: node
    steps:
      - checkout
      - run: npm clean-install
      - run: npm test -- --coverage
      - codecov/upload
  lint:
    executor: node
    steps:
      - checkout
      - run: npm clean-install
      - run: npm run lint
  publish:
    executor: node
    steps:
      - checkout
      - run: npm clean-install
      - run: npm run build
      - run:
          name: Publish to NPM
          command: |
            npm set //registry.npmjs.org/:_authToken=$NPM_TOKEN
            npm publish

workflows:
  lint-and-test:
    jobs:
      - lint
      - test
  tagged-build:
    jobs:
      - publish:
          filters:
            tags:
              only: /v[0-9]+(\.[0-9]+)*/
            branches:
              ignore: /.*/
