version: 2.1
orbs:
  tool-kit: financial-times/dotcom-tool-kit@5
  slack: circleci/slack@4.6.0
executors:
  node:
    docker:
      - image: cimg/node:22.4
  node24_13:
    docker:
      - image: cimg/node:24.13
jobs:
  checkout:
    docker:
      - image: cimg/base:stable
    steps:
      - checkout
      - tool-kit/persist-workspace:
          path: .
commands:
  notify_slack_error:
    steps:
      - slack/notify:
          custom: |
            {
              "blocks": [
                {
                  "type": "section",
                  "fields": [
                    {
                      "type": "mrkdwn",
                      "text": ":space_invader: The nightly *$CIRCLE_PROJECT_REPONAME* tests *failed* with Node version *$NODE_VERSION*. Hardcoded concept IDs might have changed and need updating"
                    }
                  ]
                },
                {
                  "type": "actions",
                  "elements": [
                    {
                      "type": "button",
                      "text": {
                        "type": "plain_text",
                        "text": "View Job"
                      },
                      "url": "${CIRCLE_BUILD_URL}"
                    }
                  ]
                }
              ]
            }
          event: fail
          channel: curation-and-loyalty-dev
workflows:
  tool-kit:
    when: |
      pipeline.trigger_source != "scheduled_pipeline" and
      (pipeline.event.name == "push" or (pipeline.event.name == "pull_request"
      and pipeline.event.action != "closed"))
    jobs:
      - checkout:
          filters:
            tags:
              only: /^v\d+\.\d+\.\d+(-.+)?/
      - tool-kit/setup:
          name: tool-kit/setup-<< matrix.executor >>
          executor: << matrix.executor >>
          matrix:
            parameters:
              executor:
                - node
                - node24_13
          requires:
            - checkout
          filters:
            tags:
              only: /^v\d+\.\d+\.\d+(-.+)?/
      - tool-kit/build:
          name: tool-kit/build-<< matrix.executor >>
          executor: << matrix.executor >>
          matrix:
            parameters:
              executor:
                - node
                - node24_13
          requires:
            - tool-kit/setup-<< matrix.executor >>
          filters:
            tags:
              only: /^v\d+\.\d+\.\d+(-.+)?/
      - tool-kit/test:
          name: tool-kit/test-<< matrix.executor >>
          executor: << matrix.executor >>
          matrix:
            parameters:
              executor:
                - node
                - node24_13
          requires:
            - tool-kit/build-<< matrix.executor >>
          filters:
            tags:
              only: /^v\d+\.\d+\.\d+(-.+)?/
      - tool-kit/publish-tag:
          executor: node
          requires:
            - tool-kit/test-node
          filters:
            tags:
              only: /^v\d+\.\d+\.\d+(-.+)?/
            branches:
              ignore: /.*/
          context: npm-publish-token
  nightly:
    when:
      and:
        - equal:
            - scheduled_pipeline
            - << pipeline.trigger_source >>
        - equal:
            - nightly
            - << pipeline.schedule.name >>
    jobs:
      - checkout
      - tool-kit/setup:
          name: tool-kit/setup-<< matrix.executor >>
          executor: << matrix.executor >>
          matrix:
            parameters:
              executor:
                - node
                - node24_13
          requires:
            - checkout
      - tool-kit/build:
          name: tool-kit/build-<< matrix.executor >>
          executor: << matrix.executor >>
          matrix:
            parameters:
              executor:
                - node
                - node24_13
          requires:
            - tool-kit/setup-<< matrix.executor >>
      - tool-kit/test:
          post-steps:
            - notify_slack_error
          name: tool-kit/test-<< matrix.executor >>
          executor: << matrix.executor >>
          matrix:
            parameters:
              executor:
                - node
                - node24_13
          requires:
            - tool-kit/build-<< matrix.executor >>
  pr-close:
    jobs:
      - checkout:
          requires: []
      - tool-kit/setup:
          name: tool-kit/setup-<< matrix.executor >>
          executor: << matrix.executor >>
          matrix:
            parameters:
              executor:
                - node
                - node24_13
          requires:
            - checkout
    when: >
      pipeline.trigger_source != "scheduled_pipeline" and

      (pipeline.event.name == "pull_request" and pipeline.event.action ==
      "closed")
