spacedrive/scripts/appimage/build_appimage.sh
Vítor Vasconcellos 7aae22e83f
Fix Linux release (#2081)
* Fix Linux release
 - Pin appimage-builder to latest master
 - Add required cmp option to AppImageBuilder.yml
 - Disable intro video on Linux (it breaks onboarding for some reason)

* Auto format

* Fix typecheck
2024-02-13 18:26:19 +00:00

93 lines
3.1 KiB
Bash
Executable file

#!/usr/bin/env bash
# Creates an AppImage with the specified Rust package binary and its dependencies.
# AppImage is an universal Linux application distribution format, similar
# to macOS bundles, which packs an application and its dependencies to
# allow running it across a wide variety of distros with no system changes
# and little user hassle.
#
# Relevant documentation:
# https://docs.appimage.org/packaging-guide/index.html
# https://appimage-builder.readthedocs.io/en/latest/index.html
set -eEuo pipefail
if [ "${CI:-}" = "true" ]; then
set -x
fi
_root="$(CDPATH='' cd "$(dirname -- "$0")" && pwd -P)"
readonly _root
# The appimage-builder recipe to use to generate the AppImage.
readonly RECIPE="${_root}/AppImageBuilder.yml"
# The directory where the generated AppImage bundles will be stored.
readonly TARGET_APPIMAGE_DIR="${_root}/../../target/${TARGET:-.}/release/bundle/appimage"
export TARGET_APPIMAGE_DIR
alias wget='wget -nc -nv --show-progress -P "$APPIMAGE_WORKDIR"'
# Create a temporary working directory for this AppImage script
APPIMAGE_WORKDIR=$(mktemp -d -t spacedrive-appimagebuild.XXX)
readonly APPIMAGE_WORKDIR
trap '{ rm -rf "$APPIMAGE_WORKDIR" || true; } && { rm -rf appimage-build AppDir || true; }' EXIT INT TERM
# Install required system dependencies
echo 'Installind required system dependencies...'
apt-get update && apt-get install -yq \
git \
zsync \
dpkg-dev \
apt-utils \
libffi-dev \
squashfs-tools \
libglib2.0-bin \
gstreamer1.0-tools \
libgdk-pixbuf2.0-bin \
gtk-update-icon-cache
if [ "${CI:-}" = "true" ]; then
git config --global --add safe.directory '*'
fi
# gdk-pixbuf-query-loaders is not in PATH by default
ln -fs /usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders /usr/local/bin/gdk-pixbuf-query-loaders
export TARGET_APPIMAGE_ARCH="${TARGET_APPIMAGE_ARCH:-$(uname -m)}"
if ! command -v appimage-builder >/dev/null 2>&1; then
apt-get install -yq python3 python3-dev python3-venv
# Set up a virtual environment so that we do not pollute the global Python
# packages list with the packages we need to install
echo 'Setting up temporary Python virtual environment...'
python3 -m venv "$APPIMAGE_WORKDIR/.venv"
. "$APPIMAGE_WORKDIR/.venv/bin/activate"
export MAKEFLAGS="-j$(nproc)"
pip3 install wheel setuptools --upgrade
echo 'Install appimage-build in temporary Python virtual environment...'
pip3 install git+https://github.com/AppImageCrafters/appimage-builder.git@61c8ddde9ef44b85d7444bbe79d80b44a6a5576d
fi
echo 'Running appimage-builder...'
export TARGET_APPIMAGE_APT_ARCH="${TARGET_APPIMAGE_APT_ARCH:-$(dpkg-architecture -q DEB_HOST_ARCH)}"
export TARGET_APPDIR="${APPIMAGE_WORKDIR}/AppDir"
export REPO_DIR="$APPIMAGE_WORKDIR/pkgs"
XDG_DATA_DIRS="$(pwd)/AppDir/usr/share:/usr/share:/usr/local/share:/var/lib/flatpak/exports/share"
export XDG_DATA_DIRS
VERSION="$(CDPATH='' cd "${_root}/../.." && git describe --tags --dirty=-custom --always)"
export VERSION
mkdir -p "$TARGET_APPIMAGE_DIR"
appimage-builder --recipe "$RECIPE" --skip-test
echo "> Moving generated AppImage to $TARGET_APPIMAGE_DIR"
mv -f ./*.AppImage* "$TARGET_APPIMAGE_DIR"