Skip to content

bundle manually

bundle manually #103

Workflow file for this run

name: Build app binaries
on:
push:
branches:
- main
- build-mac-win
tags:
- "*"
pull_request:
env:
QT_VERSION: "6.8.3"
APP_NAME: subtivals
APP_LABEL: Subtivals
BUILD_TYPE: release
jobs:
build-linux:
runs-on: ubuntu-22.04
environment: build
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get latest tag version
run: echo "PACKAGE_VERSION=$(git describe --tags --abbrev=0 || echo 0.0.0)" >> "$GITHUB_ENV"
- name: Install dependencies
run: |
sudo apt update
sudo apt install -y \
build-essential cmake \
patchelf dpkg fakeroot \
squashfs-tools xz-utils \
libfuse2 \
file \
desktop-file-utils \
libgl1-mesa-dev \
libx11-6 \
libx11-xcb1 \
libxcb1 \
libxcb-util1 \
libxcb-image0 \
libxcb-shm0 \
libxcb-icccm4 \
libxcb-keysyms1 \
libxcb-render0 \
libxcb-render-util0 \
libxcb-xinerama0 \
libxcb-xkb1 \
libxcb-cursor0 \
libxcb-shape0 \
libxkbcommon0 \
libxkbcommon-x11-0 \
libxcb-dpms0-dev \
libxcb1-dev \
libxcb-screensaver0-dev \
libxrender1 \
libglib2.0-0 \
zlib1g \
libssl3 \
libpng16-16 \
wget curl python3-pip imagemagick \
libwayland-client0 \
libwayland-cursor0 \
libwayland-egl1 \
libwayland-server0 \
qtwayland5 \
qt6-wayland
- name: Install Qt using aqtinstall
run: |
python3 -m pip install --upgrade pip
python3 -m pip install "aqtinstall<4"
python3 -m aqt list-qt linux desktop --modules "${QT_VERSION}" linux_gcc_64
python3 -m aqt install-qt --outputdir "$HOME/Qt" linux desktop "${QT_VERSION}" linux_gcc_64 -m qtwebsockets
echo "$HOME/Qt/${QT_VERSION}/gcc_64/bin" >> "$GITHUB_PATH"
- name: Download linuxdeployqt
run: |
wget https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
chmod +x linuxdeployqt-continuous-x86_64.AppImage
sudo mv linuxdeployqt-continuous-x86_64.AppImage /usr/local/bin/linuxdeployqt
- name: Configure and build
run: |
which qmake6
qmake6 --version
qmake6 -query QT_INSTALL_LIBS
mkdir -p build && cd build
qmake6 "../src/${APP_NAME}.pro" CONFIG+="$BUILD_TYPE" CONFIG+=static
make "-j$(nproc)"
- name: Prepare AppDir for AppImage
run: |
APPDIR=AppDir
mkdir -p "$APPDIR/usr/bin"
mkdir -p "$APPDIR/usr/share/applications"
mkdir -p "$APPDIR/usr/share/icons/hicolor/256x256/apps"
cp "build/${APP_NAME}" "$APPDIR/usr/bin/"
cp resources/subtivals.png "$APPDIR/subtivals.png"
convert "resources/${APP_NAME}.ico" -resize 256x256 "$APPDIR/usr/share/icons/hicolor/256x256/apps/${APP_NAME}.png"
cat <<EOF > "$APPDIR/usr/share/applications/${APP_NAME}.desktop"
[Desktop Entry]
Name=${APP_NAME}
Exec=${APP_NAME}
Icon=${APP_NAME}
Type=Application
Categories=Utility;
EOF
- name: Check dynamic dependencies
run: |
ldd "$APPDIR/usr/bin/${APP_NAME}" || true
- name: Bundle Wayland plugins & run linuxdeployqt
run: |
APPDIR=AppDir
# Ensure Qt Wayland platform plugins are in AppDir
ls -la "$HOME/Qt/${QT_VERSION}/gcc_64/plugins/platforms/"
mkdir -p "$APPDIR/usr/plugins/platforms"
cp "$HOME/Qt/${QT_VERSION}/gcc_64/plugins/platforms/libqwayland"* "$APPDIR/usr/plugins/platforms/" || true
# Copy any Wayland-related Qt libraries
mkdir -p "$APPDIR/usr/lib"
cp -u "$HOME/Qt/${QT_VERSION}/gcc_64/lib/libQt6Wayland"* "$APPDIR/usr/lib/" || true
# Also bundle the xcb plugin (for fallback on X11 hosts)
cp "$HOME/Qt/${QT_VERSION}/gcc_64/plugins/platforms/libqxcb.so" "$APPDIR/usr/plugins/platforms/" || true
# Run linuxdeployqt without relying on -extra-plugins
linuxdeployqt "$APPDIR/usr/share/applications/${APP_NAME}.desktop" \
-appimage -bundle-non-qt-libs
mv ./*.AppImage "${APP_NAME}-${PACKAGE_VERSION}.AppImage"
chmod +x "${APP_NAME}-${PACKAGE_VERSION}.AppImage"
- name: Check AppImage
run: |
"./${APP_NAME}-${PACKAGE_VERSION}.AppImage" --appimage-extract
ldd "squashfs-root/usr/bin/${APP_NAME}"
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ env.APP_NAME }}-artifacts-linux
path: "*.AppImage"
if-no-files-found: error
release:
needs:
- build-linux
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
steps:
- name: Download built artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Display downloaded files
run: ls -R artifacts
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
files: |
artifacts/**/*-demo*
artifacts/**/*.AppImage
tag_name: "${{ github.ref_name }}"
name: "Release ${{ github.ref_name }}"
body: "Automated release for version ${{ github.ref_name }}"
draft: true
prerelease: true