#!/bin/bash set -euo pipefail PACKAGE=${1:?usage: smoke-fnos-package.sh package.fpk [temporary-directory]} SMOKE_TMP_ROOT="${2:-${DYSYNC_SMOKE_TMPDIR:-${DYSYNC_TMPDIR:-${TMPDIR:-/tmp}}}}" mkdir -p "${SMOKE_TMP_ROOT}" SMOKE_TMP_ROOT=$(cd "${SMOKE_TMP_ROOT}" && pwd) WORK_DIR=$(mktemp -d "${SMOKE_TMP_ROOT%/}/dysync-fnos-smoke.XXXXXX") trap 'if [ -x "${WORK_DIR}/cmd/main" ]; then "${WORK_DIR}/cmd/main" stop 2>/dev/null || true; fi; rm -rf -- "${WORK_DIR}"' EXIT tar -xzf "${PACKAGE}" -C "${WORK_DIR}" tar -xzf "${WORK_DIR}/app.tgz" -C "${WORK_DIR}" export TRIM_APPDEST="${WORK_DIR}" export TRIM_APPDEST_VOL="${WORK_DIR}/volume" export TRIM_PKGVAR="${WORK_DIR}/var" export DYSYNC_LISTEN_URL=http://127.0.0.1:19101 # Package users on fnOS commonly have no login home. The smoke test intentionally # reproduces that environment so a bundle-extraction regression cannot pass locally. unset HOME XDG_CACHE_HOME if ! "${WORK_DIR}/cmd/main" start; then test ! -f "${TRIM_PKGVAR}/info.log" || cat "${TRIM_PKGVAR}/info.log" exit 1 fi APP_PID=$(cat "${TRIM_PKGVAR}/app.pid") for attempt in $(seq 1 30); do if curl -fsS "http://127.0.0.1:19101/" >/dev/null; then printf 'fnOS packaged application started successfully\n' exit 0 fi if ! kill -0 "${APP_PID}" 2>/dev/null; then cat "${TRIM_PKGVAR}/info.log"; exit 1; fi sleep 0.5 done cat "${TRIM_PKGVAR}/info.log" exit 1