Files
H100PowerManger/ci/build-test.sh
T
zjk 4976b71d04
build-test-deploy / build-test (push) Failing after 37s
build-test-deploy / deploy (push) Has been skipped
添加 Gitea Actions CI/CD:aarch64(QEMU) 构建+单元测试+冒烟测试+部署
2026-08-14 13:04:47 +08:00

89 lines
2.5 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}" "${MISSION_FILE}" > /tmp/moosdb_smoke.log 2>&1 &
MOOSDB_PID=$!
sleep 2
./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