GNU/Linux AppImage

AppImage is a portable format for upstream software distribution for GNU/Linux systems, the only constraint is that a single AppImage must target a single hardware architecture, such as x86_64.

Refer to the upstream AppImage website for details: https://appimage.org/.

Cross-compiling

The appimage_x86_64 job makes an assumption that the host of this container itself is a x86_64 machine. Cross-compiling is possible with AppImage, albeit somewhat complicated.

The AppRun and runtime used must match the target architecture. The appimagetool itself can be used from the host’s native architecture. Refer to https://github.com/AppImage/AppImageKit/issues/789 for more information. Pre-built AppRun and runtime are provided by the project for the i686 and x86_64 architectures, but for all others you will need to build these two files yourself. This is typically done inside bootstrap.sh for the Docker image targeting a specific architecture.

The actual build script for an AppImage remains the same across architectures, since the compiler prefix can be a variable, special YAML features can be used to simplify the CICD YAML. See https://docs.gitlab.com/ee/ci/yaml/#special-yaml-features.