name: AppImage Build on: push: branches: [master] pull_request: branches: [master] jobs: appimage_build: runs-on: ubuntu-24.04 permissions: contents: read id-token: write attestations: write artifact-metadata: write steps: - uses: actions/checkout@v4 with: submodules: true - name: Install build dependencies run: | set -eux sudo apt-get update sudo apt-get install -y --no-install-recommends \ build-essential pkg-config meson ninja-build cmake \ gettext \ libcanberra-dev libdbus-glib-1-dev libglib2.0-dev \ libgtk2.0-dev libgtk-3-dev \ libgtk-3-bin libglib2.0-bin shared-mime-info gsettings-desktop-schemas \ libluajit-5.1-dev libpci-dev libperl-dev libssl-dev \ python3-dev python3-cffi mono-devel desktop-file-utils \ patchelf file curl - name: Configure run: | set -eux rm -rf build meson setup build \ --prefix=/usr \ -Dtext-frontend=true \ -Dwith-perl=perl \ -Dwith-python=python3 \ -Dauto_features=enabled - name: Build run: | set -eux ninja -C build - name: Install to AppDir run: | set -eux rm -rf AppDir DESTDIR="${PWD}/AppDir" ninja -C build install - name: Build AppImage env: APPIMAGE_EXTRACT_AND_RUN: 1 DEPLOY_GTK_VERSION: 3 LDAI_NO_APPSTREAM: 1 run: | set -eux curl -fL --retry 3 -o linuxdeploy-x86_64.AppImage \ https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage chmod +x linuxdeploy-x86_64.AppImage curl -fL --retry 3 -o linuxdeploy-plugin-gtk \ https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh chmod +x linuxdeploy-plugin-gtk export PATH="${PWD}:${PATH}" # Bundle CA certificates into the AppDir install -Dm644 /etc/ssl/certs/ca-certificates.crt \ AppDir/etc/ssl/certs/ca-certificates.crt # Custom AppRun: preserve typical AppDir runtime paths AND force CA bundle cat > AppRun <<'EOF' #!/bin/sh set -eu APPDIR="${APPDIR:-$(dirname "$(readlink -f "$0")")}" export PATH="$APPDIR/usr/bin:${PATH:-/usr/bin:/bin}" export LD_LIBRARY_PATH="$APPDIR/usr/lib:$APPDIR/usr/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH:-}" export XDG_DATA_DIRS="$APPDIR/usr/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" if [ -d "$APPDIR/usr/share/glib-2.0/schemas" ]; then export GSETTINGS_SCHEMA_DIR="$APPDIR/usr/share/glib-2.0/schemas${GSETTINGS_SCHEMA_DIR:+:$GSETTINGS_SCHEMA_DIR}" fi if [ -d "$APPDIR/usr/lib/x86_64-linux-gnu/gio/modules" ]; then export GIO_EXTRA_MODULES="$APPDIR/usr/lib/x86_64-linux-gnu/gio/modules${GIO_EXTRA_MODULES:+:$GIO_EXTRA_MODULES}" elif [ -d "$APPDIR/usr/lib/gio/modules" ]; then export GIO_EXTRA_MODULES="$APPDIR/usr/lib/gio/modules${GIO_EXTRA_MODULES:+:$GIO_EXTRA_MODULES}" fi # OpenSSL trust store override (fixes “unable to get local issuer certificate (20)”) export SSL_CERT_FILE="${SSL_CERT_FILE:-$APPDIR/etc/ssl/certs/ca-certificates.crt}" export SSL_CERT_DIR="${SSL_CERT_DIR:-$APPDIR/etc/ssl/certs}" export CURL_CA_BUNDLE="${CURL_CA_BUNDLE:-$SSL_CERT_FILE}" exec "$APPDIR/usr/bin/zoitechat" "$@" EOF chmod +x AppRun VERSION="$(git describe --tags --always)" ./linuxdeploy-x86_64.AppImage \ --appdir AppDir \ --desktop-file AppDir/usr/share/applications/net.zoite.Zoitechat.desktop \ --icon-file AppDir/usr/share/icons/hicolor/48x48/apps/net.zoite.Zoitechat.png \ --custom-apprun ./AppRun \ --plugin gtk \ --output appimage appimage_path="$(ls -1 *.AppImage | grep -v linuxdeploy | head -n 1)" mv "$appimage_path" "Zoitechat-${VERSION}-x86_64.AppImage" - name: Attest AppImage (Build Provenance) if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }} uses: actions/attest-build-provenance@v3 with: subject-path: Zoitechat-*-x86_64.AppImage - name: Upload AppImage artifact uses: actions/upload-artifact@v4 with: name: zoitechat-appimage path: Zoitechat-*-x86_64.AppImage