# # Dedicated Python integration tests workflow, called from the manual integration test orchestrator. # Runs all tests (unit + integration). # name: python-integration-tests on: workflow_call: inputs: checkout-ref: description: "Git ref to checkout (e.g., refs/pull/123/head)" required: true type: string permissions: contents: read id-token: write env: UV_CACHE_DIR: /tmp/.uv-cache RUN_INTEGRATION_TESTS: "true" jobs: python-tests-core: name: Python Integration Tests - Core runs-on: ubuntu-latest environment: integration timeout-minutes: 60 env: UV_PYTHON: "3.10" OPENAI_CHAT_MODEL_ID: ${{ vars.OPENAI__CHATMODELID }} OPENAI_RESPONSES_MODEL_ID: ${{ vars.OPENAI__RESPONSESMODELID }} OPENAI_API_KEY: ${{ secrets.OPENAI__APIKEY }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} ANTHROPIC_CHAT_MODEL_ID: ${{ vars.ANTHROPIC_CHAT_MODEL_ID }} AZURE_OPENAI_CHAT_DEPLOYMENT_NAME: ${{ vars.AZUREOPENAI__CHATDEPLOYMENTNAME }} AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME: ${{ vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }} AZURE_OPENAI_ENDPOINT: ${{ vars.AZUREOPENAI__ENDPOINT }} LOCAL_MCP_URL: ${{ vars.LOCAL_MCP__URL }} FUNCTIONS_WORKER_RUNTIME: "python" DURABLE_TASK_SCHEDULER_CONNECTION_STRING: "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None" AzureWebJobsStorage: "UseDevelopmentStorage=true" defaults: run: working-directory: python steps: - uses: actions/checkout@v6 with: ref: ${{ inputs.checkout-ref }} persist-credentials: false - name: Set up python and install the project id: python-setup uses: ./.github/actions/python-setup with: python-version: "3.10" os: ${{ runner.os }} env: UV_CACHE_DIR: /tmp/.uv-cache - name: Azure CLI Login uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Set up Azure Functions Integration Test Emulators uses: ./.github/actions/azure-functions-integration-setup id: azure-functions-setup - name: Test with pytest run: uv run poe all-tests -n logical --dist loadfile --dist worksteal --timeout=120 --session-timeout=900 --timeout_method thread --retries 2 --retry-delay 5 python-tests-azure-ai: name: Python Integration Tests - Azure AI runs-on: ubuntu-latest environment: integration timeout-minutes: 60 env: UV_PYTHON: "3.10" AZURE_AI_PROJECT_ENDPOINT: ${{ secrets.AZUREAI__ENDPOINT }} AZURE_AI_MODEL_DEPLOYMENT_NAME: ${{ vars.AZUREAI__DEPLOYMENTNAME }} LOCAL_MCP_URL: ${{ vars.LOCAL_MCP__URL }} defaults: run: working-directory: python steps: - uses: actions/checkout@v6 with: ref: ${{ inputs.checkout-ref }} persist-credentials: false - name: Set up python and install the project id: python-setup uses: ./.github/actions/python-setup with: python-version: "3.10" os: ${{ runner.os }} env: UV_CACHE_DIR: /tmp/.uv-cache - name: Azure CLI Login uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Test with pytest timeout-minutes: 15 run: uv run --directory packages/azure-ai poe integration-tests -n logical --dist loadfile --dist worksteal --timeout=120 --session-timeout=900 --timeout_method thread --retries 2 --retry-delay 5 python-integration-tests-check: if: always() runs-on: ubuntu-latest needs: [ python-tests-core, python-tests-azure-ai ] steps: - name: Fail workflow if tests failed if: contains(join(needs.*.result, ','), 'failure') uses: actions/github-script@v8 with: script: core.setFailed('Integration Tests Failed!') - name: Fail workflow if tests cancelled if: contains(join(needs.*.result, ','), 'cancelled') uses: actions/github-script@v8 with: script: core.setFailed('Integration Tests Cancelled!')