Update release CI to use build.sh and package mlx.metallib instead of… #23
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: Release | |
| # Auto-release on every push to main (like llama.cpp) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| create_release: | |
| description: 'Create new release' | |
| required: true | |
| type: boolean | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - '**/*.swift' | |
| - 'Package.swift' | |
| - '.github/workflows/release.yml' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: write | |
| jobs: | |
| build-and-release: | |
| runs-on: macos-15 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # Full history for build number | |
| submodules: recursive | |
| - name: Install Metal Toolchain | |
| run: xcodebuild -downloadComponent MetalToolchain || true | |
| - name: Determine tag name | |
| id: tag | |
| run: | | |
| BUILD_NUMBER="$(git rev-list --count HEAD)" | |
| SHORT_HASH="$(git rev-parse --short=7 HEAD)" | |
| echo "name=b${BUILD_NUMBER}" >> $GITHUB_OUTPUT | |
| echo "full=b${BUILD_NUMBER}-${SHORT_HASH}" >> $GITHUB_OUTPUT | |
| echo "Build: b${BUILD_NUMBER} (${SHORT_HASH})" | |
| - name: Generate changelog | |
| id: changelog | |
| run: | | |
| # Find the previous release tag | |
| PREV_TAG=$(git tag --sort=-creatordate | head -1 2>/dev/null || echo "") | |
| if [ -z "$PREV_TAG" ]; then | |
| # First release — all commits | |
| CHANGELOG=$(git log --pretty=format:"- %s (%h)" --no-merges -20) | |
| else | |
| CHANGELOG=$(git log "${PREV_TAG}..HEAD" --pretty=format:"- %s (%h)" --no-merges) | |
| fi | |
| # Write to file (multi-line safe) | |
| echo "$CHANGELOG" > /tmp/changelog.txt | |
| echo "Generated changelog with $(echo "$CHANGELOG" | wc -l | tr -d ' ') entries" | |
| - name: Build (Release) | |
| run: ./build.sh | |
| - name: Verify binary | |
| run: | | |
| ls -lh .build/release/SwiftLM | |
| file .build/release/SwiftLM | |
| .build/release/SwiftLM --help || true | |
| - name: Package binary | |
| run: | | |
| mkdir -p release | |
| cp .build/release/SwiftLM release/ | |
| cp .build/arm64-apple-macosx/release/mlx.metallib release/ | |
| cp LICENSE README.md release/ | |
| cd release | |
| # Verify the tarball will be self-contained before archiving | |
| ls -lh | |
| tar -czvf ../SwiftLM-${{ steps.tag.outputs.name }}-macos-arm64.tar.gz . | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: SwiftLM-${{ steps.tag.outputs.name }}-macos-arm64 | |
| path: SwiftLM-${{ steps.tag.outputs.name }}-macos-arm64.tar.gz | |
| retention-days: 90 | |
| - name: Prepare release notes | |
| id: notes | |
| run: | | |
| CHANGELOG=$(cat /tmp/changelog.txt) | |
| cat > /tmp/release_notes.md << 'RELEASE_EOF' | |
| ## SwiftLM ${{ steps.tag.outputs.full }} | |
| <details open> | |
| ${{ github.event.head_commit.message }} | |
| </details> | |
| ### Changelog | |
| RELEASE_EOF | |
| cat /tmp/changelog.txt >> /tmp/release_notes.md | |
| cat >> /tmp/release_notes.md << 'RELEASE_EOF' | |
| ### Download | |
| - [macOS Apple Silicon (arm64)](https://github.com/SharpAI/SwiftLM/releases/download/${{ steps.tag.outputs.name }}/SwiftLM-${{ steps.tag.outputs.name }}-macos-arm64.tar.gz) | |
| ### Quick Start | |
| ```bash | |
| tar -xzf SwiftLM-${{ steps.tag.outputs.name }}-macos-arm64.tar.gz | |
| # mlx.metallib is included — run from the extracted directory | |
| ./SwiftLM --model mlx-community/Qwen2.5-3B-Instruct-4bit --port 5413 | |
| ``` | |
| > **Note:** `mlx.metallib` is bundled in this archive. Keep it in the same directory as the `SwiftLM` binary — Metal GPU compute will fail if it is missing. | |
| RELEASE_EOF | |
| - name: Create release | |
| if: ${{ github.event_name == 'push' || github.event.inputs.create_release == 'true' }} | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ steps.tag.outputs.name }} | |
| name: "SwiftLM ${{ steps.tag.outputs.name }}" | |
| body_path: /tmp/release_notes.md | |
| files: | | |
| SwiftLM-${{ steps.tag.outputs.name }}-macos-arm64.tar.gz | |
| draft: false | |
| prerelease: false |