EVOKORE// WORKFLOWS / py.test.yml
ComposioHQ/composioworkflow · 222 lines
workflows/py.test.yml
CI / automation
View on GitHub →# REFERENCE-ONLY: GitHub Actions secrets referenced below are illustrative.
# Do not inject real credentials. See your CI/CD provider for proper secret management.
name: Test Python SDK
on:
push:
branches: [master, next]
paths:
- "python/**/*.py"
- ".github/workflows/py.test.yml"
- "python/pyproject.toml"
- "python/requirements*.txt"
pull_request:
branches: [master, next]
paths:
- "python/**/*.py"
- ".github/workflows/py.test.yml"
- "python/pyproject.toml"
- "python/requirements*.txt"
jobs:
test:
name: Test Python SDK
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12"]
steps:
- name: Checkout Code
uses: actions/checkout@v6
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Cache pip dependencies
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: pip-${{ matrix.python-version }}-${{ hashFiles('python/pyproject.toml') }}
restore-keys: |
pip-${{ matrix.python-version }}-
- name: Install UV
run: pip install uv
- name: Install Dependencies
run: |
cd python/
uv venv --python ${{ matrix.python-version }}
source .venv/bin/activate
uv pip install -e .
uv pip install -e providers/langchain
uv pip install pytest pytest-mock
- name: Run Import Tests
run: |
cd python/
source .venv/bin/activate
python -c "from composio import Composio; print('✓ Basic import successful')"
- name: Run Unit Tests
run: |
cd python/
source .venv/bin/activate
python -m pytest tests/ -v --tb=short
- name: Test Package Installation
run: |
cd python/
# Test that the package can be installed and imported in a fresh environment
uv venv test-env --python ${{ matrix.python-version }}
source test-env/bin/activate
uv pip install -e .
python -c "
from composio import Composio, ToolkitVersionParam
from composio.types import Modifiers
from composio.core.types import ToolkitVersion
print('✓ All critical imports successful')
"
test-circular-imports:
name: Test Circular Import Prevention
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v6
- name: Setup Python with UV
uses: ./.github/actions/setup-python-uv
- name: Install Dependencies
run: |
cd python/
uv venv
source .venv/bin/activate
uv pip install -e .
- name: Test Circular Import Prevention
run: |
cd python/
source .venv/bin/activate
python -c "
# Test various import combinations that previously caused circular imports
import sys
# Test 1: Basic imports
from composio import Composio
print('✓ Basic Composio import')
# Test 2: Import toolkit version types
from composio import ToolkitVersionParam
from composio.core.types import ToolkitVersion
print('✓ Toolkit version types import')
# Test 3: Import from types module
from composio.types import Modifiers
print('✓ Types module import')
# Test 4: Import core models
from composio.core.models.tools import Tools
print('✓ Core models import')
# Test 5: Cross-module imports that caused the original circular import
from composio.core.models.tools import Modifiers as CoreModifiers
from composio.types import Modifiers as TypesModifiers
assert CoreModifiers is TypesModifiers
print('✓ Cross-module import consistency')
print('✓ All circular import prevention tests passed!')
"
lint-and-format:
name: Lint and Format Check
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v6
- name: Setup Python with UV
uses: ./.github/actions/setup-python-uv
- name: Install Dependencies
run: |
cd python/
uv venv
source .venv/bin/activate
uv pip install -e .
uv pip install ruff
- name: Run Ruff Linter
run: |
cd python/
source .venv/bin/activate
ruff check --config config/ruff.toml composio/ tests/
- name: Run Ruff Formatter Check
run: |
cd python/
source .venv/bin/activate
ruff format --check --config config/ruff.toml composio/ tests/
integration-tests:
name: Integration Tests
runs-on: ubuntu-22.04 # Use Ubuntu 22.04 for stability
permissions: read-all
env:
COMPOSIO_API_KEY: ${{ secrets.COMPOSIO_API_KEY }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Install UV
uses: astral-sh/setup-uv@v6
with:
version: '0.8.19'
- name: Cache UV dependencies
uses: actions/cache@v4
with:
path: ~/.cache/uv
key: uv-0.8.19-py3.12-${{ hashFiles('python/pyproject.toml') }}
restore-keys: |
uv-0.8.19-py3.12-
- name: Install Python Dependencies
working-directory: ./python
run: |
# Let UV manage Python version to satisfy workspace requirements
uv sync --group dev
- name: Verify API Key
run: |
if [ -z "$COMPOSIO_API_KEY" ]; then
echo "::error::COMPOSIO_API_KEY is not set"
exit 1
fi
echo "✅ COMPOSIO_API_KEY is configured"
- name: Run Integration Tests
working-directory: ./python
run: |
echo "🧪 Running Integration Tests..."
# Run with per-test timeout of 2 minutes and overall timeout
# pytest-timeout should be installed via pyproject.toml dev dependencies
uv run pytest composio/integration_test/ -v --tb=short --maxfail=3 --timeout=120 --timeout-method=thread
timeout-minutes: 10
- name: Upload Test Results
if: always()
uses: actions/upload-artifact@v6
with:
name: integration-test-results
path: |
python/composio/integration_test/
retention-days: 7