Добавить единый CI-прогон и workflow
scripts/ci.sh собирает все решения, гоняет тесты всех сервисов, сканирует уязвимые NuGet-зависимости и собирает фронт; build.sh/test.sh расширены на все решения. Плюс .github/workflows/ci.yml. Закрывает BL-CI.
This commit is contained in:
+13
-2
@@ -1,4 +1,15 @@
|
||||
#!/usr/bin/env sh
|
||||
# build.sh — сборка всех решений Дейла (core + сервисы). CI-шаг «build».
|
||||
set -e
|
||||
cd "$(dirname "$0")/../src/core"
|
||||
dotnet build Deal.sln
|
||||
|
||||
REPO_DIR=$(cd "$(dirname "$0")/.." && pwd)
|
||||
|
||||
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 "== build: $SLN =="
|
||||
(cd "$REPO_DIR" && dotnet build "$SLN" -v q --nologo)
|
||||
done
|
||||
|
||||
@@ -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 ОК =="
|
||||
+10
-10
@@ -1,15 +1,18 @@
|
||||
#!/usr/bin/env sh
|
||||
# test.sh — общий прогон тестов и линтеров проекта Дейл (этап 12, пакет C):
|
||||
# 1) core: юнит-тесты Deal.Tests.Unit (dotnet test);
|
||||
# 2) frontend: линтер локализации (npm run lint:i18n) — если установлен npm; иначе шаг мягко
|
||||
# пропускается (установка фронт-зависимостей `npm ci` — отдельное действие, и прогон
|
||||
# тестов не должен падать из-за её отсутствия).
|
||||
# test.sh — тесты всех сервисов Дейла + линтер локализации фронта. CI-шаг «test».
|
||||
set -e
|
||||
|
||||
REPO_DIR=$(cd "$(dirname "$0")/.." && pwd)
|
||||
|
||||
echo "== core: dotnet test =="
|
||||
(cd "$REPO_DIR/src/core" && dotnet test tests/Deal.Tests.Unit)
|
||||
for PROJECT in \
|
||||
src/core/tests/Deal.Tests.Unit/Deal.Tests.Unit.csproj \
|
||||
src/telegram-service/Deal.Telegram.Tests/Deal.Telegram.Tests.csproj \
|
||||
src/ai-service/Deal.Ai.Tests/Deal.Ai.Tests.csproj \
|
||||
src/ml-service/Deal.Ml.Tests/Deal.Ml.Tests.csproj \
|
||||
src/storage-service/Deal.Storage.Tests/Deal.Storage.Tests.csproj; do
|
||||
echo "== test: $PROJECT =="
|
||||
(cd "$REPO_DIR" && dotnet test "$PROJECT" --nologo --logger "console;verbosity=minimal")
|
||||
done
|
||||
|
||||
echo
|
||||
echo "== frontend: lint:i18n =="
|
||||
@@ -18,6 +21,3 @@ if command -v npm >/dev/null 2>&1; then
|
||||
else
|
||||
echo " пропуск: npm не установлен (линтер локализации не запущен)"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "== TEST ОК =="
|
||||
|
||||
Reference in New Issue
Block a user