feat: add native fnOS package
This commit is contained in:
Executable
+75
@@ -0,0 +1,75 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
PACKAGE=${1:?usage: smoke-fnos-package.sh package.fpk [temporary-directory]}
|
||||
SMOKE_TMP_ROOT="${2:-${LIVERECORDER_SMOKE_TMPDIR:-${TMPDIR:-/tmp}}}"
|
||||
mkdir -p "$SMOKE_TMP_ROOT"
|
||||
SMOKE_TMP_ROOT=$(CDPATH= cd -- "$SMOKE_TMP_ROOT" && pwd)
|
||||
WORK_DIR=$(mktemp -d "${SMOKE_TMP_ROOT%/}/liverecorder-fnos-smoke.XXXXXX")
|
||||
PORT=${LIVERECORDER_SMOKE_PORT:-19180}
|
||||
|
||||
cleanup() {
|
||||
status=$?
|
||||
if [ -x "$WORK_DIR/cmd/main" ]; then
|
||||
TRIM_APPDEST="$WORK_DIR" \
|
||||
TRIM_PKGVAR="$WORK_DIR/var" \
|
||||
TRIM_APPDEST_VOL="$WORK_DIR/volume" \
|
||||
TRIM_SERVICE_PORT="$PORT" \
|
||||
"$WORK_DIR/cmd/main" stop >/dev/null 2>&1 || true
|
||||
fi
|
||||
if [ "$status" -ne 0 ]; then
|
||||
printf '%s\n' 'fnOS smoke test failed; application logs follow:' >&2
|
||||
for log_file in "$WORK_DIR/var/log/postgresql.log" "$WORK_DIR/var/log/liverecorder.log"; do
|
||||
if [ -f "$log_file" ]; then
|
||||
printf '%s\n' "--- $log_file ---" >&2
|
||||
tail -n 120 "$log_file" >&2 || true
|
||||
fi
|
||||
done
|
||||
fi
|
||||
rm -rf -- "$WORK_DIR"
|
||||
return "$status"
|
||||
}
|
||||
trap cleanup EXIT HUP INT TERM
|
||||
|
||||
tar -xzf "$PACKAGE" -C "$WORK_DIR"
|
||||
tar -xzf "$WORK_DIR/app.tgz" -C "$WORK_DIR"
|
||||
mkdir -p "$WORK_DIR/volume"
|
||||
|
||||
export TRIM_APPDEST="$WORK_DIR"
|
||||
export TRIM_PKGVAR="$WORK_DIR/var"
|
||||
export TRIM_APPDEST_VOL="$WORK_DIR/volume"
|
||||
export TRIM_SERVICE_PORT="$PORT"
|
||||
|
||||
SMOKE_PASSWORD='LiveRecorder-Smoke-2026!'
|
||||
wizard_admin_password="$SMOKE_PASSWORD" \
|
||||
wizard_admin_password_confirm="$SMOKE_PASSWORD" \
|
||||
"$WORK_DIR/cmd/install_callback"
|
||||
"$WORK_DIR/cmd/main" start
|
||||
"$WORK_DIR/cmd/main" status
|
||||
|
||||
BASE_URL="http://127.0.0.1:$PORT"
|
||||
curl -fsS "$BASE_URL/" >"$WORK_DIR/index.html"
|
||||
grep -q '<div id="app"></div>' "$WORK_DIR/index.html"
|
||||
curl -fsS "$BASE_URL/health/ready" | grep -q '"status":"ready"'
|
||||
|
||||
login_response=$(curl -fsS \
|
||||
-H 'Content-Type: application/json' \
|
||||
--data "{\"username\":\"admin\",\"password\":\"$SMOKE_PASSWORD\"}" \
|
||||
"$BASE_URL/api/auth/login")
|
||||
token=$(printf '%s' "$login_response" | sed -n 's/.*"token":"\([^"]*\)".*/\1/p')
|
||||
test -n "$token"
|
||||
|
||||
settings_response=$(curl -fsS -H "Authorization: Bearer $token" "$BASE_URL/api/settings")
|
||||
expected_record_root="$WORK_DIR/volume/@appshare/liverecorder/records"
|
||||
printf '%s' "$settings_response" | grep -Fq "\"outputRoot\":\"$expected_record_root\""
|
||||
|
||||
runtime_libs="$WORK_DIR/runtime/lib/x86_64-linux-gnu:$WORK_DIR/runtime/usr/lib/x86_64-linux-gnu:$WORK_DIR/runtime/usr/lib/x86_64-linux-gnu/pulseaudio:$WORK_DIR/runtime/usr/lib/x86_64-linux-gnu/blas:$WORK_DIR/runtime/usr/lib/x86_64-linux-gnu/lapack:$WORK_DIR/runtime/usr/lib/postgresql/15/lib"
|
||||
LD_LIBRARY_PATH="$runtime_libs" "$WORK_DIR/runtime/usr/bin/node" --version >/dev/null
|
||||
LD_LIBRARY_PATH="$runtime_libs" "$WORK_DIR/runtime/usr/bin/ffmpeg" -version >/dev/null 2>&1
|
||||
LD_LIBRARY_PATH="$runtime_libs" "$WORK_DIR/runtime/usr/bin/curl" -fsS "$BASE_URL/health/ready" >/dev/null
|
||||
|
||||
"$WORK_DIR/cmd/main" stop
|
||||
"$WORK_DIR/cmd/main" start
|
||||
curl -fsS "$BASE_URL/health/ready" | grep -q '"status":"ready"'
|
||||
|
||||
printf 'fnOS native smoke test passed: frontend, API, PostgreSQL, Node.js and FFmpeg are ready\n'
|
||||
Reference in New Issue
Block a user