#!/usr/bin/env sh # ci.sh — полный прогон Дейла (BL-CI): сборка всех решений, тесты, скан уязвимых # NuGet-зависимостей, сборка и линтер фронта. Для локального запуска и CI-пайплайна. # sh scripts/ci.sh # Секреты и внешние сервисы не требуются: тесты — юнит (InMemory/fakes), БД/сеть не нужны. set -e REPO_DIR=$(cd "$(dirname "$0")/.." && pwd) echo "== CI: сборка ==" sh "$REPO_DIR/scripts/build.sh" echo echo "== CI: тесты ==" sh "$REPO_DIR/scripts/test.sh" echo echo "== CI: скан уязвимых NuGet-зависимостей ==" for SLN in \ src/core/Deal.sln \ src/telegram-service/Deal.Telegram.sln \ src/ai-service/Deal.Ai.sln \ src/ml-service/Deal.Ml.sln \ src/storage-service/Deal.Storage.sln; do echo "-- $SLN" OUTPUT=$(cd "$REPO_DIR" && dotnet list "$SLN" package --vulnerable --include-transitive 2>&1 || true) if printf '%s' "$OUTPUT" | grep -qi "has the following vulnerable"; then printf '%s\n' "$OUTPUT" echo "ОШИБКА: уязвимые зависимости в $SLN" exit 1 fi done echo echo "== CI: сборка фронта ==" if command -v npm >/dev/null 2>&1; then (cd "$REPO_DIR/src/frontend" && { if [ -f package-lock.json ]; then npm ci; else npm install; fi } && npm run build) else echo " пропуск: npm не установлен (сборка фронта не запущена)" fi echo echo "== CI ОК =="