Skip to content

feat: add expert-panel ensemble with dynamic confidence weighting #1448

feat: add expert-panel ensemble with dynamic confidence weighting

feat: add expert-panel ensemble with dynamic confidence weighting #1448

Workflow file for this run

name: CI
on:
pull_request:
branches: [main]
concurrency:
group: ci-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
changes:
name: 🔎 Change Detection
runs-on: ubuntu-latest
outputs:
frontend: ${{ steps.filter.outputs.frontend }}
steps:
- name: 📥 Checkout
uses: actions/checkout@v5
- name: 🧭 Filter paths
id: filter
uses: dorny/paths-filter@v3
with:
filters: |
frontend:
- 'apps/dsa-web/**'
ai-governance:
name: ai-governance
runs-on: ubuntu-latest
steps:
- name: 📥 Checkout
uses: actions/checkout@v5
- name: 🐍 Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.11'
- name: 🤖 Check AI governance assets
run: python scripts/check_ai_assets.py
backend-gate:
name: backend-gate
runs-on: ubuntu-latest
needs: [ai-governance]
steps:
- name: 📥 Checkout
uses: actions/checkout@v5
- name: 🐍 Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.11'
cache: 'pip'
cache-dependency-path: |
requirements.txt
requirements-ci.txt
- name: 📦 Install dependencies
run: |
python -m pip install --upgrade pip
for attempt in 1 2 3; do
if python -m pip install -r requirements-ci.txt; then
break
fi
if [ "$attempt" -eq 3 ]; then
echo "Dependency install failed after ${attempt} attempts." >&2
exit 1
fi
echo "Dependency install attempt ${attempt} failed, retrying in 15s..." >&2
sleep 15
done
- name: ✅ Python syntax check
run: ./scripts/ci_gate.sh syntax
- name: ✅ Flake8 critical checks
run: ./scripts/ci_gate.sh flake8
- name: ✅ Local deterministic checks
run: ./scripts/ci_gate.sh deterministic
- name: ✅ Offline test suite
run: ./scripts/ci_gate.sh offline-tests
docker-build:
name: docker-build
runs-on: ubuntu-latest
needs: [backend-gate]
steps:
- name: 📥 Checkout
uses: actions/checkout@v5
- name: 🐳 Build image
run: |
docker build -t stock-analysis:test -f docker/Dockerfile .
docker run --rm stock-analysis:test python -c "print('✅ Docker OK')"
- name: 🔍 Docker smoke imports
run: |
docker run --rm stock-analysis:test python -c "
from src.config import get_config; print('✅ config')
from src.storage import DatabaseManager; print('✅ storage')
from src.notification import NotificationService; print('✅ notification')
from data_provider import DataFetcherManager; print('✅ data_provider')
from src.analyzer import GeminiAnalyzer; print('✅ analyzer')
from patch.eastmoney_patch import eastmoney_patch; print('✅ patch')
from bot.dispatcher import CommandDispatcher; print('✅ bot')
from api.app import app; print('✅ api')
print('✅ All Docker imports OK')
"
web-gate:
name: web-gate
runs-on: ubuntu-latest
needs: [changes, ai-governance]
if: needs.changes.outputs.frontend == 'true'
defaults:
run:
working-directory: apps/dsa-web
steps:
- name: 📥 Checkout
uses: actions/checkout@v5
- name: 🟢 Setup Node
uses: actions/setup-node@v6
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: apps/dsa-web/package-lock.json
- name: 📦 Install
run: npm ci
- name: 🔎 Lint
run: npm run lint
- name: 🏗️ Build
run: npm run build