permissions: contents: read name: Database Adapter MyPy Check on: workflow_dispatch: push: branches: [ main, dev ] paths: - 'cognee/infrastructure/databases/**' - 'mypy.ini' - '.github/workflows/database_protocol_mypy_check.yml' pull_request: branches: [ main, dev ] paths: - 'cognee/infrastructure/databases/**' - 'mypy.ini' - '.github/workflows/database_protocol_mypy_check.yml' env: RUNTIME__LOG_LEVEL: ERROR ENV: 'dev' jobs: mypy-database-adapters: name: MyPy Database Adapter Type Check runs-on: ubuntu-22.04 steps: - name: Check out repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Cognee Setup uses: ./.github/actions/cognee_setup with: python-version: '3.11.x' - name: Discover and Check Vector Database Adapters run: | echo "🔍 Discovering Vector Database Adapters..." # Find all *Adapter.py files in vector database directories vector_adapters=$(find cognee/infrastructure/databases/vector -name "*Adapter.py" -type f | sort) if [ -z "$vector_adapters" ]; then echo "No vector database adapters found" else echo "Found vector database adapters:" echo "$vector_adapters" | sed 's/^/ • /' echo "" echo "Running MyPy on vector database adapters..." for adapter in $vector_adapters; do echo "Checking: $adapter" uv run mypy "$adapter" \ --config-file mypy.ini \ --show-error-codes \ --no-error-summary done fi - name: Discover and Check Graph Database Adapters run: | echo "🔍 Discovering Graph Database Adapters..." # Find all adapter.py and *adapter.py files in graph database directories, excluding utility files graph_adapters=$(find cognee/infrastructure/databases/graph -name "*adapter.py" -o -name "adapter.py" | grep -v "use_graph_adapter.py" | sort) if [ -z "$graph_adapters" ]; then echo "No graph database adapters found" else echo "Found graph database adapters:" echo "$graph_adapters" | sed 's/^/ • /' echo "" echo "Running MyPy on graph database adapters..." for adapter in $graph_adapters; do echo "Checking: $adapter" uv run mypy "$adapter" \ --config-file mypy.ini \ --show-error-codes \ --no-error-summary done fi - name: Discover and Check Hybrid Database Adapters run: | echo "🔍 Discovering Hybrid Database Adapters..." # Find all *Adapter.py files in hybrid database directories hybrid_adapters=$(find cognee/infrastructure/databases/hybrid -name "*Adapter.py" -type f | sort) if [ -z "$hybrid_adapters" ]; then echo "No hybrid database adapters found" else echo "Found hybrid database adapters:" echo "$hybrid_adapters" | sed 's/^/ • /' echo "" echo "Running MyPy on hybrid database adapters..." for adapter in $hybrid_adapters; do echo "Checking: $adapter" uv run mypy "$adapter" \ --config-file mypy.ini \ --show-error-codes \ --no-error-summary done fi - name: Protocol Compliance Summary run: | echo "✅ Database Adapter MyPy Check Passed!" echo "" echo "🔍 Auto-Discovery Approach:" echo " • Vector Adapters: cognee/infrastructure/databases/vector/**/*Adapter.py" echo " • Graph Adapters: cognee/infrastructure/databases/graph/**/*adapter.py" echo " • Hybrid Adapters: cognee/infrastructure/databases/hybrid/**/*Adapter.py" echo "" echo "🎯 Purpose: Enforce that database adapters are properly typed" echo "🔧 MyPy Configuration: mypy.ini (strict mode enabled)" echo "🚀 Maintenance-Free: Automatically discovers new adapters" echo "" echo "⚠️ This workflow FAILS on any type errors to ensure adapter quality." echo " All database adapters must be properly typed." echo "" echo "🛠️ To fix type issues locally, run:" echo " source .venv/bin/activate" echo " mypy --config-file mypy.ini"