1212 nightly :
1313 name : Build and Publish Nightly
1414 runs-on : ubuntu-latest
15+ outputs :
16+ version : ${{ steps.version.outputs.version }}
17+ release_tag : ${{ steps.create_release.outputs.tag }}
1518
1619 steps :
1720 - name : Checkout code
3336 portaudio19-dev \
3437 python3-dev \
3538 libgirepository1.0-dev \
36- pkg-config
39+ libgirepository-2.0-dev \
40+ pkg-config \
41+ libcairo2-dev \
42+ gobject-introspection \
43+ gir1.2-gtk-3.0 \
44+ gir1.2-appindicator3-0.1 \
45+ gir1.2-ibus-1.0
3746
3847 - name : Install build dependencies
3948 run : |
8089 done
8190 ls -la dist/
8291
92+ - name : Build AppImage (x86_64)
93+ run : |
94+ bash packaging/appimage/build.sh dist/*.whl "${{ steps.version.outputs.version }}" dist
95+ ls -la dist/*.AppImage
96+
8397 - name : Cleanup old nightly releases
8498 env :
8599 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
@@ -166,6 +180,14 @@ jobs:
166180 curl -fsSL https://raw.githubusercontent.com/jatinkrmalik/vocalinux/main/install.sh | bash
167181 \`\`\`
168182
183+ #### AppImage (no install, no root)
184+ Download the \`.AppImage\` matching your CPU (\`x86_64\` or \`aarch64\`) below:
185+ \`\`\`bash
186+ chmod +x Vocalinux-${{ steps.version.outputs.version }}-x86_64.AppImage
187+ ./Vocalinux-${{ steps.version.outputs.version }}-x86_64.AppImage
188+ \`\`\`
189+ Requires \`xdotool\`/\`wtype\`/\`ydotool\` on the host for text injection, same as the PyPI install path.
190+
169191 ---
170192
171193 ### Build Information
@@ -184,6 +206,8 @@ jobs:
184206
185207 - **\`vocalinux-${{ steps.version.outputs.version }}-py3-none-any.whl\`** - Python wheel (recommended)
186208 - **\`vocalinux-${{ steps.version.outputs.version }}.tar.gz\`** - Source distribution
209+ - **\`Vocalinux-${{ steps.version.outputs.version }}-x86_64.AppImage\`** - Self-contained, no install (Intel/AMD)
210+ - **\`Vocalinux-${{ steps.version.outputs.version }}-aarch64.AppImage\`** - Self-contained, no install (ARM64, added shortly after this release is published)
187211
188212 ---
189213
@@ -202,26 +226,85 @@ jobs:
202226 echo "notes_file=/tmp/release_notes.md" >> $GITHUB_OUTPUT
203227
204228 - name : Create nightly release
229+ id : create_release
205230 env :
206231 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
207232 run : |
208233 # Create release with dated tag: nightly-2025-02-11
209234 RELEASE_TAG="nightly-$(date +%Y-%m-%d)"
210-
235+
211236 # If a release for today already exists, delete it first
212237 gh release delete "$RELEASE_TAG" --yes --repo ${{ github.repository }} 2>/dev/null || true
213238 git push origin :refs/tags/"$RELEASE_TAG" 2>/dev/null || true
214239 git tag -d "$RELEASE_TAG" 2>/dev/null || true
215-
240+
216241 gh release create "$RELEASE_TAG" \
217242 --title "Nightly Build - ${{ steps.version.outputs.version }}" \
218243 --notes-file ${{ steps.release_notes.outputs.notes_file }} \
219244 --prerelease \
220245 dist/*
221246
247+ echo "tag=${RELEASE_TAG}" >> "$GITHUB_OUTPUT"
248+
222249 - name : Upload artifacts (backup)
223250 uses : actions/upload-artifact@v4
224251 with :
225252 name : vocalinux-nightly-${{ steps.version.outputs.version }}
226253 path : dist/
227254 retention-days : 7
255+
256+ nightly-appimage-arm64 :
257+ name : Build and Attach Nightly AppImage (aarch64)
258+ runs-on : ubuntu-24.04-arm
259+ needs : nightly
260+ if : needs.nightly.result == 'success'
261+
262+ steps :
263+ - name : Checkout code
264+ uses : actions/checkout@v4
265+ with :
266+ ref : main
267+
268+ - name : Set up Python
269+ uses : actions/setup-python@v5
270+ with :
271+ python-version : ' 3.10'
272+ cache : ' pip'
273+
274+ - name : Install system dependencies
275+ run : |
276+ sudo apt-get update
277+ sudo apt-get install -y \
278+ portaudio19-dev \
279+ python3-dev \
280+ libgirepository1.0-dev \
281+ libgirepository-2.0-dev \
282+ pkg-config \
283+ libcairo2-dev \
284+ gobject-introspection \
285+ gir1.2-gtk-3.0 \
286+ gir1.2-appindicator3-0.1 \
287+ gir1.2-ibus-1.0
288+
289+ - name : Install build dependencies
290+ run : |
291+ python -m pip install --upgrade pip setuptools wheel build
292+
293+ - name : Build package
294+ run : |
295+ python -m build
296+ ls -la dist/
297+
298+ - name : Build AppImage (aarch64)
299+ run : |
300+ bash packaging/appimage/build.sh dist/*.whl "${{ needs.nightly.outputs.version }}" dist
301+ ls -la dist/*.AppImage
302+
303+ - name : Attach to nightly release
304+ env :
305+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
306+ run : |
307+ gh release upload "${{ needs.nightly.outputs.release_tag }}" \
308+ dist/*.AppImage \
309+ --repo ${{ github.repository }} \
310+ --clobber
0 commit comments