#!/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" # Remove stale wheels from previous versions so a version-specific lookup # below cannot accidentally pick up an outdated build artifact. rm -f "${BUILD_DIR}"/scanslicer-*.whl uv build --wheel --out-dir "${BUILD_DIR}" # Select the wheel matching the project version from pyproject.toml. Listing # with `ls` and taking the first result breaks once an older wheel for a # previous version is left in the build dir, because `ls` sorts # alphabetically and would pick the stale artifact. PROJECT_VERSION="$(sed -n 's/^version *= *"\([^"]*\)".*/\1/p' "${ROOT_DIR}/pyproject.toml" | head -n 1)" if [[ -z "${PROJECT_VERSION}" ]]; then echo "Could not determine project version from pyproject.toml" >&2 exit 1 fi WHEEL_PATH="${BUILD_DIR}/scanslicer-${PROJECT_VERSION}-py3-none-any.whl" if [[ ! -f "${WHEEL_PATH}" ]]; then echo "Could not find built wheel for version ${PROJECT_VERSION} in ${BUILD_DIR}" >&2 echo "Found wheels:" >&2 ls -1 "${BUILD_DIR}"/scanslicer-*.whl >&2 || true 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}"