initial version
This commit is contained in:
parent
ccb33718c1
commit
f1b66babb1
|
|
@ -0,0 +1,93 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Application settings
|
||||
APP_NAME="Sideband"
|
||||
PKG_NAME="sbapp"
|
||||
PY_VER="${PY_VER:-3.11}"
|
||||
ARCH="${ARCH:-$(uname -m)}"
|
||||
export ARCH
|
||||
|
||||
# Directory structure
|
||||
WORKDIR="${WORKDIR:-$PWD/_build_sideband_appimage}"
|
||||
APPDIR="$WORKDIR/AppDir"
|
||||
PY_DIR="$APPDIR/opt/python"
|
||||
VENV_DIR="$APPDIR/usr/venv"
|
||||
|
||||
# Tools and URLs
|
||||
UV_BIN="${UV_BIN:-uv}"
|
||||
APPIMAGETOOL_URL="${APPIMAGETOOL_URL:-https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-${ARCH}.AppImage}"
|
||||
ICON_URL="https://raw.githubusercontent.com/markqvist/Sideband/main/sbapp/assets/icon.iconset/icon_256x256.png"
|
||||
|
||||
# Cleanup and directory preparation
|
||||
rm -rf "$WORKDIR"
|
||||
mkdir -p "$APPDIR"
|
||||
cd "$WORKDIR"
|
||||
|
||||
echo "[1/7] Installing CPython ${PY_VER} into AppDir..."
|
||||
"$UV_BIN" python install "$PY_VER" --install-dir "$PY_DIR"
|
||||
|
||||
BASE_PYTHON_ABS="$(find "$PY_DIR" -type f -name "python${PY_VER}" | head -n1)"
|
||||
|
||||
echo "[2/7] Creating venv and installing ${PKG_NAME}..."
|
||||
"$UV_BIN" venv "$VENV_DIR" --python "$BASE_PYTHON_ABS"
|
||||
"$UV_BIN" pip install "$PKG_NAME" --python "$VENV_DIR/bin/python"
|
||||
|
||||
# Extract application version from the installed package
|
||||
APP_VERSION=$("$VENV_DIR/bin/python" -c "import importlib.metadata; print(importlib.metadata.version('$PKG_NAME'))")
|
||||
echo "Detected ${PKG_NAME} version: ${APP_VERSION}"
|
||||
|
||||
echo "[3/7] Making venv relative for AppImage..."
|
||||
pushd "$VENV_DIR/bin" > /dev/null
|
||||
RELATIVE_PY_PATH=$(realpath --relative-to="." "$BASE_PYTHON_ABS")
|
||||
ln -sf "$RELATIVE_PY_PATH" python
|
||||
ln -sf "$RELATIVE_PY_PATH" python3
|
||||
ln -sf "$RELATIVE_PY_PATH" "python${PY_VER}"
|
||||
popd > /dev/null
|
||||
|
||||
# pyvenv.cfg correction for path
|
||||
INTERNAL_PY_BIN_DIR="/opt/$(realpath --relative-to="$PY_DIR/.." "$(dirname "$BASE_PYTHON_ABS")")"
|
||||
sed -i "s|^home = .*|home = $INTERNAL_PY_BIN_DIR|" "$VENV_DIR/pyvenv.cfg"
|
||||
sed -i "s|^executable = .*|executable = /usr/venv/bin/python|" "$VENV_DIR/pyvenv.cfg"
|
||||
|
||||
echo "[4/7] Creating AppRun script..."
|
||||
cat > "$APPDIR/AppRun" <<EOF
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
HERE="\$(dirname "\$(readlink -f "\$0")")"
|
||||
export PYTHONNOUSERSITE=1
|
||||
|
||||
exec "\$HERE/usr/venv/bin/python" -c "import sbapp.main; sbapp.main.run()" "\$@"
|
||||
EOF
|
||||
chmod +x "$APPDIR/AppRun"
|
||||
|
||||
echo "[5/7] Setting up Desktop Entry and Icons..."
|
||||
mkdir -p "$APPDIR/usr/share/applications"
|
||||
mkdir -p "$APPDIR/usr/share/icons/hicolor/256x256/apps"
|
||||
|
||||
cat > "$APPDIR/usr/share/applications/sideband.desktop" <<EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=${APP_NAME}
|
||||
Exec=${APP_NAME}
|
||||
Icon=sideband
|
||||
Categories=Network;Chat;
|
||||
Terminal=false
|
||||
EOF
|
||||
|
||||
curl -L "$ICON_URL" -o "$APPDIR/usr/share/icons/hicolor/256x256/apps/sideband.png"
|
||||
ln -sf usr/share/applications/sideband.desktop "$APPDIR/${APP_NAME}.desktop"
|
||||
ln -sf usr/share/icons/hicolor/256x256/apps/sideband.png "$APPDIR/sideband.png"
|
||||
|
||||
echo "[6/7] Downloading appimagetool..."
|
||||
if [ ! -f "appimagetool.AppImage" ]; then
|
||||
curl -L "$APPIMAGETOOL_URL" -o appimagetool.AppImage
|
||||
chmod +x appimagetool.AppImage
|
||||
fi
|
||||
|
||||
echo "[7/7] Building AppImage..."
|
||||
export APPIMAGE_EXTRACT_AND_RUN=1
|
||||
OUTPUT_FILENAME="${APP_NAME}-${APP_VERSION}-py${PY_VER}-${ARCH}.AppImage"
|
||||
./appimagetool.AppImage "$APPDIR" "$OUTPUT_FILENAME"
|
||||
|
||||
echo "Success: $WORKDIR/$OUTPUT_FILENAME"
|
||||
Loading…
Reference in New Issue