Good idea. This would mirror the flatpak build which calls
flatpak-builder-lint manifest "$MANIFEST"Moderators: another_commander, winston
Marvellous!
I see the problem. The appdir-lint.sh file https://raw.githubusercontent.com/AppIm ... ir-lint.sh has this:hiran wrote: ↑Mon Mar 16, 2026 7:51 pmInside the appimage we need to provide a file namedCode: Select all
/usr/share/metainfo/space.oolite.Oolite.appdata.xml
Code: Select all
# Find the relevant appdata.xml file;
# according to ximion, usr/share/appdata is a legacy path replaced by usr/share/metainfo
APPDATA=$(ls "${APPDIR}"/usr/share/metainfo/*appdata.xml 2>/dev/null | head -n 1) # TODO: Handle more than one better
if [ -z "$APPDATA" ] ; then
APPDATA=$(ls "${APPDIR}"/usr/share/appdata/*appdata.xml 2>/dev/null | head -n 1) # TODO: Handle more than one better
fi
if [ -z "$APPDATA" ] ; then
warn 'No appdata file present. Please provide one in the AppImage as per the instructions on https://www.freedesktop.org/software/appstream/docs/chap-Quickstart.html#sect-Quickstart-DesktopApps'
else
if [ ! -z $(which appstreamcli) ] ; then
appstreamcli validate-tree "${APPDIR}"
else
echo "Skipping AppStream validation since appstreamcli is not on the \$PATH"
fi
fi
The file is not big. We could provide two files - or hard-link it. Or rename it just for the appimage.mcarans wrote: ↑Mon Mar 16, 2026 8:43 pmI see the problem. The appdir-lint.sh file https://raw.githubusercontent.com/AppIm ... ir-lint.sh has this:hiran wrote: ↑Mon Mar 16, 2026 7:51 pmInside the appimage we need to provide a file namedCode: Select all
/usr/share/metainfo/space.oolite.Oolite.appdata.xmlI named the file .metainfo.xml which is the modern naming flatpak expects, but the appimage linter expects the old name .appdata.xml.Code: Select all
# Find the relevant appdata.xml file; # according to ximion, usr/share/appdata is a legacy path replaced by usr/share/metainfo APPDATA=$(ls "${APPDIR}"/usr/share/metainfo/*appdata.xml 2>/dev/null | head -n 1) # TODO: Handle more than one better if [ -z "$APPDATA" ] ; then APPDATA=$(ls "${APPDIR}"/usr/share/appdata/*appdata.xml 2>/dev/null | head -n 1) # TODO: Handle more than one better fi if [ -z "$APPDATA" ] ; then warn 'No appdata file present. Please provide one in the AppImage as per the instructions on https://www.freedesktop.org/software/appstream/docs/chap-Quickstart.html#sect-Quickstart-DesktopApps' else if [ ! -z $(which appstreamcli) ] ; then appstreamcli validate-tree "${APPDIR}" else echo "Skipping AppStream validation since appstreamcli is not on the \$PATH" fi fi
Also the linter is not very big. Somehow I'd prefer to always pull the latest one rather than sticking with an eventually outdated version.mcarans wrote: ↑Mon Mar 16, 2026 8:43 pmI can make this change and add the linter (before this line: https://github.com/mcarans/oolite/blob/ ... age.sh#L54). In 1.92-maintenance, the linter will be downloaded during the build process and then run (like the appimage tools themselves). In master, I will need to add a step to download and install the linter in ~/.local/bin during dependency installation prior to the build (so that they are only downloaded once not on every build).
Ok, too late. This issue was already spotted, logged and closed:hiran wrote: ↑Mon Mar 16, 2026 8:49 pmThe file is not big. We could provide two files - or hard-link it. Or rename it just for the appimage.mcarans wrote: ↑Mon Mar 16, 2026 8:43 pmI see the problem. The appdir-lint.sh file https://raw.githubusercontent.com/AppIm ... ir-lint.sh has this:
I named the file .metainfo.xml which is the modern naming flatpak expects, but the appimage linter expects the old name .appdata.xml.
But I will raise an issue in the linter's repo so these guys are aware.
New release here: https://github.com/mcarans/oolite/releases
I ran the pipeline again. It downloadedmcarans wrote: ↑Tue Mar 17, 2026 4:22 amNew release here: https://github.com/mcarans/oolite/releases
I use the appdata.xml name for appimage. Appimage lint is included in the build and all lint errors are now fixed. Let me know if that fixes things in AppImageHub or if there is anything else they need.
Code: Select all
============= TRYING TO RUN ===============
echo "==========================================="
===========================================
# Suppress desktop integation
mkdir -p "$HOME/.local/share/appimagekit"
touch "$HOME/.local/share/appimagekit/no_desktopintegration"
file "$APPDIR"/AppRun
/tmp/.mount_runtimhnkDeh/AppRun: Bourne-Again shell script, ASCII text executable
ls -lh "$APPDIR"/AppRun
-rwxr-xr-x 1 root root 6.8K Mar 17 04:02 /tmp/.mount_runtimhnkDeh/AppRun
# Needed for, e.g., SheepShaver
sudo sysctl vm.mmap_min_addr=0
vm.mmap_min_addr = 0
export QTWEBENGINE_DISABLE_SANDBOX=1 # https://github.com/netblue30/firejail/issues/2669
export QT_DEBUG_PLUGINS=1 # https://github.com/AppImage/appimage.github.io/pull/1809#issuecomment-548399825
sudo sysctl kernel.unprivileged_userns_clone=1 # https://github.com/AppImage/appimage.github.io/pull/1564#issuecomment-491591127 https://github.com/electron/electron/issues/17972
kernel.unprivileged_userns_clone = 1
# reset does not work here
if [ x"$TERMINAL" == xfalse ] ; then
firejail --quiet --noprofile --net=none --appimage ./"$FILENAME" &
else
xterm -hold -e firejail --quiet --noprofile --net=none --appimage ./"$FILENAME" --help &
fi
APID=$!
sleep 30
2026-03-17 21:22:15.343 oolite[20:30] Truncating thread name 'OOLogOutputHandler logging thread' to 15 characters due to platform limitations
ALSA lib confmisc.c:855:(parse_card) cannot find card '0'
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory
ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1334:(snd_func_refer) error evaluating name
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5701:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM default
AL lib: (EE) ALCplaybackAlsa_open: Could not open playback device 'default': No such file or directory
ALSA lib confmisc.c:855:(parse_card) cannot find card '0'
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory
ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1334:(snd_func_refer) error evaluating name
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5701:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM default
AL lib: (EE) ALCplaybackAlsa_open: Could not open playback device 'default': No such file or directory
# Make a screenshot
# Get a list of open windows
xwininfo -tree -root | grep 0x | grep '": ("' | sed -e 's/^[[:space:]]*//'
0x60000e "Oolite v1.92.1 - Mar 17 2026": ("oolite" "oolite") 1280x720+-240+-60 +-240+-60
# Count the windows on screen
NUMBER_OF_WINDOWS=$(xwininfo -tree -root | grep 0x | grep '": ("' | sed -e 's/^[[:space:]]*//' | wc -l)
echo "NUMBER_OF_WINDOWS: $NUMBER_OF_WINDOWS"
NUMBER_OF_WINDOWS: 1
if [ $(($NUMBER_OF_WINDOWS)) -lt 1 ] ; then
echo "ERROR: Could not find a single window on screen :-("
kill -9 $$
exit 1
fi
# Works with Xvfb but cannot select window by ID
# sudo apt-get -y install scrot
# scrot -b 'screenshot_$wx$h.jpg' # -u gives "X Error of failed request: BadDrawable (invalid Pixmap or Window parameter)"
# mv screenshot_* database/$INPUTBASENAME/
# Getting the active window seems to require a window manager
icewm &
sleep 2
# We could simulate X11 keyboard/mouse input with xdotool here if needed;
# of course this should not be hardcoded here (this is just an example)
if [ x"$INPUTBASENAME" == xVLC ] ; then
xdotool sleep 0.1 key Return # Click away the data protection window
xdotool sleep 0.1 key shift+F1 # Open the about screen
sleep 1
fi
if [ x"$INPUTBASENAME" == xSubsurface ] ; then
xdotool sleep 0.1 key Escape # Click away the update check window
sleep 1
# Get a list of open windows
xwininfo -tree -root | grep 0x | grep '": ("' | sed -e 's/^[[:space:]]*//'
fi
# Clean residue from previous runs, avoiding issue #3438
if [ -n "$INPUTBASENAME" ] && [ -d "database/$INPUTBASENAME" ]; then
rm -r "database/$INPUTBASENAME"
fi
# Works with Xvfb
# sudo apt-get -y install x11-apps netpbm xdotool # We do this in .travis.yml
# -display :99 needed here?
# xwd -id $(xdotool getactivewindow) -silent | xwdtopnm | pnmtojpeg > database/$INPUTBASENAME/screenshot.jpg && echo "Snap!"
mkdir -p database/$INPUTBASENAME/
# Taking screenshot like this fails, https://github.com/AppImage/appimage.github.io/issues/2494
# convert x:$(xwininfo -tree -root | grep 0x | grep '": ("' | sed -e 's/^[[:space:]]*//' | head -n 1 | cut -d " " -f 1) database/$INPUTBASENAME/screenshot.png && echo "Snap!"
import -window "$(xdotool getactivewindow)" database/$INPUTBASENAME/screenshot.png && echo "Screenshot taken"
Screenshot taken
kill $APID && printf "\n\n\n* * * SUCCESS :-) * * *\n\n\n" || exit 1
* * * SUCCESS :-) * * *
killall icewm
# Check if the screenshot is unusable and error out if it is
if [ $(file -b --mime-type database/$INPUTBASENAME/screenshot.png) != "image/png" ] ; then
echo "Could not take a screenshot png file"
ls -lh database/$INPUTBASENAME/screenshot.png
file database/$INPUTBASENAME/screenshot.png
file -b --mime-type database/$INPUTBASENAME/screenshot.png
exit 1
fi
# [ -s database/$INPUTBASENAME/screenshot.png ] || echo "Screenshot is empty" && exit 1
echo "==========================================="
===========================================
I looked at your logs: https://github.com/oocube/appimage.gith ... step:6:975hiran wrote: ↑Tue Mar 17, 2026 9:40 pmI ran the pipeline again. It downloadedmcarans wrote: ↑Tue Mar 17, 2026 4:22 amNew release here: https://github.com/mcarans/oolite/releases
I use the appdata.xml name for appimage. Appimage lint is included in the build and all lint errors are now fixed. Let me know if that fixes things in AppImageHub or if there is anything else they need.
https://github.com/mcarans/oolite/relea ... 4.AppImage
Result first: It looks like it passed, and some meaningful information was picked by the analysis steps. We can add this to the original repo's master and release branches.![]()
Something caught my eyes though: Despite us providing several screenshots, they run the software to make their own and add the first of ours. I have not seen what Oolite looks like, but here is some of the build output. Note the line where Oolite gets invoked via firejail. I understand that Oolite is started without networking (whatever that means). We are lucky our problem starting without network was spotted and fixed in time.
Code: Select all
============= TRYING TO RUN =============== echo "===========================================" =========================================== # Suppress desktop integation mkdir -p "$HOME/.local/share/appimagekit" touch "$HOME/.local/share/appimagekit/no_desktopintegration" file "$APPDIR"/AppRun /tmp/.mount_runtimhnkDeh/AppRun: Bourne-Again shell script, ASCII text executable ls -lh "$APPDIR"/AppRun -rwxr-xr-x 1 root root 6.8K Mar 17 04:02 /tmp/.mount_runtimhnkDeh/AppRun # Needed for, e.g., SheepShaver sudo sysctl vm.mmap_min_addr=0 vm.mmap_min_addr = 0 export QTWEBENGINE_DISABLE_SANDBOX=1 # https://github.com/netblue30/firejail/issues/2669 export QT_DEBUG_PLUGINS=1 # https://github.com/AppImage/appimage.github.io/pull/1809#issuecomment-548399825 sudo sysctl kernel.unprivileged_userns_clone=1 # https://github.com/AppImage/appimage.github.io/pull/1564#issuecomment-491591127 https://github.com/electron/electron/issues/17972 kernel.unprivileged_userns_clone = 1 # reset does not work here if [ x"$TERMINAL" == xfalse ] ; then firejail --quiet --noprofile --net=none --appimage ./"$FILENAME" & else xterm -hold -e firejail --quiet --noprofile --net=none --appimage ./"$FILENAME" --help & fi APID=$! sleep 30 2026-03-17 21:22:15.343 oolite[20:30] Truncating thread name 'OOLogOutputHandler logging thread' to 15 characters due to platform limitations ALSA lib confmisc.c:855:(parse_card) cannot find card '0' ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory ALSA lib confmisc.c:1334:(snd_func_refer) error evaluating name ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory ALSA lib conf.c:5701:(snd_config_expand) Evaluate error: No such file or directory ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM default AL lib: (EE) ALCplaybackAlsa_open: Could not open playback device 'default': No such file or directory ALSA lib confmisc.c:855:(parse_card) cannot find card '0' ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory ALSA lib confmisc.c:1334:(snd_func_refer) error evaluating name ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory ALSA lib conf.c:5701:(snd_config_expand) Evaluate error: No such file or directory ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM default AL lib: (EE) ALCplaybackAlsa_open: Could not open playback device 'default': No such file or directory # Make a screenshot # Get a list of open windows xwininfo -tree -root | grep 0x | grep '": ("' | sed -e 's/^[[:space:]]*//' 0x60000e "Oolite v1.92.1 - Mar 17 2026": ("oolite" "oolite") 1280x720+-240+-60 +-240+-60 # Count the windows on screen NUMBER_OF_WINDOWS=$(xwininfo -tree -root | grep 0x | grep '": ("' | sed -e 's/^[[:space:]]*//' | wc -l) echo "NUMBER_OF_WINDOWS: $NUMBER_OF_WINDOWS" NUMBER_OF_WINDOWS: 1 if [ $(($NUMBER_OF_WINDOWS)) -lt 1 ] ; then echo "ERROR: Could not find a single window on screen :-(" kill -9 $$ exit 1 fi # Works with Xvfb but cannot select window by ID # sudo apt-get -y install scrot # scrot -b 'screenshot_$wx$h.jpg' # -u gives "X Error of failed request: BadDrawable (invalid Pixmap or Window parameter)" # mv screenshot_* database/$INPUTBASENAME/ # Getting the active window seems to require a window manager icewm & sleep 2 # We could simulate X11 keyboard/mouse input with xdotool here if needed; # of course this should not be hardcoded here (this is just an example) if [ x"$INPUTBASENAME" == xVLC ] ; then xdotool sleep 0.1 key Return # Click away the data protection window xdotool sleep 0.1 key shift+F1 # Open the about screen sleep 1 fi if [ x"$INPUTBASENAME" == xSubsurface ] ; then xdotool sleep 0.1 key Escape # Click away the update check window sleep 1 # Get a list of open windows xwininfo -tree -root | grep 0x | grep '": ("' | sed -e 's/^[[:space:]]*//' fi # Clean residue from previous runs, avoiding issue #3438 if [ -n "$INPUTBASENAME" ] && [ -d "database/$INPUTBASENAME" ]; then rm -r "database/$INPUTBASENAME" fi # Works with Xvfb # sudo apt-get -y install x11-apps netpbm xdotool # We do this in .travis.yml # -display :99 needed here? # xwd -id $(xdotool getactivewindow) -silent | xwdtopnm | pnmtojpeg > database/$INPUTBASENAME/screenshot.jpg && echo "Snap!" mkdir -p database/$INPUTBASENAME/ # Taking screenshot like this fails, https://github.com/AppImage/appimage.github.io/issues/2494 # convert x:$(xwininfo -tree -root | grep 0x | grep '": ("' | sed -e 's/^[[:space:]]*//' | head -n 1 | cut -d " " -f 1) database/$INPUTBASENAME/screenshot.png && echo "Snap!" import -window "$(xdotool getactivewindow)" database/$INPUTBASENAME/screenshot.png && echo "Screenshot taken" Screenshot taken kill $APID && printf "\n\n\n* * * SUCCESS :-) * * *\n\n\n" || exit 1 * * * SUCCESS :-) * * * killall icewm # Check if the screenshot is unusable and error out if it is if [ $(file -b --mime-type database/$INPUTBASENAME/screenshot.png) != "image/png" ] ; then echo "Could not take a screenshot png file" ls -lh database/$INPUTBASENAME/screenshot.png file database/$INPUTBASENAME/screenshot.png file -b --mime-type database/$INPUTBASENAME/screenshot.png exit 1 fi # [ -s database/$INPUTBASENAME/screenshot.png ] || echo "Screenshot is empty" && exit 1 echo "===========================================" ===========================================
Code: Select all
screenshots:
- - OoliteMc/screenshot.png
+- https://raw.githubusercontent.com/OoliteProject/oolite/1.92-maintenance/installers/FreeDesktop/oolite-999.png