2026-03-04 11:08:29 +00:00
|
|
|
#!/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"
|
2026-09-12 15:11:07 +02:00
|
|
|
# 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
|
2026-03-04 11:08:29 +00:00
|
|
|
uv build --wheel --out-dir "${BUILD_DIR}"
|
|
|
|
|
|
2026-09-12 15:11:07 +02:00
|
|
|
# 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
|
2026-03-04 11:08:29 +00:00
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
export SCANSLICER_ROOT="${ROOT_DIR}"
|
|
|
|
|
export SCANSLICER_APPDIR="${APPDIR}"
|
|
|
|
|
export SCANSLICER_REQUIREMENTS="${BUILD_DIR}/requirements.txt"
|
2026-09-11 23:07:30 +02:00
|
|
|
export SCANSLICER_WHEEL="${WHEEL_PATH}"
|
2026-03-04 11:08:29 +00:00
|
|
|
|
|
|
|
|
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}"
|