#!/bin/bash # mypy增量扫描脚本 - CI中调用 # 环境变量: SCAN_MODE, CHANGED_PY_FILES set -e echo "=== Installing mypy ===" python3 -m pip install -q mypy mypy --version echo "" echo "=== Running mypy type check (hard gate mode) ===" echo "告警模式,阻断CI" echo "" MYPY_COMMON_ARGS="--ignore-missing-imports --no-site-packages --no-strict-optional --explicit-package-bases --exclude tests/|test_|migrations/|alembic/ --no-error-summary --incremental --cache-dir .mypy_cache" EXIT_CODE=0 if [ "$SCAN_MODE" = "incremental" ] && [ -n "$CHANGED_PY_FILES" ]; then echo "=== Incremental mypy scan (PR mode) ===" echo "Changed files: $(echo $CHANGED_PY_FILES | wc -w) files" MYPY_FILES="" for f in $CHANGED_PY_FILES; do case "$f" in apps/*|packages/*) MYPY_FILES="$MYPY_FILES $f" ;; esac done if [ -n "$MYPY_FILES" ]; then echo "Checking: $MYPY_FILES" mypy $MYPY_FILES $MYPY_COMMON_ARGS 2>&1 | head -80 || EXIT_CODE=$? else echo "No mypy-checkable files changed, skipping" fi else echo "=== Full mypy scan ===" mypy apps/api/app packages $MYPY_COMMON_ARGS 2>&1 | head -60 || EXIT_CODE=$? fi echo "" if [ "$EXIT_CODE" != "0" ]; then echo "mypy 发现类型问题(告警模式,阻断)" echo "建议后续逐步修复" else echo "mypy 类型检查通过" fi