version: 2.1

orbs:
  apple: ml-explore/pr-approval@0.1.0
 
jobs:
  linux_build_and_test:
    docker:
      - image: cimg/python:3.9

    steps:
      - checkout
      - run:
          name: Run style checks
          command: |
            pip install pre-commit
            pre-commit run --all
            if ! git diff --quiet; then echo 'Style checks failed, please install pre-commit and run pre-commit run --all and push the change'; exit 1; fi

  mlx_lm_build_and_test:
    macos:
      xcode: "15.2.0"
    resource_class: macos.m1.large.gen1
    steps:
      - checkout
      - run:
          name: Install dependencies
          command: |
            brew install python@3.9
            python3.9 -m venv env
            source env/bin/activate
            pip install --upgrade pip
            pip install unittest-xml-reporting
            cd llms/
            pip install -e ".[test]"
      - run:
          name: Run Python tests
          command: |
            source env/bin/activate
            python -m xmlrunner discover -v llms/tests -o test-results/
      - store_test_results:
          path: test-results

workflows:
  build_and_test:
    when:
      matches:
        pattern: "^(?!pull/)[-\\w]+$"
        value: << pipeline.git.branch >>
    jobs:
      - mlx_lm_build_and_test
      - linux_build_and_test

  prb:
    when:
      matches:
        pattern: "^pull/\\d+(/head)?$"
        value: << pipeline.git.branch >>
    jobs:
      - hold:
          type: approval
      - apple/authenticate:
          context: pr-approval
      - mlx_lm_build_and_test:
          requires: [ hold ]
      - linux_build_and_test:
          requires: [ hold ]
