Files
komp_ac/packaging/appimage/build.sh
2026-09-02 21:27:54 +02:00

74 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
if [[ $# -gt 1 ]]; then
echo "Usage: $0 [OUTPUT.AppImage]" >&2
exit 2
fi
script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
repo_root="$(cd -- "$script_dir/../.." && pwd)"
output="${1:-$repo_root/KompAC.AppImage}"
work_dir="$(mktemp -d /tmp/komp-ac-appimage-build.XXXXXX)"
cleanup() {
case "$work_dir" in
/tmp/komp-ac-appimage-build.*)
rm -rf -- "$work_dir"
;;
*)
echo "Refusing to remove unexpected temporary directory: $work_dir" >&2
;;
esac
}
trap cleanup EXIT INT TERM HUP
(
cd -- "$repo_root"
nix build '.?submodules=1#portable-server' --out-link "$work_dir/portable-server"
)
set +e
(
cd -- "$repo_root/client-gui2"
yarn tauri build --bundles appimage --features full-embed
)
tauri_status=$?
set -e
shopt -s nullglob
gui_appimages=("$repo_root"/client-gui2/src-tauri/target/release/bundle/appimage/*.AppImage)
gui_bundle=""
if [[ $tauri_status -eq 0 && ${#gui_appimages[@]} -gt 0 ]]; then
gui_bundle="${gui_appimages[0]}"
for candidate in "${gui_appimages[@]:1}"; do
if [[ "$candidate" -nt "$gui_bundle" ]]; then
gui_bundle="$candidate"
fi
done
fi
if [[ -z "$gui_bundle" ]]; then
gui_appdir="$repo_root/client-gui2/src-tauri/target/release/bundle/appimage/komp_ac.AppDir"
if [[ -d "$gui_appdir" ]] && \
cmp -s \
"$repo_root/client-gui2/src-tauri/target/release/client-gui2" \
"$gui_appdir/usr/bin/client-gui2"; then
gui_bundle="$gui_appdir"
echo "Tauri did not emit a current GUI AppImage; using its completed AppDir"
else
echo "The Tauri build did not produce a current GUI AppImage or AppDir" >&2
exit "${tauri_status:-1}"
fi
fi
if [[ $tauri_status -ne 0 ]]; then
echo "Continuing because the release GUI and its AppDir were completed before linuxdeploy failed"
fi
"$script_dir/assemble.sh" \
"$gui_bundle" \
"$work_dir/portable-server/bin/server" \
embedded \
"$output"