567 lines
23 KiB
YAML
567 lines
23 KiB
YAML
#
|
|
# This workflow will run all python integrations tests.
|
|
#
|
|
|
|
name: Python Integration Tests
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
pull_request:
|
|
branches: ["main"]
|
|
merge_group:
|
|
branches: ["main"]
|
|
schedule:
|
|
- cron: "0 0 * * *" # Run at midnight UTC daily
|
|
|
|
permissions:
|
|
contents: read
|
|
id-token: "write"
|
|
|
|
env:
|
|
# Configure a constant location for the uv cache
|
|
UV_CACHE_DIR: /tmp/.uv-cache
|
|
Python_Integration_Tests: Python_Integration_Tests
|
|
INTEGRATION_TEST_SERVICE_SETUP_EXCEPTION: ${{ true }}
|
|
AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME: ${{ vars.AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME }} # azure-text-embedding-ada-002
|
|
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME: ${{ vars.AZURE_OPENAI_CHAT_DEPLOYMENT_NAME }}
|
|
AZURE_OPENAI_TEXT_DEPLOYMENT_NAME: ${{ vars.AZURE_OPENAI_TEXT_DEPLOYMENT_NAME }}
|
|
AZURE_OPENAI_AUDIO_TO_TEXT_DEPLOYMENT_NAME: ${{ vars.AZURE_OPENAI_AUDIO_TO_TEXT_DEPLOYMENT_NAME }}
|
|
AZURE_OPENAI_TEXT_TO_AUDIO_DEPLOYMENT_NAME: ${{ vars.AZURE_OPENAI_TEXT_TO_AUDIO_DEPLOYMENT_NAME }}
|
|
AZURE_OPENAI_TEXT_TO_IMAGE_DEPLOYMENT_NAME: ${{ vars.AZURE_OPENAI_TEXT_TO_IMAGE_DEPLOYMENT_NAME }}
|
|
AZURE_OPENAI_API_VERSION: ${{ vars.AZURE_OPENAI_API_VERSION }}
|
|
AZURE_OPENAI_ENDPOINT: ${{ secrets.AZURE_OPENAI_ENDPOINT }}
|
|
AZURE_OPENAI_AUDIO_TO_TEXT_ENDPOINT: ${{ secrets.AZURE_OPENAI_AUDIO_TO_TEXT_ENDPOINT }}
|
|
AZURE_OPENAI_TEXT_TO_AUDIO_ENDPOINT: ${{ secrets.AZURE_OPENAI_TEXT_TO_AUDIO_ENDPOINT }}
|
|
AZURE_AI_AGENT_ENDPOINT: ${{ secrets.AZURE_AI_AGENT_ENDPOINT }}
|
|
AZURE_AI_AGENT_MODEL_DEPLOYMENT_NAME: ${{ secrets.AZURE_AI_AGENT_MODEL_DEPLOYMENT_NAME }}
|
|
AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME: ${{ vars.AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME }}
|
|
BING_API_KEY: ${{ secrets.BING_API_KEY }}
|
|
OPENAI_RESPONSES_MODEL_ID: ${{ vars.OPENAI_RESPONSES_MODEL_ID }}
|
|
OPENAI_CHAT_MODEL_ID: ${{ vars.OPENAI_CHAT_MODEL_ID }}
|
|
OPENAI_TEXT_MODEL_ID: ${{ vars.OPENAI_TEXT_MODEL_ID }}
|
|
OPENAI_EMBEDDING_MODEL_ID: ${{ vars.OPENAI_EMBEDDING_MODEL_ID }}
|
|
OPENAI_AUDIO_TO_TEXT_MODEL_ID: ${{ vars.OPENAI_AUDIO_TO_TEXT_MODEL_ID }}
|
|
OPENAI_TEXT_TO_AUDIO_MODEL_ID: ${{ vars.OPENAI_TEXT_TO_AUDIO_MODEL_ID }}
|
|
OPENAI_TEXT_TO_IMAGE_MODEL_ID: ${{ vars.OPENAI_TEXT_TO_IMAGE_MODEL_ID }}
|
|
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
|
PINECONE_API_KEY: ${{ secrets.PINECONE__APIKEY }}
|
|
POSTGRES_CONNECTION_STRING: ${{secrets.POSTGRES__CONNECTIONSTR}}
|
|
POSTGRES_MAX_POOL: ${{ vars.POSTGRES_MAX_POOL }}
|
|
AZURE_AI_SEARCH_API_KEY: ${{secrets.AZURE_AI_SEARCH_API_KEY}}
|
|
AZURE_AI_SEARCH_ENDPOINT: ${{secrets.AZURE_AI_SEARCH_ENDPOINT}}
|
|
MONGODB_ATLAS_CONNECTION_STRING: ${{secrets.MONGODB_ATLAS_CONNECTION_STRING}}
|
|
AZURE_KEY_VAULT_ENDPOINT: ${{secrets.AZURE_KEY_VAULT_ENDPOINT}}
|
|
AZURE_KEY_VAULT_CLIENT_ID: ${{secrets.AZURE_KEY_VAULT_CLIENT_ID}}
|
|
AZURE_KEY_VAULT_CLIENT_SECRET: ${{secrets.AZURE_KEY_VAULT_CLIENT_SECRET}}
|
|
ACA_POOL_MANAGEMENT_ENDPOINT: ${{secrets.ACA_POOL_MANAGEMENT_ENDPOINT}}
|
|
MISTRALAI_API_KEY: ${{secrets.MISTRALAI_API_KEY}}
|
|
MISTRALAI_CHAT_MODEL_ID: ${{ vars.MISTRALAI_CHAT_MODEL_ID }}
|
|
MISTRALAI_EMBEDDING_MODEL_ID: ${{ vars.MISTRALAI_EMBEDDING_MODEL_ID }}
|
|
ANTHROPIC_API_KEY: ${{secrets.ANTHROPIC_API_KEY}}
|
|
ANTHROPIC_CHAT_MODEL_ID: ${{ vars.ANTHROPIC_CHAT_MODEL_ID }}
|
|
OLLAMA_CHAT_MODEL_ID: "${{ vars.OLLAMA_CHAT_MODEL_ID || '' }}" # llama3.2:1b
|
|
OLLAMA_CHAT_MODEL_ID_IMAGE: "${{ vars.OLLAMA_CHAT_MODEL_ID_IMAGE || '' }}" # moondream
|
|
OLLAMA_CHAT_MODEL_ID_TOOL_CALL: "${{ vars.OLLAMA_CHAT_MODEL_ID_TOOL_CALL || '' }}" # llama3.2:1b
|
|
OLLAMA_TEXT_MODEL_ID: "${{ vars.OLLAMA_TEXT_MODEL_ID || '' }}" # llama3.2:1b
|
|
OLLAMA_EMBEDDING_MODEL_ID: "${{ vars.OLLAMA_EMBEDDING_MODEL_ID || '' }}" # nomic-embed-text
|
|
GOOGLE_AI_GEMINI_MODEL_ID: ${{ vars.GOOGLE_AI_GEMINI_MODEL_ID }}
|
|
GOOGLE_AI_EMBEDDING_MODEL_ID: ${{ vars.GOOGLE_AI_EMBEDDING_MODEL_ID }}
|
|
GOOGLE_AI_API_KEY: ${{ secrets.GOOGLE_AI_API_KEY }}
|
|
GOOGLE_AI_CLOUD_PROJECT_ID: ${{ vars.GOOGLE_AI_CLOUD_PROJECT_ID }}
|
|
GOOGLE_AI_CLOUD_REGION: ${{ vars.GOOGLE_AI_CLOUD_REGION }}
|
|
VERTEX_AI_PROJECT_ID: ${{ vars.VERTEX_AI_PROJECT_ID }}
|
|
VERTEX_AI_GEMINI_MODEL_ID: ${{ vars.VERTEX_AI_GEMINI_MODEL_ID }}
|
|
VERTEX_AI_EMBEDDING_MODEL_ID: ${{ vars.VERTEX_AI_EMBEDDING_MODEL_ID }}
|
|
REDIS_CONNECTION_STRING: ${{ vars.REDIS_CONNECTION_STRING }}
|
|
AZURE_COSMOS_DB_NO_SQL_URL: ${{ vars.AZURE_COSMOS_DB_NO_SQL_URL }}
|
|
AZURE_COSMOS_DB_NO_SQL_KEY: ${{ secrets.AZURE_COSMOS_DB_NO_SQL_KEY }}
|
|
BEDROCK_AGENT_AGENT_RESOURCE_ROLE_ARN: ${{ secrets.BEDROCK_AGENT_AGENT_RESOURCE_ROLE_ARN }}
|
|
BEDROCK_AGENT_FOUNDATION_MODEL: ${{ vars.BEDROCK_AGENT_FOUNDATION_MODEL }}
|
|
|
|
jobs:
|
|
paths-filter:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
pythonChanges: ${{ steps.filter.outputs.python}}
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- uses: dorny/paths-filter@v2
|
|
id: filter
|
|
with:
|
|
filters: |
|
|
python:
|
|
- 'python/**'
|
|
# run only if 'python' files were changed
|
|
- name: python tests
|
|
if: steps.filter.outputs.python == 'true'
|
|
run: echo "Python file"
|
|
# run only if not 'python' files were changed
|
|
- name: not python tests
|
|
if: steps.filter.outputs.python != 'true'
|
|
run: echo "NOT python file"
|
|
|
|
python-merge-gate-ai-services:
|
|
name: Python Pre-Merge Integration Tests - AI Services (incl samples using those)
|
|
needs: paths-filter
|
|
if: github.event_name != 'pull_request' && github.event_name != 'schedule' && needs.paths-filter.outputs.pythonChanges == 'true'
|
|
strategy:
|
|
max-parallel: 1
|
|
fail-fast: false
|
|
matrix:
|
|
python-version: ["3.11"]
|
|
os: [ubuntu-latest]
|
|
defaults:
|
|
run:
|
|
working-directory: python
|
|
runs-on: ${{ matrix.os }}
|
|
environment: "integration"
|
|
env:
|
|
UV_PYTHON: ${{ matrix.python-version }}
|
|
COMPLETIONS_CONCEPT_SAMPLE: "true"
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Set up uv
|
|
uses: astral-sh/setup-uv@v6
|
|
with:
|
|
version: "0.5.x"
|
|
enable-cache: true
|
|
cache-suffix: ${{ runner.os }}-${{ matrix.python-version }}
|
|
cache-dependency-glob: "**/uv.lock"
|
|
- name: Install dependencies
|
|
run: |
|
|
uv sync --all-extras --dev
|
|
- name: Google auth
|
|
uses: google-github-actions/auth@v3
|
|
with:
|
|
project_id: ${{ vars.VERTEX_AI_PROJECT_ID }}
|
|
credentials_json: ${{ secrets.VERTEX_AI_SERVICE_ACCOUNT_KEY }}
|
|
- name: Set up gcloud
|
|
uses: google-github-actions/setup-gcloud@v3
|
|
- name: Configure AWS Credentials
|
|
uses: aws-actions/configure-aws-credentials@v5
|
|
with:
|
|
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
aws-region: ${{ vars.AWS_REGION }}
|
|
- name: Azure CLI Login
|
|
if: github.event_name != 'pull_request'
|
|
uses: azure/login@v2
|
|
with:
|
|
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
|
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
|
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
|
|
- name: Run Integration Tests
|
|
id: run_tests_ai_services
|
|
shell: bash
|
|
run: |
|
|
uv run pytest -v --log-cli-level=INFO --durations=20 -n logical --dist loadfile --dist worksteal -m "not ollama" ./tests/integration/completions ./tests/integration/embeddings ./tests/samples ./tests/integration/cross_language
|
|
|
|
python-merge-gate-multi-modality:
|
|
name: Python Pre-Merge Integration Tests - Multi-Modality
|
|
needs: paths-filter
|
|
if: github.event_name != 'pull_request' && github.event_name != 'schedule' && needs.paths-filter.outputs.pythonChanges == 'true'
|
|
strategy:
|
|
max-parallel: 1
|
|
fail-fast: false
|
|
matrix:
|
|
python-version: ["3.11"]
|
|
os: [ubuntu-latest]
|
|
defaults:
|
|
run:
|
|
working-directory: python
|
|
runs-on: ${{ matrix.os }}
|
|
environment: "integration"
|
|
env:
|
|
UV_PYTHON: ${{ matrix.python-version }}
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Set up uv
|
|
uses: astral-sh/setup-uv@v6
|
|
with:
|
|
version: "0.5.x"
|
|
enable-cache: true
|
|
cache-suffix: ${{ runner.os }}-${{ matrix.python-version }}
|
|
- name: Install dependencies
|
|
run: |
|
|
uv sync --all-extras --dev
|
|
- name: Azure CLI Login
|
|
if: github.event_name != 'pull_request'
|
|
uses: azure/login@v2
|
|
with:
|
|
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
|
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
|
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
|
|
- name: Run Integration Tests
|
|
id: run_tests_multi_modality
|
|
shell: bash
|
|
run: |
|
|
uv run pytest -v --log-cli-level=INFO --durations=20 -n logical --dist loadfile --dist worksteal ./tests/integration/audio_to_text ./tests/integration/text_to_audio ./tests/integration/text_to_image
|
|
|
|
python-merge-gate-agents:
|
|
name: Python Pre-Merge Integration Tests - Agents
|
|
needs: paths-filter
|
|
if: github.event_name != 'pull_request' && github.event_name != 'schedule' && needs.paths-filter.outputs.pythonChanges == 'true'
|
|
strategy:
|
|
max-parallel: 1
|
|
fail-fast: false
|
|
matrix:
|
|
python-version: ["3.11"]
|
|
os: [ubuntu-latest]
|
|
defaults:
|
|
run:
|
|
working-directory: python
|
|
runs-on: ${{ matrix.os }}
|
|
environment: "integration"
|
|
env:
|
|
UV_PYTHON: ${{ matrix.python-version }}
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Set up uv
|
|
uses: astral-sh/setup-uv@v6
|
|
with:
|
|
version: "0.5.x"
|
|
enable-cache: true
|
|
cache-suffix: ${{ runner.os }}-${{ matrix.python-version }}
|
|
- name: Install dependencies
|
|
run: |
|
|
uv sync --all-extras --dev
|
|
- name: Configure AWS Credentials
|
|
uses: aws-actions/configure-aws-credentials@v5
|
|
with:
|
|
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
aws-region: ${{ vars.AWS_REGION }}
|
|
- name: Azure CLI Login
|
|
if: github.event_name != 'pull_request'
|
|
uses: azure/login@v2
|
|
with:
|
|
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
|
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
|
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
|
|
- name: Run Integration Tests
|
|
id: run_tests_agents
|
|
shell: bash
|
|
run: |
|
|
uv run pytest -v --log-cli-level=INFO --durations=20 -n logical --dist loadfile --dist worksteal ./tests/integration/agents
|
|
|
|
python-merge-gate-ollama:
|
|
name: Python Pre-Merge Integration Tests - Ollama
|
|
needs: paths-filter
|
|
# Ollama tests are very unstable at the moment. It often fails to pull models from the Ollama server. Thus, this job is disabled for now.
|
|
if: false && github.event_name != 'pull_request' && github.event_name != 'schedule' && needs.paths-filter.outputs.pythonChanges == 'true'
|
|
strategy:
|
|
max-parallel: 1
|
|
fail-fast: false
|
|
matrix:
|
|
python-version: ["3.11"]
|
|
os: [ubuntu-latest]
|
|
defaults:
|
|
run:
|
|
working-directory: python
|
|
runs-on: ${{ matrix.os }}
|
|
environment: "integration"
|
|
env:
|
|
UV_PYTHON: ${{ matrix.python-version }}
|
|
COMPLETIONS_CONCEPT_SAMPLE: "true"
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Set up uv
|
|
uses: astral-sh/setup-uv@v6
|
|
with:
|
|
version: "0.5.x"
|
|
enable-cache: true
|
|
cache-suffix: ${{ runner.os }}-${{ matrix.python-version }}
|
|
cache-dependency-glob: "**/uv.lock"
|
|
- name: Install dependencies
|
|
run: |
|
|
uv sync --all-extras --dev
|
|
- name: Install Ollama
|
|
if: matrix.os == 'ubuntu-latest'
|
|
run: |
|
|
curl -fsSL https://ollama.com/install.sh | sh
|
|
ollama serve &
|
|
sleep 5
|
|
- name: Pull model in Ollama
|
|
if: matrix.os == 'ubuntu-latest'
|
|
run: |
|
|
ollama pull ${{ vars.OLLAMA_CHAT_MODEL_ID }}
|
|
ollama pull ${{ vars.OLLAMA_CHAT_MODEL_ID_IMAGE }}
|
|
ollama pull ${{ vars.OLLAMA_CHAT_MODEL_ID_TOOL_CALL }}
|
|
ollama pull ${{ vars.OLLAMA_TEXT_MODEL_ID }}
|
|
ollama pull ${{ vars.OLLAMA_EMBEDDING_MODEL_ID }}
|
|
ollama list
|
|
- name: Run Integration Tests
|
|
id: run_tests_ai_services
|
|
shell: bash
|
|
run: |
|
|
uv run pytest -v --log-cli-level=INFO --durations=0 -n logical --dist loadfile --dist worksteal -m ollama --timeout=300 ./tests/integration/completions ./tests/integration/embeddings
|
|
|
|
python-merge-gate-memory:
|
|
name: Python Pre-Merge Integration Tests - Memory (incl samples using those)
|
|
needs: paths-filter
|
|
if: github.event_name != 'pull_request' && github.event_name != 'schedule' && needs.paths-filter.outputs.pythonChanges == 'true'
|
|
strategy:
|
|
max-parallel: 1
|
|
fail-fast: false
|
|
matrix:
|
|
python-version: ["3.11"]
|
|
os: [ubuntu-latest]
|
|
defaults:
|
|
run:
|
|
working-directory: python
|
|
runs-on: ${{ matrix.os }}
|
|
environment: "integration"
|
|
env:
|
|
UV_PYTHON: ${{ matrix.python-version }}
|
|
MEMORY_CONCEPT_SAMPLE: "true"
|
|
# Service containers to run with for the memory connectors, this only works on Ubuntu
|
|
services:
|
|
# Label used to access the service container
|
|
redis:
|
|
# Docker Hub image
|
|
image: redis/redis-stack-server:latest
|
|
ports:
|
|
# Opens tcp port 6379 on the host and service container
|
|
- 6379:6379
|
|
weaviate:
|
|
image: cr.weaviate.io/semitechnologies/weaviate:1.33.3
|
|
ports:
|
|
- 8080:8080
|
|
- 50051:50051
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Set up uv
|
|
uses: astral-sh/setup-uv@v6
|
|
with:
|
|
version: "0.5.x"
|
|
enable-cache: true
|
|
cache-suffix: ${{ runner.os }}-${{ matrix.python-version }}
|
|
cache-dependency-glob: "**/uv.lock"
|
|
- name: Install dependencies
|
|
run: |
|
|
uv sync --all-extras --dev
|
|
- name: Azure CLI Login
|
|
if: github.event_name != 'pull_request'
|
|
uses: azure/login@v2
|
|
with:
|
|
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
|
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
|
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
|
|
- name: Run Integration Tests
|
|
id: run_tests_memory
|
|
timeout-minutes: 15
|
|
shell: bash
|
|
run: |
|
|
uv run pytest -v --log-cli-level=INFO --durations=20 -n logical --dist loadfile --dist worksteal ./tests/integration/memory ./tests/samples
|
|
|
|
python-integration-tests:
|
|
name: Python Integration Tests - Scheduled run
|
|
needs: paths-filter
|
|
if: (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') && needs.paths-filter.outputs.pythonChanges == 'true'
|
|
strategy:
|
|
max-parallel: 1
|
|
fail-fast: false
|
|
matrix:
|
|
python-version: ["3.10", "3.11", "3.12"]
|
|
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
defaults:
|
|
run:
|
|
working-directory: python
|
|
runs-on: ${{ matrix.os }}
|
|
env:
|
|
UV_PYTHON: ${{ matrix.python-version }}
|
|
MEMORY_CONCEPT_SAMPLE: "true"
|
|
COMPLETIONS_CONCEPT_SAMPLE: "true"
|
|
# Service containers to run with for the memory connectors, this only works on Ubuntu
|
|
services:
|
|
# Label used to access the service container
|
|
redis:
|
|
# Docker Hub image
|
|
image: redis/redis-stack-server:latest
|
|
ports:
|
|
# Opens tcp port 6379 on the host and service container
|
|
- 6379:6379
|
|
weaviate:
|
|
image: cr.weaviate.io/semitechnologies/weaviate:1.26.6
|
|
ports:
|
|
- 8080:8080
|
|
- 50051:50051
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Set up uv
|
|
uses: astral-sh/setup-uv@v6
|
|
with:
|
|
version: "0.5.x"
|
|
enable-cache: true
|
|
cache-suffix: ${{ runner.os }}-${{ matrix.python-version }}
|
|
cache-dependency-glob: "**/uv.lock"
|
|
- name: Install dependencies
|
|
run: |
|
|
uv sync --all-extras --dev
|
|
- name: Install Ollama
|
|
if: matrix.os == 'ubuntu-latest'
|
|
run: |
|
|
curl -fsSL https://ollama.com/install.sh | sh
|
|
ollama serve &
|
|
sleep 5
|
|
- name: Pull model in Ollama
|
|
# Ollama tests are very unstable at the moment. It often fails to pull models from the Ollama server. Thus, Ollama is disabled for now.
|
|
if: false && matrix.os == 'ubuntu-latest'
|
|
run: |
|
|
ollama pull ${{ vars.OLLAMA_CHAT_MODEL_ID }}
|
|
ollama pull ${{ vars.OLLAMA_CHAT_MODEL_ID_IMAGE }}
|
|
ollama pull ${{ vars.OLLAMA_CHAT_MODEL_ID_TOOL_CALL }}
|
|
ollama pull ${{ vars.OLLAMA_TEXT_MODEL_ID }}
|
|
ollama pull ${{ vars.OLLAMA_EMBEDDING_MODEL_ID }}
|
|
ollama list
|
|
- name: Google auth
|
|
uses: google-github-actions/auth@v3
|
|
with:
|
|
project_id: ${{ vars.VERTEX_AI_PROJECT_ID }}
|
|
credentials_json: ${{ secrets.VERTEX_AI_SERVICE_ACCOUNT_KEY }}
|
|
- name: Set up gcloud
|
|
uses: google-github-actions/setup-gcloud@v3
|
|
- name: Configure AWS Credentials
|
|
uses: aws-actions/configure-aws-credentials@v5
|
|
with:
|
|
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
aws-region: ${{ vars.AWS_REGION }}
|
|
- name: Start Azure Cosmos DB emulator
|
|
if: matrix.os == 'windows-latest'
|
|
run: |
|
|
Write-Host "Launching Cosmos DB Emulator"
|
|
Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator"
|
|
Start-CosmosDbEmulator
|
|
- name: Azure CLI Login
|
|
if: github.event_name != 'pull_request'
|
|
uses: azure/login@v2
|
|
with:
|
|
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
|
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
|
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
|
|
- name: Run Integration Tests - Completions
|
|
id: run_tests_completions
|
|
timeout-minutes: 10
|
|
shell: bash
|
|
# Ollama tests are very unstable at the moment. It often fails to pull models from the Ollama server. Thus, Ollama is disabled for now.
|
|
run: |
|
|
uv run pytest -v -n logical --dist loadfile --dist worksteal -m "not ollama" ./tests/integration/completions
|
|
- name: Run Integration Tests - Embeddings
|
|
id: run_tests_embeddings
|
|
timeout-minutes: 5
|
|
shell: bash
|
|
# Ollama tests are very unstable at the moment. It often fails to pull models from the Ollama server. Thus, Ollama is disabled for now.
|
|
run: |
|
|
uv run pytest -v -n logical --dist loadfile --dist worksteal -m "not ollama" ./tests/integration/embeddings
|
|
- name: Run Integration Tests - Memory
|
|
id: run_tests_memory
|
|
timeout-minutes: 5
|
|
shell: bash
|
|
run: |
|
|
uv run pytest -v -n logical --dist loadfile --dist worksteal ./tests/integration/memory
|
|
- name: Run Integration Tests - Cross Language
|
|
id: run_tests_cross_language
|
|
timeout-minutes: 5
|
|
shell: bash
|
|
run: |
|
|
uv run pytest -v -n logical --dist loadfile --dist worksteal ./tests/integration/cross_language
|
|
- name: Run Integration Tests - Planning
|
|
id: run_tests_planning
|
|
timeout-minutes: 5
|
|
shell: bash
|
|
run: |
|
|
uv run pytest -v -n logical --dist loadfile --dist worksteal ./tests/integration/planning
|
|
- name: Run Integration Tests - Samples
|
|
id: run_tests_samples
|
|
timeout-minutes: 5
|
|
shell: bash
|
|
run: |
|
|
uv run pytest -v -n logical --dist loadfile --dist worksteal ./tests/samples
|
|
- name: Run Integration Tests - Agents
|
|
id: run_tests_agents
|
|
timeout-minutes: 10
|
|
shell: bash
|
|
run: |
|
|
uv run pytest -v -n logical --dist loadfile --dist worksteal ./tests/integration/agents
|
|
- name: Run Integration Tests - Multi-Modality
|
|
id: run_tests_multi_modality
|
|
timeout-minutes: 5
|
|
shell: bash
|
|
run: |
|
|
uv run pytest -v -n logical --dist loadfile --dist worksteal ./tests/integration/audio_to_text ./tests/integration/text_to_audio ./tests/integration/text_to_image
|
|
|
|
# This final job is required to satisfy the merge queue. It must only run (or succeed) if no tests failed
|
|
python-integration-tests-check:
|
|
if: always()
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
max-parallel: 1
|
|
fail-fast: false
|
|
needs:
|
|
[
|
|
python-merge-gate-ai-services,
|
|
python-merge-gate-ollama,
|
|
python-merge-gate-memory,
|
|
python-merge-gate-agents,
|
|
python-merge-gate-multi-modality,
|
|
python-integration-tests,
|
|
]
|
|
steps:
|
|
- name: Get Date
|
|
shell: bash
|
|
run: |
|
|
echo "date=$(date +'%m/%d/%Y %H:%M:%S')" >> "$GITHUB_ENV"
|
|
|
|
- name: Run Type is Daily
|
|
if: ${{ github.event_name == 'schedule' }}
|
|
shell: bash
|
|
run: |
|
|
echo "run_type=Daily" >> "$GITHUB_ENV"
|
|
|
|
- name: Run Type is Manual
|
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
|
shell: bash
|
|
run: |
|
|
echo "run_type=Manual" >> "$GITHUB_ENV"
|
|
|
|
- name: Run Type is ${{ github.event_name }}
|
|
if: ${{ github.event_name != 'schedule' && github.event_name != 'workflow_dispatch'}}
|
|
shell: bash
|
|
run: |
|
|
echo "run_type=${{ github.event_name }}" >> "$GITHUB_ENV"
|
|
|
|
- name: Fail workflow if tests failed
|
|
id: check_tests_failed
|
|
if: contains(join(needs.*.result, ','), 'failure')
|
|
uses: actions/github-script@v6
|
|
with:
|
|
script: core.setFailed('Integration Tests Failed!')
|
|
|
|
- name: Fail workflow if tests cancelled
|
|
id: check_tests_cancelled
|
|
if: contains(join(needs.*.result, ','), 'cancelled')
|
|
uses: actions/github-script@v6
|
|
with:
|
|
script: core.setFailed('Integration Tests Cancelled!')
|
|
|
|
- name: Microsoft Teams Notification
|
|
uses: skitionek/notify-microsoft-teams@v1.0.9
|
|
if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request'
|
|
with:
|
|
webhook_url: ${{ secrets.MSTEAMS_WEBHOOK }}
|
|
dry_run: ${{ env.run_type != 'Daily' && env.run_type != 'Manual'}}
|
|
job: ${{ toJson(job) }}
|
|
steps: ${{ toJson(steps) }}
|
|
title: "{title: ` ${{ env.run_type }}: ${{ env.date }} `, text: ` ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}`}"
|
|
|
|
- name: Microsoft Teams Notification (Dry Run)
|
|
uses: skitionek/notify-microsoft-teams@v1.0.9
|
|
if: github.ref != 'refs/heads/main'
|
|
with:
|
|
webhook_url: NONE
|
|
dry_run: ${{ env.run_type != 'Daily' && env.run_type != 'Manual'}}
|
|
job: ${{ toJson(job) }}
|
|
steps: ${{ toJson(steps) }}
|
|
title: "{title: ` ${{ env.run_type }}: ${{ env.date }} `, text: ` ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}`}"
|