name: Python Tests on: push: branches: [main, develop] paths: - 'apps/**/*.py' - 'packages/py/**' - 'tests/**' - 'pyproject.toml' - 'poetry.lock' - '.gitea/workflows/python-tests.yml' pull_request: branches: [main, develop] workflow_dispatch: concurrency: group: python-tests-${{ github.ref }} cancel-in-progress: true jobs: test-python: runs-on: debian timeout-minutes: 15 env: WORKSPACE: /var/lib/aitbc-workspaces/python-tests steps: - name: Clone repository run: | rm -rf "${{ env.WORKSPACE }}" mkdir -p "${{ env.WORKSPACE }}" cd "${{ env.WORKSPACE }}" git clone --depth 1 http://gitea.bubuit.net:3000/oib/aitbc.git repo - name: Initialize job logging run: | cd "${{ env.WORKSPACE }}/repo" bash scripts/ci/setup-job-logging.sh - name: Setup Python environment run: | cd "${{ env.WORKSPACE }}/repo" # Remove any existing venv to avoid cache corruption issues rm -rf venv # Ensure standard directories exist mkdir -p /var/lib/aitbc/data /var/lib/aitbc/keystore /etc/aitbc /var/log/aitbc bash scripts/ci/setup-python-venv.sh \ --repo-dir "$PWD" \ --venv-dir "$PWD/venv" \ --skip-requirements \ --mode copy \ --extra-packages "pytest pytest-cov pytest-mock pytest-timeout pytest-asyncio locust pydantic-settings fastapi uvicorn aiohttp>=3.12.14 sqlmodel>=0.0.38 PyJWT" echo "✅ Python environment ready" - name: Run linting run: | cd "${{ env.WORKSPACE }}/repo" if venv/bin/python -m ruff --version >/dev/null 2>&1; then venv/bin/python -m ruff check apps/ packages/py/ --select E,F --ignore E501 -q || echo "⚠️ Ruff warnings" fi echo "✅ Linting completed" - name: Run repository tests with coverage run: | cd "${{ env.WORKSPACE }}/repo" # Install packages in development mode venv/bin/python -m pip install -e packages/py/aitbc-crypto/ venv/bin/python -m pip install -e packages/py/aitbc-sdk/ venv/bin/python -m pip install -e packages/py/aitbc-agent-sdk/ export PYTHONPATH="$PWD/apps/coordinator-api/src:$PWD/apps/blockchain-node/src:$PWD/apps/wallet/src:$PWD/packages/py/aitbc-crypto/src:$PWD/packages/py/aitbc-sdk/src:$PWD/packages/py/aitbc-agent-sdk/src:$PWD:$PYTHONPATH" venv/bin/python -m pytest tests/archived_phase_tests/ \ tests/cross_phase/ \ tests/verification/ \ -c /dev/null --rootdir "$PWD" --import-mode=importlib \ --tb=short -q --timeout=30 \ -o asyncio_mode=auto \ --cov=apps --cov=packages --cov=cli --cov-append \ --cov-report=term-missing --cov-report=html \ --cov-fail-under=50 - name: Run app and package tests with coverage run: | cd "${{ env.WORKSPACE }}/repo" export PYTHONPATH="$PWD/apps/coordinator-api:$PWD/apps/coordinator-api/src:$PWD/packages/py/aitbc-crypto/src:$PWD/packages/py/aitbc-sdk/src:$PWD:$PYTHONPATH" # Test if packages are importable venv/bin/python -c "import aitbc_crypto; print('✅ aitbc_crypto imported')" venv/bin/python -c "import aitbc_sdk; print('✅ aitbc_sdk imported')" venv/bin/python -c "import src.app; print('✅ coordinator-api src.app imported')" venv/bin/python -c "import app; print('✅ coordinator-api app imported')" venv/bin/python -m pytest \ apps/coordinator-api/tests/test_communication.py \ packages/py/aitbc-crypto/tests/ \ packages/py/aitbc-sdk/tests/ \ -c /dev/null --rootdir "$PWD" --import-mode=importlib \ --tb=short -q --timeout=30 \ --cov=apps --cov=packages --cov=cli --cov-append venv/bin/python -m coverage report --show-missing venv/bin/python -m coverage xml echo "✅ Python tests completed with coverage" - name: Cleanup if: always() run: rm -rf "${{ env.WORKSPACE }}"