#!/bin/bash # CI: сборка и тесты POSIX-платформы. # ESP-IDF-сборка проверяется отдельно (см. README): # . $IDF_PATH/export.sh && idf.py build (в тестовом проекте-компоненте) set -euo pipefail cd "$(dirname "$0")/.." BUILD_DIR="${BUILD_DIR:-build-ci}" cmake -S . -B "$BUILD_DIR" -G Ninja -DCMAKE_BUILD_TYPE=Release cmake --build "$BUILD_DIR" ctest --test-dir "$BUILD_DIR" --output-on-failure # Санитайзеры (gcc): ловим OOB/UB в ядре и тестах. SAN_DIR="${SAN_DIR:-build-san}" cmake -S . -B "$SAN_DIR" -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-fsanitize=address,undefined -fno-omit-frame-pointer" cmake --build "$SAN_DIR" ctest --test-dir "$SAN_DIR" --output-on-failure # clang (если доступен): отдельный компилятор = отдельные диагностики. if command -v clang++ >/dev/null 2>&1; then CLANG_DIR="${CLANG_DIR:-build-clang}" cmake -S . -B "$CLANG_DIR" -G Ninja -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_COMPILER=clang++ cmake --build "$CLANG_DIR" ctest --test-dir "$CLANG_DIR" --output-on-failure else echo "clang++ не найден — сборка пропущена" fi # Python-часть (pyfglair): нужен подготовленный venv (scripts/py-ci.sh --setup). if [ -x "${PY_VENV:-.venv}/bin/python" ]; then bash scripts/py-ci.sh else echo "pyfglair: ${PY_VENV:-.venv} не найден — пропуск (scripts/py-ci.sh --setup)" fi echo "CI OK"