Files
ports/misc/llama-cpp/files/fetch-ui.sh
T
Yuri Victorovich be1ff7c689 misc/llama-cpp: Fix WebUI fetch
PR:		295906
Reported by:	Eric Camachat <eric@camachat.org>
2026-06-07 23:28:13 -07:00

92 lines
2.5 KiB
Bash

#!/bin/sh
#
# MAINTAINER: yuri@FreeBSD.org
#
# This script is used during the fetch phase of the llama-cpp port.
# It downloads npm dependencies for the embedded WebUI using the port's
# committed package-lock.json and packages node_modules into a tarball.
# The actual build (npm run build) happens during the build phase.
#
# Args:
# $1 - DISTVERSION (e.g., 9426)
# $2 - DISTDIR/DIST_SUBDIR path where distfiles are stored
# $3 - GH tarball filename (e.g., ggerganov-llama.cpp-b9426_GH0.tar.gz)
# $4 - FILESDIR path (e.g., /usr/ports/misc/llama-cpp/files)
set -eu -o pipefail
DISTVERSION="$1"
DIST_SUBDIR_PATH="$2"
GH_TARBALL_NAME="$3"
FILESDIR="$4"
LOCALBASE="${LOCALBASE:-/usr/local}"
if [ -z "${TMPDIR:-}" ]; then
TMPDIR="/tmp"
fi
BUILD_DIR="${TMPDIR}/llama-ui-npm-$$"
GH_TARBALL="${DIST_SUBDIR_PATH}/${GH_TARBALL_NAME}"
OUTPUT="${DIST_SUBDIR_PATH}/llama-ui-npm-${DISTVERSION}.tar.gz"
PORT_PACKAGE_LOCK="${FILESDIR}/package-lock.json"
if [ -f "${OUTPUT}" ]; then
echo "INFO: ${OUTPUT} already exists, skipping"
exit 0
fi
if [ ! -f "${GH_TARBALL}" ]; then
echo "ERROR: GH tarball ${GH_TARBALL} not found"
exit 1
fi
if [ ! -f "${PORT_PACKAGE_LOCK}" ]; then
echo "ERROR: package-lock.json not found at ${PORT_PACKAGE_LOCK}"
echo " please ensure the file exists in the port's files/ directory"
exit 1
fi
if [ ! -f "${LOCALBASE}/share/certs/ca-root-nss.crt" ]; then
echo "ERROR: CA certificate file ${LOCALBASE}/share/certs/ca-root-nss.crt is missing"
echo " please install the 'ca_root_nss' package"
exit 1
fi
echo "INFO: Downloading npm dependencies for llama-ui"
rm -rf "${BUILD_DIR}"
mkdir -p "${BUILD_DIR}"
# Extract the main source tarball
tar xzf "${GH_TARBALL}" -C "${BUILD_DIR}"
SRC_DIR="${BUILD_DIR}/llama.cpp-b${DISTVERSION}"
if [ ! -d "${SRC_DIR}/tools/ui" ]; then
echo "ERROR: tools/ui directory not found in extracted source"
exit 1
fi
# Install npm dependencies using the port's committed package-lock.json
cd "${SRC_DIR}/tools/ui"
echo "INFO: using package-lock.json from ${PORT_PACKAGE_LOCK}"
cp "${PORT_PACKAGE_LOCK}" package-lock.json
HOME="${TMPDIR}" \
NODE_EXTRA_CA_CERTS="${LOCALBASE}/share/certs/ca-root-nss.crt" \
npm ci --ignore-scripts
echo "INFO: npm ci succeeded"
# Package node_modules into a reproducible tarball
cd "${SRC_DIR}/tools/ui"
find node_modules -exec touch -h -d 1970-01-01T00:00:00Z {} +
find node_modules -print0 | LC_ALL=C sort -z | \
tar czf "${OUTPUT}" --format=bsdtar --gid 0 --uid 0 --options gzip:!timestamp --no-recursion --null -T -
# Cleanup
rm -rf "${BUILD_DIR}"
echo "INFO: created ${OUTPUT}"