ci: API 分層檢查 + LLM 測試移至 Nightly
CI 強化: - 新增 API Layer Check (#96): services/repositories/models 分層規則 - LLM 測試移至 nightly-llm.yaml (CPU 推理 ~300s/測試) 分層規則: - services 禁止引用 api/routers - repositories 禁止引用 services - models 禁止引用業務層 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
36
.github/workflows/ci.yaml
vendored
36
.github/workflows/ci.yaml
vendored
@@ -96,6 +96,27 @@ jobs:
|
||||
fi
|
||||
echo "✅ ADR 檢查通過"
|
||||
|
||||
# Phase 14.2 #96: 後端分層檢查 (輕量版 import-linter)
|
||||
- name: API Layer Check
|
||||
run: |
|
||||
echo "🔍 檢查後端分層規則..."
|
||||
# 檢查 1: services 層禁止引用 api/routers 層 (反向依賴)
|
||||
if grep -rE "from src\.(api|routers)" apps/api/src/services/ 2>/dev/null; then
|
||||
echo "❌ 分層違規: services 禁止引用 api/routers 層"
|
||||
exit 1
|
||||
fi
|
||||
# 檢查 2: repositories 層禁止引用 services 層
|
||||
if grep -rE "from src\.services" apps/api/src/repositories/ 2>/dev/null; then
|
||||
echo "❌ 分層違規: repositories 禁止引用 services 層"
|
||||
exit 1
|
||||
fi
|
||||
# 檢查 3: models 層禁止引用業務層
|
||||
if grep -rE "from src\.(services|api|routers)" apps/api/src/models/ 2>/dev/null; then
|
||||
echo "❌ 分層違規: models 禁止引用業務層"
|
||||
exit 1
|
||||
fi
|
||||
echo "✅ 後端分層檢查通過"
|
||||
|
||||
# ==================== Test ====================
|
||||
test:
|
||||
name: Test
|
||||
@@ -282,14 +303,15 @@ jobs:
|
||||
uv sync
|
||||
uv run pytest tests/test_action_parsing.py -v --tb=short || echo "⚠️ 部分測試失敗"
|
||||
|
||||
- name: Prompt Validation Test
|
||||
working-directory: apps/api
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}/apps/api
|
||||
OLLAMA_URL: http://192.168.0.188:11434
|
||||
# 🔴 LLM 測試移至 Nightly (2026-03-26)
|
||||
# 原因: CPU 推理需 300+ 秒/測試,不適合每次 commit
|
||||
# 完整測試: .github/workflows/nightly-llm.yaml
|
||||
- name: LLM Test (Skip - See Nightly)
|
||||
run: |
|
||||
echo "📝 Prompt 品質驗證..."
|
||||
uv run pytest tests/test_prompt_validation.py::test_prompt_quality_report -v --tb=short || echo "⚠️ Prompt 驗證略過"
|
||||
echo "⏭️ LLM 測試已移至 Nightly workflow"
|
||||
echo " - test_model_regression.py"
|
||||
echo " - test_prompt_validation.py"
|
||||
echo " 原因: CPU 推理 ~300s/測試"
|
||||
|
||||
# ==================== OpenAPI Validation ====================
|
||||
openapi-validate:
|
||||
|
||||
@@ -1 +1,30 @@
|
||||
# Core module
|
||||
# ADR-027: Incident-Approval 同步架構 (2026-03-26)
|
||||
|
||||
from .constants import (
|
||||
APPROVAL_TO_INCIDENT_STATUS,
|
||||
APPROVAL_TTL_SECONDS,
|
||||
DECISION_TTL_SECONDS,
|
||||
INCIDENT_ACTIVE_STATUSES,
|
||||
INCIDENT_TTL_SECONDS,
|
||||
REDIS_KEY_APPROVAL,
|
||||
REDIS_KEY_DECISION,
|
||||
REDIS_KEY_INCIDENT,
|
||||
REDIS_KEY_PENDING,
|
||||
)
|
||||
from .unit_of_work import UnitOfWork
|
||||
|
||||
__all__ = [
|
||||
# Constants (ADR-027)
|
||||
"INCIDENT_TTL_SECONDS",
|
||||
"APPROVAL_TTL_SECONDS",
|
||||
"DECISION_TTL_SECONDS",
|
||||
"REDIS_KEY_INCIDENT",
|
||||
"REDIS_KEY_APPROVAL",
|
||||
"REDIS_KEY_PENDING",
|
||||
"REDIS_KEY_DECISION",
|
||||
"APPROVAL_TO_INCIDENT_STATUS",
|
||||
"INCIDENT_ACTIVE_STATUSES",
|
||||
# Unit of Work (ADR-027)
|
||||
"UnitOfWork",
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user