1- name : Release Build
1+ name : Build and Release Mac App
22
33on :
44 push :
55 tags :
66 - ' v*'
7- workflow_dispatch :
8- inputs :
9- version :
10- description : ' Release version (e.g., v1.0.0)'
11- required : true
12- type : string
137
148jobs :
159 build-and-release :
10+ runs-on : macos-14
1611 permissions :
1712 contents : write
18- runs-on : macos-14
19-
13+
2014 steps :
21- - name : Checkout code
15+ - name : Checkout Code
2216 uses : actions/checkout@v4
23-
17+
2418 - name : Setup Xcode
2519 uses : maxim-lobanov/setup-xcode@v1
2620 with :
2721 xcode-version : ' 15.2'
28-
22+
2923 - name : Install create-dmg
3024 run : brew install create-dmg
31-
32- - name : Build Release
25+
26+ - name : Build App (Unsigned)
3327 run : |
34- xcodebuild -scheme speaktype \
28+ echo "🏗️ Building SpeakType..."
29+ xcodebuild -scheme "speaktype" \
3530 -configuration Release \
3631 -derivedDataPath build \
3732 SYMROOT=build/Release \
3833 CODE_SIGN_IDENTITY="" \
3934 CODE_SIGNING_REQUIRED=NO
40-
35+
4136 - name : Verify Build
4237 run : |
4338 if [ ! -d "build/Release/speaktype.app" ]; then
44- echo "❌ Build failed - app not found"
39+ echo "❌ Build failed - app not found at build/Release/speaktype.app "
4540 exit 1
4641 fi
4742 echo "✅ Build successful"
48- ls -la build/Release/
49-
50- - name : Create ZIP Package
51- run : |
52- mkdir -p dist
53- cd build/Release
54- zip -r ../../dist/SpeakType.zip speaktype.app
55- cd ../..
56- ls -lh dist/SpeakType.zip
57-
43+
5844 - name : Create DMG
5945 run : |
46+ echo "💿 Creating DMG..."
47+ mkdir -p dist
48+
49+ # Clean up any previous attempts
50+ rm -f dist/SpeakType.dmg
51+
6052 create-dmg \
6153 --volname "SpeakType" \
6254 --window-pos 200 120 \
@@ -66,94 +58,11 @@ jobs:
6658 --app-drop-link 600 185 \
6759 --no-internet-enable \
6860 "dist/SpeakType.dmg" \
69- "build/Release/speaktype.app" || \
70- hdiutil create \
71- -volname "SpeakType" \
72- -srcfolder build/Release/speaktype.app \
73- -ov -format UDZO \
74- dist/SpeakType.dmg
75- ls -lh dist/SpeakType.dmg
76-
77- - name : Get version from tag
78- id : get_version
79- run : |
80- if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
81- VERSION="${{ github.event.inputs.version }}"
82- else
83- VERSION=${GITHUB_REF#refs/tags/}
84- fi
85- echo "version=$VERSION" >> $GITHUB_OUTPUT
86- echo "Version: $VERSION"
87-
88- - name : Generate Release Notes
89- id : release_notes
90- run : |
91- cat > release_notes.md << 'EOF'
92- ## 🎉 SpeakType ${{ steps.get_version.outputs.version }}
93-
94- ### 📥 Installation
95-
96- **For macOS Users:**
97- 1. Download `SpeakType.dmg` below
98- 2. Open the DMG file
99- 3. Drag SpeakType to your Applications folder
100- 4. **Important:** Right-click the app and select "Open" (first time only)
101-
102- **Why right-click?** This app is not yet notarized with Apple. This is a one-time step.
103-
104- ### ✨ What's New
105- - Initial release
106- - Offline voice-to-text transcription
107- - Multiple Whisper AI models support
108- - Global hotkey support
109- - Native macOS UI with dark mode
110-
111- ### 📋 Requirements
112- - macOS 13.0+ (Ventura or newer)
113- - Apple Silicon (M1+) recommended
114- - 2GB free space (for AI models)
115-
116- ### 🐛 Known Issues
117- - Gatekeeper warning on first launch (see installation steps above)
118- - WhisperKit dependency warnings in build (harmless)
119-
120- ### 📚 Documentation
121- See the [README](https://github.com/${{ github.repository }}) for full documentation.
122-
123- ---
124-
125- **Built with ❤️ | Privacy-First | 100% Offline | Open Source**
126- EOF
127- cat release_notes.md
128-
129- - name : Create GitHub Release
61+ "build/Release/speaktype.app"
62+
63+ - name : Create Release & Upload Assets
13064 uses : softprops/action-gh-release@v2
13165 with :
132- name : SpeakType ${{ steps.get_version.outputs.version }}
133- body_path : release_notes.md
134- files : |
135- dist/SpeakType.dmg
136- dist/SpeakType.zip
137- draft : false
138- prerelease : false
66+ files : dist/SpeakType.dmg
67+ generate_release_notes : true
13968 fail_on_unmatched_files : true
140- env :
141- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
142-
143- - name : Upload Build Artifacts
144- uses : actions/upload-artifact@v4
145- with :
146- name : SpeakType-${{ steps.get_version.outputs.version }}
147- path : |
148- dist/SpeakType.dmg
149- dist/SpeakType.zip
150- retention-days : 90
151-
152- - name : Release Summary
153- run : |
154- echo "✅ Release ${{ steps.get_version.outputs.version }} created successfully!"
155- echo ""
156- echo "📦 Artifacts:"
157- ls -lh dist/
158- echo ""
159- echo "🔗 View release: https://github.com/${{ github.repository }}/releases/tag/${{ steps.get_version.outputs.version }}"
0 commit comments