Enable the Linux AppImage github action #2
This file contains 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: Ubuntu 20.04 / Qt 5 for AppImage | |
on: | |
push: | |
paths-ignore: | |
- scripts/docker/** | |
pull_request: | |
paths-ignore: | |
- scripts/docker/** | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
container: | |
image: ubuntu:20.04 | |
steps: | |
- name: get container ready for build | |
run: | | |
echo "--------------------------------------------------------------" | |
echo "update distro and install dependencies" | |
apt-get update | |
apt-get dist-upgrade -y | |
DEBIAN_FRONTEND=noninteractive apt-get install -y -q \ | |
autoconf automake cmake g++ git libcrypto++-dev libcurl4-gnutls-dev \ | |
libgit2-dev libqt5qml5 libqt5quick5 libqt5svg5-dev \ | |
libqt5webkit5-dev libsqlite3-dev libssh2-1-dev libssl-dev libssl-dev \ | |
libtool libusb-1.0-0-dev libxml2-dev libxslt1-dev libzip-dev make \ | |
pkg-config qml-module-qtlocation qml-module-qtpositioning \ | |
qml-module-qtquick2 qt5-qmake qtchooser qtconnectivity5-dev \ | |
qtdeclarative5-dev qtdeclarative5-private-dev qtlocation5-dev \ | |
qtpositioning5-dev qtscript5-dev qttools5-dev qttools5-dev-tools \ | |
qtquickcontrols2-5-dev xvfb libbluetooth-dev libmtp-dev \ | |
mdbtools-dev curl | |
git config --global user.email "[email protected]" | |
git config --global user.name "Subsurface CI" | |
git config --global --add safe.directory $GITHUB_WORKSPACE | |
git config --global --add safe.directory $GITHUB_WORKSPACE/libdivecomputer | |
# needs git from the previous step | |
- name: checkout sources | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
submodules: recursive | |
- name: build Subsurface | |
run: | | |
echo "--------------------------------------------------------------" | |
echo "building desktop" | |
# now build the appimage | |
cd .. | |
bash -e -x subsurface/scripts/build.sh -desktop -create-appdir -build-with-webkit | |
- name: test desktop build | |
run: | | |
echo "--------------------------------------------------------------" | |
echo "running tests for desktop" | |
cd build/tests | |
# xvfb-run --auto-servernum ./TestGitStorage -v2 | |
xvfb-run --auto-servernum make check | |
- name: build appimage | |
run: | | |
echo "--------------------------------------------------------------" | |
echo "assembling AppImage" | |
export QT_PLUGIN_PATH=$QT_ROOT/plugins | |
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins | |
export QT_DEBUG_PLUGINS=1 | |
cd .. | |
# set up the appdir | |
mkdir -p appdir/usr/plugins/ | |
# mv googlemaps plugins into place | |
mv appdir/usr/usr/lib/x86_64-linux-gnu/qt5/plugins/* appdir/usr/plugins # the usr/usr is not a typo, that's where it ends up | |
rm -rf appdir/usr/home/ appdir/usr/include/ appdir/usr/share/man/ # No need to ship developer and man files as part of the AppImage | |
rm -rf appdir/usr/usr appdir/usr/lib/x86_64-linux-gnu/cmake appdir/usr/lib/pkgconfig | |
cp /usr/lib/x86_64-linux-gnu/libssl.so.1.1 appdir/usr/lib/ | |
cp /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 appdir/usr/lib/ | |
# get the linuxdeployqt tool and run it to collect the libraries | |
# | |
# ideally we should switch to using an actually released version of | |
# the tool, or alternatively cache a fixed version on our side | |
curl -L -O "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" | |
chmod a+x linuxdeployqt*.AppImage | |
unset QTDIR | |
unset QT_PLUGIN_PATH | |
unset LD_LIBRARY_PATH | |
./linuxdeployqt*.AppImage --appimage-extract-and-run ./appdir/usr/share/applications/*.desktop -exclude-libs=libdbus-1.so.3 -bundle-non-qt-libs -qmldir=./subsurface/stats -qmldir=./subsurface/map-widget/ -verbose=2 | |
# create the AppImage | |
./linuxdeployqt*.AppImage --appimage-extract-and-run ./appdir/usr/share/applications/*.desktop -exclude-libs=libdbus-1.so.3 -appimage -qmldir=./subsurface/stats -qmldir=./subsurface/map-widget/ -verbose=2 | |
# copy AppImage to the calling VM | |
# with GitHub Actions the $GITHUB_WORKSPACE directory is the current working directory at the start of a step | |
cp Subsurface*.AppImage* $GITHUB_WORKSPACE/Subsurface.AppImage | |
- name: PR artifacts | |
# We cannot update this as glibc on 16.04 is too old for node 20. | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Subsurface-Linux-AppImage | |
path: Subsurface.AppImage | |
compression-level: 0 |