108 lines
4.0 KiB
YAML
108 lines
4.0 KiB
YAML
name: Build AppImage
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
release:
|
|
types: [published]
|
|
|
|
jobs:
|
|
build-appimage:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
arch: [x64, arm64]
|
|
|
|
steps:
|
|
# 1. Checkout source code
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
# FIX #1: for packaging only, manual setup is often cleaner (let's not mess with electron-builder, that's the point).
|
|
# To satisfy request, we use a more robust dependency setup
|
|
# and rely on the standard ubuntu environment where possible.
|
|
# Note: There is no single "magic action" to package pre-built binaries
|
|
# without a recipe (which pkg2appimage failed to automate with Stoat), we keep the steps but make them robust.
|
|
|
|
# 2. Install dependencies
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y desktop-file-utils zsync libfuse2
|
|
|
|
# 3. Download appimagetool
|
|
- name: Download appimagetool
|
|
run: |
|
|
wget -c https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
|
|
chmod +x appimagetool-x86_64.AppImage
|
|
|
|
# FIX #2: The race condition is avoided by ensuring our primary build workflow uploads assets to a Draft release first, then publishes it.
|
|
# When the published event fires, the assets are already attached.
|
|
# I've added tag ${{ github.event.release.tag_name }} instead to the downloader to explicitly target the triggering release,
|
|
# ensuring we never accidentally download from a different version.
|
|
|
|
# 3. Download latest Linux binary release
|
|
- name: Download Latest Linux Zip (${{ matrix.arch }})
|
|
uses: robinraju/release-downloader@v1
|
|
with:
|
|
repository: "stoatchat/for-desktop"
|
|
tag: ${{ github.event.release.tag_name }}
|
|
fileName: "Stoat-linux-${{ matrix.arch }}-*.zip"
|
|
out-file-path: "."
|
|
|
|
# 4. Setup AppDir
|
|
- name: Setup AppDir
|
|
run: |
|
|
mkdir -p Stoat.AppDir
|
|
unzip Stoat-linux-${{ matrix.arch }}-*.zip
|
|
mv Stoat-linux-${{ matrix.arch }}/* Stoat.AppDir/
|
|
rmdir Stoat-linux-${{ matrix.arch }}
|
|
|
|
# 5. Create AppRun
|
|
- name: Create AppRun
|
|
run: |
|
|
cd Stoat.AppDir
|
|
ln -s stoat-desktop AppRun
|
|
chmod +x AppRun
|
|
|
|
# FIX #3: Use existing desktop file, after adjusting (since designed for flatpak.
|
|
|
|
# 6. Create .desktop
|
|
- name: Create Desktop File
|
|
run: |
|
|
cp chat.stoat.StoatDesktop.desktop Stoat.AppDir/stoat.desktop
|
|
sed -i 's|^Exec=.*|Exec=stoat-desktop %u|' Stoat.AppDir/stoat.desktop
|
|
sed -i 's|^Icon=.*|Icon=stoat|' Stoat.AppDir/stoat.desktop
|
|
|
|
# 7. Download and add icon
|
|
- name: Add Icon
|
|
run: |
|
|
wget -O Stoat.AppDir/stoat.png https://raw.githubusercontent.com/stoatchat/assets/bd432f2298901a8566a092636eef0c35a3a80fbc/desktop/icon.png
|
|
|
|
# 8. Build the AppImage
|
|
- name: Build AppImage
|
|
run: |
|
|
export ARCH=${{ matrix.arch }}
|
|
./appimagetool-x86_64.AppImage Stoat.AppDir
|
|
|
|
if [ "${{ matrix.arch }}" == "x64" ]; then
|
|
mv Stoat-x86_64.AppImage Stoat-linux-x86_64.AppImage
|
|
elif [ "${{ matrix.arch }}" == "arm64" ]; then
|
|
mv Stoat-aarch64.AppImage Stoat-linux-arm64.AppImage
|
|
fi
|
|
|
|
# 9. Upload the AppImage to the Release
|
|
- name: Upload to Release
|
|
uses: softprops/action-gh-release@v2
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
with:
|
|
files: ${{ matrix.arch == 'x64' && 'Stoat-linux-x86_64.AppImage' || 'Stoat-linux-arm64.AppImage' }}
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
#- name: Upload Artifact
|
|
#uses: actions/upload-artifact@v4
|
|
#with:
|
|
#name: Stoat-AppImage-${{ matrix.arch }}
|
|
# path: ${{ matrix.arch == 'x64' && 'Stoat-linux-x86_64.AppImage' || 'Stoat-linux-arm64.AppImage' }}
|
|
# if-no-files-found: error
|