-
Notifications
You must be signed in to change notification settings - Fork 38
128 lines (105 loc) · 4.02 KB
/
release.yml
File metadata and controls
128 lines (105 loc) · 4.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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
- 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: swift build -c release
- name: Verify binary
run: |
ls -lh .build/release/mlx-server
file .build/release/mlx-server
.build/release/mlx-server --help || true
- name: Package binary
run: |
mkdir -p release
cp .build/release/mlx-server release/
cp LICENSE README.md release/
cd release
tar -czvf ../mlx-server-${{ steps.tag.outputs.name }}-macos-arm64.tar.gz .
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: mlx-server-${{ steps.tag.outputs.name }}-macos-arm64
path: mlx-server-${{ 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'
## mlx-server ${{ 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/mlx-server/releases/download/${{ steps.tag.outputs.name }}/mlx-server-${{ steps.tag.outputs.name }}-macos-arm64.tar.gz)
### Quick Start
```bash
tar -xzf mlx-server-${{ steps.tag.outputs.name }}-macos-arm64.tar.gz
./mlx-server --model mlx-community/Qwen2.5-3B-Instruct-4bit --port 5413
```
> **Note:** Requires `mlx.metallib` next to the binary for GPU compute. See [README](https://github.com/SharpAI/mlx-server#metal-shader-library) for setup.
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: "mlx-server ${{ steps.tag.outputs.name }}"
body_path: /tmp/release_notes.md
files: |
mlx-server-${{ steps.tag.outputs.name }}-macos-arm64.tar.gz
draft: false
prerelease: false