name: Ubuntu 20.04 / Qt 5 for AppImage on: push: paths-ignore: - scripts/docker/** branches: - master pull_request: paths-ignore: - scripts/docker/** branches: - master 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 "ci@subsurface-divelog.org" 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: set the version information id: version_number uses: ./.github/actions/manage-version with: nightly-builds-secret: ${{ secrets.NIGHTLY_BUILDS }} - 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 env: VERSION: ${{ steps.version_number.outputs.version }} 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-$VERSION.AppImage - name: PR artifacts if: github.event_name == 'pull_request' # 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-${{ steps.version_number.outputs.version }} path: Subsurface-*.AppImage compression-level: 0 # only publish a 'release' on push events (those include merging a PR) - name: upload binaries if: github.event_name == 'push' uses: softprops/action-gh-release@v2 with: tag_name: v${{ steps.version_number.outputs.version }} repository: ${{ github.repository_owner }}/nightly-builds token: ${{ secrets.NIGHTLY_BUILDS }} prerelease: false fail_on_unmatched_files: true files: | ./Subsurface-*.AppImage