#!/bin/bash
# Build the testium AppImage inside a Debian container (Podman or Docker).
# The resulting .AppImage file is written to this directory.

set -e

REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
APP_VERSION="$(<"$REPO_ROOT/src/VERSION")"

if command -v podman &>/dev/null; then
    RUNTIME=podman
elif command -v docker &>/dev/null; then
    RUNTIME=docker
else
    echo "Error: neither podman nor docker found." >&2
    exit 1
fi
echo "Using $RUNTIME — building testium $APP_VERSION AppImage..."

# APPIMAGE_APPDIR_TMPFS (set by build_all --ram) bind-mounts a host tmpfs dir at
# the AppDir build path, keeping the ~1 GB AppDir churn off slow storage.
APPDIR_MOUNT=""
if [ -n "$APPIMAGE_APPDIR_TMPFS" ]; then
    mkdir -p "$APPIMAGE_APPDIR_TMPFS"
    APPDIR_MOUNT="-v $APPIMAGE_APPDIR_TMPFS:/work/package/appimage/AppDir"
fi

# APPIMAGE_EXTRACT_AND_RUN=1 lets appimagetool run without FUSE in the container.
$RUNTIME run --rm \
    --privileged \
    -e APPIMAGE_EXTRACT_AND_RUN=1 \
    -v "$REPO_ROOT:/work" \
    $APPDIR_MOUNT \
    -w /work/package/appimage \
    debian:bookworm bash -c "
        set -e
        export DEBIAN_FRONTEND=noninteractive

        apt-get update -qq
        apt-get install -y -qq \
            python3 python3-pip python3-venv python3-build \
            dpkg-dev fakeroot squashfs-tools wget curl file binutils \
            libglib2.0-0 patchelf zsync > /dev/null

        # Build the wheel
        cd /work/src
        python3 -m build --wheel --outdir dist/ > /dev/null
        cd /work/package/appimage

        # Install appimage-builder
        pip3 install appimage-builder --quiet --break-system-packages

        # Run the build
        export APP_VERSION=$APP_VERSION
        appimage-builder --recipe AppImageBuilder.yml --skip-test
    "

APPIMAGE_FILE=$(ls -1t Testium-*-x86_64.AppImage 2>/dev/null | head -1)
echo "Done: ${APPIMAGE_FILE}"

if [ "${1}" = "install" ] && [ -n "${APPIMAGE_FILE}" ]; then
    install -v "${APPIMAGE_FILE}" "${HOME}/.local/bin/testium"
fi
