ScanSlicer/packaging/appimage/build-appimage.sh
dan 929c828438 build: harden dependency supply chain
- Drop unused Pillow dependency
- Switch opencv-python to opencv-python-headless (~=4.13.0)
- Verify package hashes in the AppImage build (uv export hashes,
  pip install --require-hashes, separate --no-deps wheel install)
- Sync dependency docs and third-party notices
2026-09-11 23:07:30 +02:00

50 lines
1.4 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
APPIMAGE_ROOT="${ROOT_DIR}/appimage"
BUILD_DIR="${APPIMAGE_ROOT}/build"
APPDIR="${BUILD_DIR}/AppDir"
DIST_DIR="${APPIMAGE_ROOT}/dist"
APPIMAGE_BUILDER_BIN="${APPIMAGE_BUILDER_BIN:-appimage-builder}"
for cmd in uv "${APPIMAGE_BUILDER_BIN}"; do
if ! command -v "${cmd}" >/dev/null 2>&1; then
echo "Missing required command: ${cmd}" >&2
echo "See docs/appimage.md for setup instructions." >&2
exit 1
fi
done
mkdir -p "${BUILD_DIR}" "${DIST_DIR}"
rm -rf "${APPDIR}"
mkdir -p "${APPDIR}"
cd "${ROOT_DIR}"
uv export \
--frozen \
--no-dev \
--no-emit-project \
--format requirements-txt \
--output-file "${BUILD_DIR}/requirements.txt"
uv build --wheel --out-dir "${BUILD_DIR}"
WHEEL_PATH="$(ls -1 "${BUILD_DIR}"/scanslicer-*.whl | head -n 1)"
if [[ -z "${WHEEL_PATH}" ]]; then
echo "Could not find built wheel in ${BUILD_DIR}" >&2
exit 1
fi
export SCANSLICER_ROOT="${ROOT_DIR}"
export SCANSLICER_APPDIR="${APPDIR}"
export SCANSLICER_REQUIREMENTS="${BUILD_DIR}/requirements.txt"
export SCANSLICER_WHEEL="${WHEEL_PATH}"
cd "${BUILD_DIR}"
"${APPIMAGE_BUILDER_BIN}" --recipe "${ROOT_DIR}/packaging/appimage/AppImageBuilder.yml"
mkdir -p "${DIST_DIR}"
find "${BUILD_DIR}" -maxdepth 1 -type f \( -name "*.AppImage" -o -name "*.zsync" \) -exec mv -f {} "${DIST_DIR}/" \;
echo "AppImage build complete. Output in ${DIST_DIR}"