bundle manually #103
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |