Добавить единый CI-прогон и workflow

scripts/ci.sh собирает все решения, гоняет тесты всех сервисов, сканирует уязвимые NuGet-зависимости и собирает фронт; build.sh/test.sh расширены на все решения. Плюс .github/workflows/ci.yml. Закрывает BL-CI.
This commit is contained in:
Rustam Khalimov
2026-09-11 17:46:03 +03:00
parent 1d7c9980ba
commit be457d7286
7 changed files with 110 additions and 20 deletions
+45
View File
@@ -0,0 +1,45 @@
#!/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 ОК =="