From c115680e7c93b5cd2d3c125756b90fd9f29b7ff3 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Tue, 27 Sep 2022 09:33:52 -0400 Subject: Add smoke tests to AppImage build in CI Verify runpath for all executables, check to make sure the AppImage works in various intended ways. --- build-scripts/build-appimage | 45 ++++++++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 12 deletions(-) (limited to 'build-scripts') diff --git a/build-scripts/build-appimage b/build-scripts/build-appimage index a9fba23c..95b11e77 100755 --- a/build-scripts/build-appimage +++ b/build-scripts/build-appimage @@ -5,11 +5,11 @@ # described in README-maintainer. # set -ex -cd appimage +pushd appimage docker build -t qpdfbuild . rm -rf build mkdir build -cd .. +popd git clone .git appimage/build/qpdf docker run --privileged --rm \ -v $PWD/appimage/build:/tmp/build ${1+"$@"} qpdfbuild @@ -19,20 +19,41 @@ cp -p appimage/build/qpdf/appimage/build/qpdf*AppImage* distribution for i in distribution/*; do mv $i $(echo $i | sed -e 's/\.AppImage/-ci.AppImage/') done +version=$(basename distribution/qpdf*AppImage | cut -d- -f 2) + +# Smoke test the AppImage +app_image=$(echo distribution/qpdf*AppImage) +# Directly invoking the AppImage should behave like qpdf +${app_image} --version | grep -E "^qpdf version $version" +# Invoking the AppImage with a subcommand should behave like the subcommand +${app_image} qpdf --version | grep -E "^qpdf version $version" +${app_image} fix-qdf --version | grep -E "^fix-qdf from qpdf version $version" +${app_image} zlib-flate --version | grep -E "^zlib-flate from qpdf version $version" +# Symlinking a command to the AppImage should invoke as that command +mkdir appimage/build/argv0-test +pushd appimage/build/argv0-test +for i in qpdf fix-qdf zlib-flate; do + ln -s ../../../${app_image} ./$i +done +./qpdf --version | grep -E "^qpdf version $version" +./fix-qdf --version | grep -E "^fix-qdf from qpdf version $version" +./zlib-flate --version | grep -E "^zlib-flate from qpdf version $version" +popd # Extract a standalone copy of binaries and libraries from the # AppImage. This is suitable for use in AWS Lambda, docker, or other -# self-contained environments. -version=$(basename distribution/qpdf*AppImage | cut -d- -f 2) -./distribution/qpdf*AppImage --appimage-extract +# self-contained environments. We are relying on the AppImage build to +# create an executable whose runpath is relative to the binary so that +# the extract zip file is relocatable. +${app_image} --appimage-extract D=$PWD/distribution -if ! (readelf -d squashfs-root/usr/bin/qpdf | \ - grep RUNPATH | grep -q -F ..); then - # We are relying on the AppImage build to create an executable - # whose runpath is relative to the binary so that the extract zip - # file is relocatable. - echo "Standalone linux binary lacks relative RUNPATH" -fi +for i in qpdf fix-qdf zlib-flate; do + if ! (readelf -d squashfs-root/usr/bin/$i | \ + grep RUNPATH | grep -q -F ..); then + echo "Standalone linux binary $i lacks relative RUNPATH" + exit 2 + fi +done (cd squashfs-root/usr; \ zip -9 --symlinks $D/qpdf-$version-bin-linux-x86_64-ci.zip \ bin/{qpdf,fix-qdf,zlib-flate} lib/*) -- cgit v1.2.3-54-g00ecf