#!/usr/bin/env bash set -euo pipefail PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)" BUILD_DIR="${PROJECT_DIR}/build" echo "=== dstalk CI Build ===" echo "Project: ${PROJECT_DIR}" # --- Find conan: prefer tools/ local install, fallback to PATH --- CONAN="" for candidate in \ "${PROJECT_DIR}/tools/.venv/bin/conan" \ "${PROJECT_DIR}/tools/.venv/Scripts/conan" \ "${PROJECT_DIR}/tools/.venv/Scripts/conan.exe"; do if [ -x "${candidate}" ]; then CONAN="${candidate}" break fi done if [ -z "${CONAN}" ] && command -v conan &>/dev/null; then CONAN="conan" fi if [ -z "${CONAN}" ]; then echo "ERROR: conan not found in tools/ or PATH" >&2 exit 1 fi echo "Using conan: ${CONAN}" # --- Detect conan profile --- echo "--- Conan Profile Detect ---" "${CONAN}" profile detect --force # --- Install dependencies --- echo "--- Conan Install ---" mkdir -p "${BUILD_DIR}" cd "${BUILD_DIR}" "${CONAN}" install "${PROJECT_DIR}/deps/" --build=missing -s build_type=Release # --- Find conan toolchain --- TOOLCHAIN="" for candidate in \ "Release/generators/conan_toolchain.cmake" \ "build/Release/generators/conan_toolchain.cmake"; do if [ -f "${candidate}" ]; then TOOLCHAIN="$(pwd)/${candidate}" break fi done if [ -z "${TOOLCHAIN}" ]; then echo "ERROR: conan_toolchain.cmake not found" >&2 exit 1 fi echo "Toolchain: ${TOOLCHAIN}" # --- CMake configure --- echo "--- CMake Configure ---" cmake "${PROJECT_DIR}" -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_TOOLCHAIN_FILE="${TOOLCHAIN}" \ -DDSTALK_BUILD_TESTS=ON \ -DDSTALK_BUILD_GUI=OFF # --- Build --- echo "--- Build ---" cmake --build . --parallel # --- Test --- echo "--- Test ---" ctest --output-on-failure --parallel 4 echo "=== CI Build PASSED ==="