Skip to content

arm AppImage

arm AppImage #56

Workflow file for this run

name: arm AppImage
on:
workflow_dispatch:
inputs:
yyyymmdd:
description: 'Release date (yyyymmdd)'
required: true
env:
QT_VERSION: 6.9.1
jobs:
appimage:
runs-on: ubuntu-22.04-arm
container:
image: ghcr.io/csreviser/qt6-debian-arm-static:latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Dependencies
run: |
apt update && apt install sudo -y
sudo apt update
sudo apt install -y \
build-essential \
libgl1-mesa-dev \
libxcb1-dev libxcb-util-dev libx11-dev \
libxext-dev libxrender-dev libxkbcommon-dev \
libx11-xcb-dev \
libxcb-cursor-dev \
libxcb-glx0-dev \
libxcb-icccm4-dev \
libxcb-image0-dev \
libxcb-keysyms1-dev \
libxcb-randr0-dev \
libxcb-render-util0-dev \
libxcb-shape0-dev \
libxcb-shm0-dev \
libxcb-sync-dev \
libxcb-util-dev \
libxcb-xfixes0-dev \
libxcb-xkb-dev \
libxcb1-dev \
libxext-dev \
libxfixes-dev \
libxi-dev \
libxkbcommon-dev \
libxkbcommon-x11-dev \
libxrender-dev \
cmake make g++ pax-utils \
libpcre3 \
desktop-file-utils patchelf wget file git fuse libc6 p7zip-full
qmake6 -version
which qmake6
sudo ln -sf /usr/bin/qmake6 /usr/bin/qmake
which qmake
- name: Run ldd version check
run: ldd --version
- name: Check GLIBC versions
run: strings /lib/aarch64-linux-gnu/libc.so.6 | grep GLIBC_
# - name: Install Qt
# uses: jurplel/install-qt-action@v4
# with:
# version: 6.8.*
# modules: 'qtcharts'
# extra: '--external 7z'
- name: Clone CaptureStream2
run: |
git clone https://github.com/CSReviser/CaptureStream2.git
cd CaptureStream2
git submodule update --init --recursive
# git checkout feature
- name: Download and extract Qt ${{ env.QT_VERSION }} static build
run: |
curl -LO https://github.com/CSReviser/qt6-static-builder/releases/download/qt6.9.1-static-linux/qt6.9.1-linux-static.tar.gz
tar -xf qt6.9.1-linux-static.tar.gz
- name: Build CaptureStream2 with static Qt using qt-cmake
run: |
cd CaptureStream2
mkdir build && cd build
../../opt/qt6-static/bin/qt-cmake .. -DQT_DEBUG_FIND_PACKAGE=ON
cmake --build . --parallel
# - name: Build Application
# run: |
# cd CaptureStream2
# mkdir build
# cmake -DCMAKE_SYSTEM_PROCESSOR=arm64 -S ./ -B build
# cmake --build build --parallel
# qmake6 && make
- name: Download linuxdeploy and plugin
run: |
cd CaptureStream2
wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-aarch64.AppImage
chmod +x linuxdeploy-aarch64.AppImage
# wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-aarch64.AppImage
# chmod +x linuxdeploy-plugin-qt-aarch64.AppImage
- name: Copy missing libs
run: |
mkdir -p CaptureStream2/AppDir/usr/lib
ls /lib
cp /lib/aarch64-linux-gnu/libxkbcommon.so.0* CaptureStream2/AppDir/usr/lib/
cp /lib/aarch64-linux-gnu/libglib-2.0.so.0* CaptureStream2/AppDir/usr/lib/
cp /lib/aarch64-linux-gnu/libgthread-2.0.so.0* CaptureStream2/AppDir/usr/lib/
cp /lib/aarch64-linux-gnu/libpcre.so.3* CaptureStream2/AppDir/usr/lib/
cp /lib/aarch64-linux-gnu/libdbus-1.so.3* CaptureStream2/AppDir/usr/lib/
cp /lib/aarch64-linux-gnu/libsystemd.so.0* CaptureStream2/AppDir/usr/lib/
cp /lib/aarch64-linux-gnu/libxcb.so.1* CaptureStream2/AppDir/usr/lib/
cp /lib/aarch64-linux-gnu/libXau.so.6* CaptureStream2/AppDir/usr/lib/
cp /lib/aarch64-linux-gnu/libXdmcp.so.6* CaptureStream2/AppDir/usr/lib/
cp /lib/aarch64-linux-gnu/libbsd.so.0* CaptureStream2/AppDir/usr/lib/
cp /lib/aarch64-linux-gnu/libxcb-cursor.so.0* CaptureStream2/AppDir/usr/lib/
mkdir -p CaptureStream2/AppDir/usr/bin
cat <<EOF > CaptureStream2/AppDir/usr/bin/qt.conf
[Paths]
Plugins=../lib/qt6/plugins
Qml2Imports=../lib/qt6/qml
EOF
- name: Extract linuxdeploy AppImage
run: |
cd CaptureStream2
chmod +x linuxdeploy-aarch64.AppImage
./linuxdeploy-aarch64.AppImage --appimage-extract
mv squashfs-root linuxdeploy-extracted
chmod +x linuxdeploy-extracted/AppRun
# ./linuxdeploy-plugin-qt-aarch64.AppImage --appimage-extract
# mv squashfs-root plugin-qt-extracted
- name: Build AppImage without FUSE
run: |
cd CaptureStream2
ls linuxdeploy-extracted
./linuxdeploy-extracted/AppRun \
--appdir AppDir \
--desktop-file CaptureStream2.desktop \
--icon-file icon.png \
--executable ./build/CaptureStream2 \
--output appimage
cd build
mkdir -p LinCaptureStream2
cp ../CaptureStream2-aarch64.AppImage ./LinCaptureStream2/CaptureStream2
cp ../qss_files/stylesheet-ubu.qss ./LinCaptureStream2
cp -r ../qss_files/License ./LinCaptureStream2
wget -qO ffmpeg-static-ubuntu-arm.zip https://github.com/CSReviser/ffmpeg-build/releases/download/7.1.1/ffmpeg-static-ubuntu-arm.zip
7z e ffmpeg-static-ubuntu-arm.zip ffmpeg -o./LinCaptureStream2
chmod -R 755 ./LinCaptureStream2
- name: Create ZIP file
run: |
cd CaptureStream2/build
zip -r "CaptureStream2-AppImage-arm-${{ github.event.inputs.yyyymmdd }}.zip" LinCaptureStream2
cp ./CaptureStream2 ./LinCaptureStream2/CaptureStream2
zip -r "CaptureStream2-ubuntu-arm-${{ github.event.inputs.yyyymmdd }}.zip" LinCaptureStream2
- name: Upload zip to GitHub Release
uses: softprops/action-gh-release@v2
with:
files: CaptureStream2/build/CaptureStream2-AppImage-arm-${{ github.event.inputs.yyyymmdd }}.zip
tag_name: ${{ github.event.inputs.yyyymmdd }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload zip to GitHub Release
uses: softprops/action-gh-release@v2
with:
files: CaptureStream2/build/CaptureStream2-ubuntu-arm-${{ github.event.inputs.yyyymmdd }}.zip
tag_name: ${{ github.event.inputs.yyyymmdd }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload AppImage
uses: actions/upload-artifact@v4
with:
name: CaptureStream2-AppImage
path: ./CaptureStream2/CaptureStream2-aarch64.AppImage