#!/usr/bin/env bash # Build a self-contained Step Line AppImage (all game data included). # # Prereqs: exported Linux binary in build/ (embed_pck=true), curl. # Usage: bash packaging/linux/build_appimage.sh [version] # Output: build/step-line--x86_64.AppImage set -euo pipefail HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT="$(cd "$HERE/../.." && pwd)" VERSION="${1:-$(sed -n 's/.*config\/version="\([^"]*\)".*/\1/p' "$ROOT/project.godot")}" SRC_BIN="$ROOT/build/step-line-linux-${VERSION}.x86_64" if [[ ! -f "$SRC_BIN" ]]; then echo "error: missing $SRC_BIN — run ./tools/build_releases.sh first" >&2 exit 1 fi WORK="$(mktemp -d)" trap 'rm -rf "$WORK"' EXIT APPDIR="$WORK/StepLine.AppDir" mkdir -p "$APPDIR/usr/bin" cp "$SRC_BIN" "$APPDIR/usr/bin/step-line" # The export embeds the PCK (embed_pck=true), so no extra data files are needed. cp "$HERE/step-line.desktop" "$APPDIR/step-line.desktop" cp "$HERE/AppRun" "$APPDIR/AppRun" chmod +x "$APPDIR/AppRun" cp "$HERE/step-line.png" "$APPDIR/step-line.png" mkdir -p "$APPDIR/usr/share/metainfo" cp "$HERE/step-line.appdata.xml" "$APPDIR/usr/share/metainfo/step-line.appdata.xml" TOOL="${APPIMAGE_TOOL:-/tmp/appimagetool-x86_64.AppImage}" if [[ ! -f "$TOOL" ]]; then echo "==> Downloading appimagetool" curl -sL -o "$TOOL" \ https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage chmod +x "$TOOL" fi OUT="$ROOT/build/step-line-${VERSION}-x86_64.AppImage" echo "==> Building AppImage -> $OUT" # Extract-and-run avoids a FUSE dependency on the build host. APPIMAGE_EXTRACT_AND_RUN=1 "$TOOL" "$APPDIR" "$OUT" echo "AppImage ready: $(ls -la "$OUT" | awk '{print $5}') bytes"