feat(swiftbuddy): MemPalace v1, native macOS theming, HF model manage… #54
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI Pipeline | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| concurrency: | |
| group: ci-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| build_and_unit_test: | |
| runs-on: macos-15 | |
| timeout-minutes: 40 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: false | |
| - name: Install Metal Toolchain | |
| run: xcodebuild -downloadComponent MetalToolchain || true | |
| - name: Cache Swift packages | |
| uses: actions/cache@v4 | |
| with: | |
| path: .build | |
| key: ${{ runner.os }}-spm-SwiftLM-v2-${{ hashFiles('Package.resolved') }} | |
| restore-keys: | | |
| ${{ runner.os }}-spm-SwiftLM-v2- | |
| - name: Clear stale module cache | |
| run: find .build -type d -name ModuleCache -exec rm -rf {} + 2>/dev/null || true | |
| - name: Resolve dependencies | |
| run: swift package resolve | |
| - name: Build (Release) | |
| run: swift build -c release | |
| - name: Verify binary | |
| run: | | |
| ls -lh .build/release/SwiftLM | |
| file .build/release/SwiftLM | |
| - name: TurboQuant unit tests | |
| run: | | |
| clang++ -std=c++17 -O2 -o /tmp/tq_test tests/test_turbo_quant.cpp | |
| /tmp/tq_test | |
| - name: Build Test Harness | |
| run: swift build --build-tests | |
| - name: Install MLX Metal library | |
| run: | | |
| python3 -m venv /tmp/mlx_venv | |
| /tmp/mlx_venv/bin/pip install --quiet mlx | |
| cp /tmp/mlx_venv/lib/python*/site-packages/mlx/lib/mlx.metallib .build/release/ | |
| find .build -type d -name "MacOS" -exec cp /tmp/mlx_venv/lib/python*/site-packages/mlx/lib/mlx.metallib {}/ \; | |
| - name: SwiftBuddy Tests (MemPalace & Lifecycle) | |
| run: swift test --skip-build --filter SwiftBuddyTests --disable-swift-testing | |
| - name: Upload Binary Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: swiftlm-architecture | |
| path: .build/release/ | |
| retention-days: 1 | |
| integration_matrix: | |
| needs: build_and_unit_test | |
| runs-on: macos-15 | |
| timeout-minutes: 30 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| modality: [server, vision] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: false | |
| - name: Download Binary Artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: swiftlm-architecture | |
| path: .build/release/ | |
| - name: Restore Architecture Privileges | |
| run: chmod +x .build/release/SwiftLM | |
| - name: Cache MLX model | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/huggingface | |
| key: mlx-model-qwen2.5-0.5b-4bit | |
| - name: Run E2E tests (${{ matrix.modality }}) | |
| env: | |
| HF_HUB_DOWNLOAD_TIMEOUT: "600" | |
| run: | | |
| chmod +x tests/test-${{ matrix.modality }}.sh | |
| for attempt in 1 2 3; do | |
| echo "Attempt $attempt of 3..." | |
| if tests/test-${{ matrix.modality }}.sh .build/release/SwiftLM 15413; then exit 0; fi | |
| if [ "$attempt" -eq 3 ]; then echo "All attempts failed"; exit 1; fi | |
| sleep 10 | |
| done | |
| - name: Upload test logs on failure | |
| if: failure() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ci-test-logs-${{ matrix.modality }} | |
| path: /tmp/SwiftLM-test-*.log | |
| retention-days: 1 |