diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index f98a24d..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,100 +0,0 @@ -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: m2pro.medium - 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 sentencepiece - pip install unittest-xml-reporting - pip install -e ".[test]" - - run: - name: Run Python tests - command: | - source env/bin/activate - python -m xmlrunner discover -v tests -o test-results/ - - store_test_results: - path: test-results - - build_release: - macos: - xcode: "15.2.0" - resource_class: m2pro.medium - 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 build - pip install twine - - run: - name: Build and upload - command: | - source env/bin/activate - python -m build - twine upload dist/* - - store_artifacts: - path: dist/ - -workflows: - build_and_test: - when: - matches: - pattern: "^(?!pull/)[-\\w]+$" - value: << pipeline.git.branch >> - jobs: - - mlx_lm_build_and_test - - linux_build_and_test - - build_pypi_release: - jobs: - - build_release: - filters: - tags: - only: /^v.*/ - branches: - ignore: /.*/ - - 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 ] diff --git a/.github/actions/setup-macos/action.yml b/.github/actions/setup-macos/action.yml new file mode 100644 index 0000000..b968c7a --- /dev/null +++ b/.github/actions/setup-macos/action.yml @@ -0,0 +1,16 @@ +name: 'Setup macOS Environment' +description: 'Install dependencies for macOS' + +inputs: + python-version: + description: 'Python version to use' + required: false + default: '3.10' + +runs: + using: "composite" + steps: + - uses: conda-incubator/setup-miniconda@v3 + with: + miniconda-version: "latest" + python-version: ${{ inputs.python-version }} diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml new file mode 100644 index 0000000..e5312aa --- /dev/null +++ b/.github/workflows/pull_request.yml @@ -0,0 +1,41 @@ +name: Build and Test + +on: + push: + branches: ["main"] + pull_request: + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/head/main' }} + +jobs: + check_lint: + if: github.repository == 'ml-explore/mlx-lm' + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v5 + - uses: actions/setup-python@v6 + with: + python-version: "3.10" + - uses: pre-commit/action@v3.0.1 + + mac_build_and_test: + if: github.repository == 'ml-explore/mlx-lm' + runs-on: [self-hosted, macos] + needs: check_lint + steps: + - uses: actions/checkout@v5 + - uses: ./.github/actions/setup-macos + - name: Install test dependencies + shell: bash -l {0} + run: | + pip install unittest-xml-reporting + pip install -e ".[test]" + - name: Run tests + shell: bash -l {0} + run: | + python -m xmlrunner discover -v tests -o test-results/ diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..3f48b36 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,41 @@ +name: PyPI Release + +on: + push: + tags: + - 'v*' + workflow_dispatch: + +permissions: + contents: read + +jobs: + + build_release: + if: github.repository == 'ml-explore/mlx' + runs-on: ubuntu-22.04 + permissions: + id-token: write + environment: + name: pypi + url: https://pypi.org/p/mlx-lm + steps: + - uses: actions/checkout@v5 + - uses: actions/setup-python@v6 + with: + python-version: "3.10" + - name: Build package + shell: sh + run: | + pip install build + python -m build + - name: Upload artifacts + uses: actions/upload-artifact@v5 + with: + overwrite: true + name: mlx-lm + path: dist/* + - name: Publish package distributions to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + repository-url: https://upload.pypi.org/legacy/