name: Build and Test on: pull_request permissions: contents: read jobs: lint: if: github.repository == 'ml-explore/mlx-swift-lm' runs-on: ubuntu-22.04 container: image: swift:6.2-rhel-ubi9 steps: - uses: actions/checkout@v6 with: submodules: recursive - name: Setup uv uses: astral-sh/setup-uv@v6 with: activate-environment: true - name: Setup pre-commit shell: sh run: | uv pip install pre-commit - name: Get swift-format tag id: swift-format shell: sh run: | cd /tmp LATEST_TAG=$(curl -s https://api.github.com/repos/swiftlang/swift-format/releases/latest | \ grep '"tag_name":' | \ sed -E 's/.*"([^"]+)".*/\1/') echo "swift-format $LATEST_TAG" echo "SWIFT_FORMAT_VERSION=$LATEST_TAG" >> $GITHUB_OUTPUT - name: Cache swift-format build uses: actions/cache@v4 id: cache-swift-format with: path: /tmp/swift-format/.build key: ${{ runner.os }}-swift-format-build-${{ steps.swift-format.outputs.SWIFT_FORMAT_VERSION }} - name: Build swift-format if: steps.cache-swift-format.outputs.cache-hit != 'true' shell: sh run: | cd /tmp git clone --branch ${{ steps.swift-format.outputs.SWIFT_FORMAT_VERSION }} --depth 1 https://github.com/swiftlang/swift-format.git cd swift-format swift build -c release - name: Link swift-format to /usr/local/bin shell: sh run: | cd /tmp/swift-format ln -s "$(swift build --show-bin-path -c release)/swift-format" /usr/local/bin/swift-format - name: Configure safe directory for git shell: sh run: | git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: Run style checks shell: sh run: | pre-commit run --all || (echo "Style checks failed, please install pre-commit and run pre-commit run --all and push the change"; echo ""; git --no-pager diff; exit 1) mac_build_and_test: needs: lint if: github.repository == 'ml-explore/mlx-swift-lm' runs-on: [self-hosted, macos] steps: - uses: actions/checkout@v6 with: submodules: recursive - name: Verify MetalToolchain installed shell: bash run: xcodebuild -showComponent MetalToolchain - name: Build (Xcode, macOS) shell: sh run: | xcodebuild -version xcrun --show-sdk-build-version swift --version rm -rf ~/Library/Developer/Xcode/DerivedData/* xcodebuild build-for-testing -scheme mlx-swift-lm-Package -destination 'platform=macOS' - name: Run Tests (Xcode, macOS) shell: sh run: | xcrun xctest ~/Library/Developer/Xcode/DerivedData/mlx-swift-lm-*/Build/Products/Debug/MLXLMTests.xctest - name: Upload test results if: failure() uses: actions/upload-artifact@v4 with: name: test-results path: | ~/Library/Developer/Xcode/DerivedData/**/Logs/Test/*.xcresult /Users/runner/Library/Developer/Xcode/DerivedData/**/Logs/Test/*.xcresult ~/Library/Logs/DiagnosticReports/* retention-days: 7