---
version: 2.1

orbs:
  python: circleci/python@2.1.1

executors:
  python:
    docker:
      - image: cimg/python:3.11
    resource_class: small

  nodejs:
    docker:
      - image: node:18
    resource_class: medium


jobs:
  python-test:
    executor: python
    working_directory: ~/scwrypts/py/lib
    steps:
      - checkout:
          path: ~/scwrypts
      - run:
          name: pytest
          command: |
            : \
              && pip install . .[test] \
              && pytest \
              ;
      - run: pip install build && python -m build

  python-publish:
    executor: python
    working_directory: ~/scwrypts/py/lib
    steps:
      - checkout:
          path: ~/scwrypts
      - run: pip install build && python -m build
      - run: pip install twine && twine upload dist/*

  nodejs-test:
    executor: nodejs
    working_directory: ~/scwrypts/zx/lib
    steps:
      - checkout:
          path: ~/scwrypts

      - restore_cache:
          name: restore pnpm cache
          keys:
            - pnpm-packages-{{ checksum "pnpm-lock.yaml" }}

      - run:
          name: pnpm install
          command: |
            corepack enable
            corepack prepare pnpm@latest-8 --activate
            pnpm config set store-dir .pnpm-store
            pnpm install

      - save_cache:
          name: save pnpm cache
          key: pnpm-packages-{{ checksum "pnpm-lock.yaml" }}
          paths:
            - .pnpm-store

      - run: pnpm test
      - run: pnpm lint
      - run: pnpm build

  nodejs-publish:
    executor: nodejs
    working_directory: ~/scwrypts/zx/lib
    steps:
      - checkout:
          path: ~/scwrypts

      - restore_cache:
          name: restore pnpm cache
          keys:
            - pnpm-packages-{{ checksum "pnpm-lock.yaml" }}

      - run:
          name: pnpm install
          command: |
            corepack enable
            corepack prepare pnpm@latest-8 --activate
            pnpm config set store-dir .pnpm-store
            pnpm install

      - save_cache:
          name: save pnpm cache
          key: pnpm-packages-{{ checksum "pnpm-lock.yaml" }}
          paths:
            - .pnpm-store

      - run:
          name: publish
          command: |
            : \
              && [ $CIRCLE_TAG ] \
              && pnpm build \
              && pnpm version $CIRCLE_TAG \
              && pnpm set //registry.npmjs.org/:_authToken=$NPM_TOKEN \
              && pnpm publish --no-git-checks \
              ;

workflows:
  python-dev:
    jobs:
      - python-test:
          filters:
            branches:
              ignore: /^main$/

  python:
    jobs:
      - python-test:
          filters:
            tags:
              only: /^v\d+\.\d+\.\d+.*$/
            branches:
              ignore: /^.*$/
      - python-publish:
          requires: [python-test]
          context: [pypi-yage]
          filters:
            tags:
              only: /^v\d+\.\d+\.\d+.*$/
            branches:
              ignore: /^.*$/

  nodejs-dev:
    jobs:
      - nodejs-test:
          filters:
            branches:
              ignore: /^main$/

  nodejs:
    jobs:
      - nodejs-test:
          filters:
            tags:
              only: /^v\d+\.\d+\.\d+.*$/
            branches:
              ignore: /^.*$/
      - nodejs-publish:
          requires: [nodejs-test]
          context: [npm-wrynegade]
          filters:
            tags:
              only: /^v\d+\.\d+\.\d+.*$/
            branches:
              ignore: /^.*$/