Files
H100PowerManger/ci/build-test.sh
T

89 lines
2.6 KiB
Bash
Executable File

#!/bin/bash
#=======================================================================
# FILE: ci/build-test.sh
# DESC: Build the project, run unit tests and a startup smoke test.
# Executed INSIDE the aarch64 build container (ci/Dockerfile).
#=======================================================================
set -euo pipefail
SRC_DIR="${SRC_DIR:-/src}"
cd "${SRC_DIR}"
#-----------------------------------------------------------------------
# 1. Build
#-----------------------------------------------------------------------
echo ">>> Building (aarch64, Release)..."
rm -rf build
mkdir -p build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j"$(nproc)"
BIN_DIR="${SRC_DIR}/bin"
echo ">>> Build artifacts:"
ls -la "${BIN_DIR}"
#-----------------------------------------------------------------------
# 2. Unit test (SQLiteTest)
#-----------------------------------------------------------------------
echo ">>> Running unit test: SQLiteTest"
"${BIN_DIR}/SQLiteTest"
echo ">>> SQLiteTest passed"
#-----------------------------------------------------------------------
# 3. Startup smoke test: MOOSDB + pPowerManger liveness
#-----------------------------------------------------------------------
echo ">>> Smoke test: launch MOOSDB + pPowerManger"
# Locate MOOSDB (installed by MOOS build)
MOOSDB="$(command -v MOOSDB || true)"
if [ -z "${MOOSDB}" ]; then
MOOSDB="$(ls /opt/moos-ivp/bin/MOOSDB 2>/dev/null || true)"
fi
if [ -z "${MOOSDB}" ] || [ ! -x "${MOOSDB}" ]; then
echo "ERROR: MOOSDB not found" >&2
exit 1
fi
echo "Using MOOSDB: ${MOOSDB}"
# Minimal mission file for MOOSDB + pPowerManger
MISSION_FILE="/tmp/smoke.moos"
cat > "${MISSION_FILE}" <<EOF
ServerHost = localhost
ServerPort = 9000
Community = h100smoke
ProcessConfig = pPowerManger
{
AppTick = 4
CommsTick = 4
log_level = INFO
log_file = /tmp/pPowerManger_smoke.log
}
EOF
cd "${BIN_DIR}"
"${MOOSDB}" --moos_suicide_disable --moos_no_colour "${MISSION_FILE}" > /tmp/moosdb_smoke.log 2>&1 &
MOOSDB_PID=$!
sleep 3
./pPowerManger "${MISSION_FILE}" > /tmp/pm_smoke.log 2>&1 &
PM_PID=$!
sleep 5
if kill -0 "${PM_PID}" 2>/dev/null; then
echo ">>> Smoke test PASSED (pPowerManger alive after 5s)"
kill "${PM_PID}" "${MOOSDB_PID}" 2>/dev/null || true
wait "${PM_PID}" "${MOOSDB_PID}" 2>/dev/null || true
exit 0
else
echo ">>> Smoke test FAILED (pPowerManger exited)" >&2
echo "--- pPowerManger log ---" >&2
cat /tmp/pm_smoke.log >&2 || true
echo "--- MOOSDB log ---" >&2
cat /tmp/moosdb_smoke.log >&2 || true
kill "${MOOSDB_PID}" 2>/dev/null || true
exit 1
fi