Page 3 of 3

Re: Publish AppImage to appimage.github.io/

Posted: Mon Mar 16, 2026 8:05 pm
by mcarans
hiran wrote: Mon Mar 16, 2026 7:52 pm
Actually we could add this linter to our build process - just before the AppImage is getting created. Then we'd have first hand feedback.
Good idea. This would mirror the flatpak build which calls flatpak-builder-lint manifest "$MANIFEST"

Re: Publish AppImage to appimage.github.io/

Posted: Mon Mar 16, 2026 8:36 pm
by hiran
mcarans wrote: Mon Mar 16, 2026 8:05 pm
hiran wrote: Mon Mar 16, 2026 7:52 pm
Actually we could add this linter to our build process - just before the AppImage is getting created. Then we'd have first hand feedback.
Good idea. This would mirror the flatpak build which calls flatpak-builder-lint manifest "$MANIFEST"
Marvellous! :-)

If you are busy with your lot of changes in the pipeline, I could dig and find a spot to add the linter?

Re: Publish AppImage to appimage.github.io/

Posted: Mon Mar 16, 2026 8:43 pm
by mcarans
hiran wrote: Mon Mar 16, 2026 8:36 pm
mcarans wrote: Mon Mar 16, 2026 8:05 pm
hiran wrote: Mon Mar 16, 2026 7:52 pm
Actually we could add this linter to our build process - just before the AppImage is getting created. Then we'd have first hand feedback.
Good idea. This would mirror the flatpak build which calls flatpak-builder-lint manifest "$MANIFEST"
Marvellous! :-)

If you are busy with your lot of changes in the pipeline, I could dig and find a spot to add the linter?
hiran wrote: Mon Mar 16, 2026 7:51 pm
Inside the appimage we need to provide a file named

Code: Select all

/usr/share/metainfo/space.oolite.Oolite.appdata.xml
I see the problem. The appdir-lint.sh file https://raw.githubusercontent.com/AppIm ... ir-lint.sh has this:

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
I named the file .metainfo.xml which is the modern naming flatpak expects, but the appimage linter expects the old name .appdata.xml.

"While desktop-application metadata is commonly stored in /usr/share/metainfo/%{id}.metainfo.xml (with a .metainfo.xml extension), using a .appdata.xml extension is also permitted for this component type for legacy compatibility. " (https://www.freedesktop.org/software/ap ... ation.html)

I 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).

Re: Publish AppImage to appimage.github.io/

Posted: Mon Mar 16, 2026 8:49 pm
by hiran
mcarans wrote: Mon Mar 16, 2026 8:43 pm
hiran wrote: Mon Mar 16, 2026 7:51 pm
Inside the appimage we need to provide a file named

Code: Select all

/usr/share/metainfo/space.oolite.Oolite.appdata.xml
I see the problem. The appdir-lint.sh file https://raw.githubusercontent.com/AppIm ... ir-lint.sh has this:

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
I named the file .metainfo.xml which is the modern naming flatpak expects, but the appimage linter expects the old name .appdata.xml.
The file is not big. We could provide two files - or hard-link it. Or rename it just for the appimage.
But I will raise an issue in the linter's repo so these guys are aware.
mcarans wrote: Mon Mar 16, 2026 8:43 pm
I 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).
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.

Re: Publish AppImage to appimage.github.io/

Posted: Mon Mar 16, 2026 9:04 pm
by hiran
hiran wrote: Mon Mar 16, 2026 8:49 pm
mcarans wrote: Mon Mar 16, 2026 8:43 pm
I 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.
The file is not big. We could provide two files - or hard-link it. Or rename it just for the appimage.
But I will raise an issue in the linter's repo so these guys are aware.
Ok, too late. This issue was already spotted, logged and closed:
https://github.com/AppImageCommunity/pk ... issues/541

So do not hope the linter will change anytime soon.

Re: Publish AppImage to appimage.github.io/

Posted: Tue Mar 17, 2026 4:22 am
by mcarans
hiran wrote: Mon Mar 16, 2026 9:04 pm
...So do not hope the linter will change anytime soon.
New 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.

Re: Publish AppImage to appimage.github.io/

Posted: Tue Mar 17, 2026 9:40 pm
by hiran
mcarans wrote: Tue Mar 17, 2026 4:22 am
New 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.
I ran the pipeline again. It downloaded
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 "==========================================="
===========================================

Re: Publish AppImage to appimage.github.io/

Posted: Tue Mar 17, 2026 10:24 pm
by mcarans
hiran wrote: Tue Mar 17, 2026 9:40 pm
mcarans wrote: Tue Mar 17, 2026 4:22 am
New 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.
I ran the pipeline again. It downloaded
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 "==========================================="
===========================================
I looked at your logs: https://github.com/oocube/appimage.gith ... step:6:975

There is this:

Code: Select all

 screenshots:
-  - OoliteMc/screenshot.png
+- https://raw.githubusercontent.com/OoliteProject/oolite/1.92-maintenance/installers/FreeDesktop/oolite-999.png
I hope that what it means is that it replaced the snapshot it took with the oolite-999.png screenshot.

I will ask another_commander to merge.