Add AppImage packaging, app icon, and AppStream metainfo
This commit is contained in:
105
build-appimage.sh
Normal file
105
build-appimage.sh
Normal file
@@ -0,0 +1,105 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Build Pixstrip AppImage
|
||||
# Requires: cargo, linuxdeploy (with gtk plugin), appimagetool
|
||||
# Usage: ./build-appimage.sh [--release]
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
BUILD_TYPE="release"
|
||||
CARGO_FLAGS="--release"
|
||||
|
||||
if [[ "${1:-}" == "--debug" ]]; then
|
||||
BUILD_TYPE="debug"
|
||||
CARGO_FLAGS=""
|
||||
fi
|
||||
|
||||
APP_ID="live.lashman.Pixstrip"
|
||||
APP_DIR="$SCRIPT_DIR/AppDir"
|
||||
TOOLS_DIR="$SCRIPT_DIR/build-tools"
|
||||
|
||||
echo "=== Building Pixstrip AppImage ($BUILD_TYPE) ==="
|
||||
|
||||
# Step 1: Build binaries
|
||||
echo "--- Building binaries ---"
|
||||
cargo build $CARGO_FLAGS --workspace
|
||||
|
||||
# Step 2: Create AppDir structure
|
||||
echo "--- Creating AppDir ---"
|
||||
rm -rf "$APP_DIR"
|
||||
mkdir -p "$APP_DIR/usr/bin"
|
||||
mkdir -p "$APP_DIR/usr/share/applications"
|
||||
mkdir -p "$APP_DIR/usr/share/icons/hicolor/scalable/apps"
|
||||
mkdir -p "$APP_DIR/usr/share/metainfo"
|
||||
|
||||
# Step 3: Copy binaries
|
||||
cp "target/$BUILD_TYPE/pixstrip-gtk" "$APP_DIR/usr/bin/pixstrip-gtk"
|
||||
cp "target/$BUILD_TYPE/pixstrip-cli" "$APP_DIR/usr/bin/pixstrip"
|
||||
|
||||
# Step 4: Copy desktop file, icon, metainfo
|
||||
cp "data/$APP_ID.desktop" "$APP_DIR/usr/share/applications/"
|
||||
cp "data/icons/hicolor/scalable/apps/$APP_ID.svg" "$APP_DIR/usr/share/icons/hicolor/scalable/apps/"
|
||||
cp "data/$APP_ID.metainfo.xml" "$APP_DIR/usr/share/metainfo/"
|
||||
|
||||
# Symlinks required by AppImage spec
|
||||
ln -sf "usr/share/applications/$APP_ID.desktop" "$APP_DIR/$APP_ID.desktop"
|
||||
ln -sf "usr/share/icons/hicolor/scalable/apps/$APP_ID.svg" "$APP_DIR/$APP_ID.svg"
|
||||
|
||||
# Step 5: Create AppRun
|
||||
cat > "$APP_DIR/AppRun" << 'APPRUN'
|
||||
#!/bin/bash
|
||||
SELF="$(readlink -f "$0")"
|
||||
HERE="${SELF%/*}"
|
||||
export PATH="${HERE}/usr/bin:${PATH}"
|
||||
export LD_LIBRARY_PATH="${HERE}/usr/lib:${HERE}/usr/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH:-}"
|
||||
export XDG_DATA_DIRS="${HERE}/usr/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
|
||||
export GI_TYPELIB_PATH="${HERE}/usr/lib/x86_64-linux-gnu/girepository-1.0:${GI_TYPELIB_PATH:-}"
|
||||
exec "${HERE}/usr/bin/pixstrip-gtk" "$@"
|
||||
APPRUN
|
||||
chmod +x "$APP_DIR/AppRun"
|
||||
|
||||
# Step 6: Bundle shared libraries
|
||||
echo "--- Bundling libraries ---"
|
||||
mkdir -p "$TOOLS_DIR"
|
||||
|
||||
# Download linuxdeploy if not present
|
||||
if [[ ! -x "$TOOLS_DIR/linuxdeploy" ]]; then
|
||||
echo "Downloading linuxdeploy..."
|
||||
wget -q -O "$TOOLS_DIR/linuxdeploy" \
|
||||
"https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage"
|
||||
chmod +x "$TOOLS_DIR/linuxdeploy"
|
||||
fi
|
||||
|
||||
# Download linuxdeploy GTK plugin if not present
|
||||
if [[ ! -x "$TOOLS_DIR/linuxdeploy-plugin-gtk.sh" ]]; then
|
||||
echo "Downloading linuxdeploy GTK plugin..."
|
||||
wget -q -O "$TOOLS_DIR/linuxdeploy-plugin-gtk.sh" \
|
||||
"https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh"
|
||||
chmod +x "$TOOLS_DIR/linuxdeploy-plugin-gtk.sh"
|
||||
fi
|
||||
|
||||
# Use linuxdeploy to bundle dependencies
|
||||
export DEPLOY_GTK_VERSION=4
|
||||
"$TOOLS_DIR/linuxdeploy" \
|
||||
--appdir "$APP_DIR" \
|
||||
--desktop-file "$APP_DIR/usr/share/applications/$APP_ID.desktop" \
|
||||
--icon-file "$APP_DIR/usr/share/icons/hicolor/scalable/apps/$APP_ID.svg" \
|
||||
--plugin gtk
|
||||
|
||||
# Step 7: Build the AppImage
|
||||
echo "--- Creating AppImage ---"
|
||||
|
||||
# Download appimagetool if not present
|
||||
if [[ ! -x "$TOOLS_DIR/appimagetool" ]]; then
|
||||
echo "Downloading appimagetool..."
|
||||
wget -q -O "$TOOLS_DIR/appimagetool" \
|
||||
"https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
|
||||
chmod +x "$TOOLS_DIR/appimagetool"
|
||||
fi
|
||||
|
||||
VERSION="0.1.0"
|
||||
"$TOOLS_DIR/appimagetool" "$APP_DIR" "Pixstrip-${VERSION}-x86_64.AppImage"
|
||||
|
||||
echo ""
|
||||
echo "=== AppImage built: Pixstrip-${VERSION}-x86_64.AppImage ==="
|
||||
echo "Size: $(du -h "Pixstrip-${VERSION}-x86_64.AppImage" | cut -f1)"
|
||||
Reference in New Issue
Block a user