Repository navigation
chore(release): bump version to 0.59.0 #38
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Integration Tests | |
| on: | |
| workflow_dispatch: | |
| pull_request: | |
| paths: | |
| - '.github/workflows/integration-tests.yml' | |
| - 'src/**/*.py' | |
| - 'tests/**/*.py' | |
| - 'pyproject.toml' | |
| - 'uv.lock' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/integration-tests.yml' | |
| - 'src/**/*.py' | |
| - 'tests/**/*.py' | |
| - 'pyproject.toml' | |
| - 'uv.lock' | |
| jobs: | |
| # ── Determine which integration test directories to run ────────────────────── | |
| detect-scope: | |
| name: Detect test scope | |
| runs-on: ubuntu-latest | |
| outputs: | |
| run_all: ${{ steps.scope.outputs.run_all }} | |
| test_paths: ${{ steps.scope.outputs.test_paths }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Compute scope | |
| id: scope | |
| env: | |
| EVENT: ${{ github.event_name }} | |
| run: | | |
| # On push to main or workflow_dispatch → always run everything | |
| if [[ "$EVENT" == "push" || "$EVENT" == "workflow_dispatch" ]]; then | |
| echo "run_all=true" >> "$GITHUB_OUTPUT" | |
| echo "test_paths=tests/*/integration/" >> "$GITHUB_OUTPUT" | |
| echo "Scope: full run (push/workflow_dispatch)" | |
| exit 0 | |
| fi | |
| # On pull_request → diff against the base branch | |
| BASE_SHA="${{ github.event.pull_request.base.sha }}" | |
| HEAD_SHA="${{ github.event.pull_request.head.sha }}" | |
| CHANGED=$(git diff --name-only "$BASE_SHA" "$HEAD_SHA") | |
| echo "Changed files:" | |
| echo "$CHANGED" | |
| # Global triggers: any of these → run everything | |
| # core/ is foundational — changes there can affect any module | |
| GLOBAL_PATTERNS=( | |
| "pyproject.toml" | |
| "uv.lock" | |
| "src/sap_cloud_sdk/core/" | |
| "tests/core/" | |
| ) | |
| for pattern in "${GLOBAL_PATTERNS[@]}"; do | |
| if echo "$CHANGED" | grep -q "^${pattern}"; then | |
| echo "run_all=true" >> "$GITHUB_OUTPUT" | |
| echo "test_paths=tests/*/integration/" >> "$GITHUB_OUTPUT" | |
| echo "Scope: full run (global file changed: $pattern)" | |
| exit 0 | |
| fi | |
| done | |
| # Modules that have integration test directories | |
| MODULES_WITH_INTEGRATION=( | |
| adms | |
| agent_memory | |
| agentgateway | |
| aicore | |
| destination | |
| dms | |
| dpi_ng | |
| objectstore | |
| outputmanagement | |
| ) | |
| PATHS=() | |
| for module in "${MODULES_WITH_INTEGRATION[@]}"; do | |
| if echo "$CHANGED" | grep -qE "^(src/sap_cloud_sdk|tests)/${module}/"; then | |
| PATHS+=("tests/${module}/integration/") | |
| echo "Module affected: $module" | |
| fi | |
| done | |
| if [[ ${#PATHS[@]} -eq 0 ]]; then | |
| echo "run_all=false" >> "$GITHUB_OUTPUT" | |
| echo "test_paths=" >> "$GITHUB_OUTPUT" | |
| echo "Scope: no integration tests affected — skipping" | |
| else | |
| echo "run_all=false" >> "$GITHUB_OUTPUT" | |
| echo "test_paths=${PATHS[*]}" >> "$GITHUB_OUTPUT" | |
| echo "Scope: ${PATHS[*]}" | |
| fi | |
| # ── Run the integration tests ───────────────────────────────────────────────── | |
| integration-tests: | |
| name: Integration Tests | |
| needs: detect-scope | |
| # Skip for fork PRs (no secrets), and skip when no integration tests are affected | |
| if: > | |
| (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && | |
| needs.detect-scope.outputs.test_paths != '' | |
| runs-on: ${{ contains(github.server_url, 'github.com') && 'ubuntu-latest' || fromJSON('["self-hosted"]') }} | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.11' | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v3 | |
| - name: Install dependencies | |
| run: uv sync --dev | |
| - name: Set up integration test environment | |
| env: | |
| AICORE_CLIENT_ID: ${{ secrets.AICORE_CLIENT_ID }} | |
| AICORE_CLIENT_SECRET: ${{ secrets.AICORE_CLIENT_SECRET }} | |
| AICORE_FILTER_TEST_SELF_HARM_PROMPT: ${{ secrets.AICORE_FILTER_TEST_SELF_HARM_PROMPT }} | |
| CLOUD_SDK_CFG_AGW_DEFAULT_LANDSCAPE: ${{ secrets.CLOUD_SDK_CFG_AGW_DEFAULT_LANDSCAPE }} | |
| CLOUD_SDK_CFG_AGW_DEFAULT_TENANT_SUBDOMAIN: ${{ secrets.CLOUD_SDK_CFG_AGW_DEFAULT_TENANT_SUBDOMAIN }} | |
| CLOUD_SDK_CFG_AUDITLOG_DEFAULT_UAA: ${{ secrets.CLOUD_SDK_CFG_AUDITLOG_DEFAULT_UAA }} | |
| CLOUD_SDK_CFG_DESTINATION_DEFAULT_CLIENTID: ${{ secrets.CLOUD_SDK_CFG_DESTINATION_DEFAULT_CLIENTID }} | |
| CLOUD_SDK_CFG_DESTINATION_DEFAULT_CLIENTSECRET: ${{ secrets.CLOUD_SDK_CFG_DESTINATION_DEFAULT_CLIENTSECRET }} | |
| CLOUD_SDK_CFG_HANA_AGENT_MEMORY_DEFAULT_UAA: ${{ secrets.CLOUD_SDK_CFG_HANA_AGENT_MEMORY_DEFAULT_UAA }} | |
| CLOUD_SDK_CFG_OBJECTSTORE_AZURE_SAS_TOKEN: ${{ secrets.CLOUD_SDK_CFG_OBJECTSTORE_AZURE_SAS_TOKEN }} | |
| CLOUD_SDK_CFG_OBJECTSTORE_DEFAULT_ACCESS_KEY_ID: ${{ secrets.CLOUD_SDK_CFG_OBJECTSTORE_DEFAULT_ACCESS_KEY_ID }} | |
| CLOUD_SDK_CFG_OBJECTSTORE_DEFAULT_SECRET_ACCESS_KEY: ${{ secrets.CLOUD_SDK_CFG_OBJECTSTORE_DEFAULT_SECRET_ACCESS_KEY }} | |
| CLOUD_SDK_CFG_OBJECTSTORE_GCS_BASE64ENCODEDPRIVATEKEYDATA: ${{ secrets.CLOUD_SDK_CFG_OBJECTSTORE_GCS_BASE64ENCODEDPRIVATEKEYDATA }} | |
| CLOUD_SDK_CFG_SDM_DEFAULT_UAA: ${{ secrets.CLOUD_SDK_CFG_SDM_DEFAULT_UAA }} | |
| AICORE_AUTH_URL: ${{ vars.AICORE_AUTH_URL }} | |
| AICORE_BASE_URL: ${{ vars.AICORE_BASE_URL }} | |
| AICORE_FALLBACK_TEST_FALLBACK_MODEL: ${{ vars.AICORE_FALLBACK_TEST_FALLBACK_MODEL }} | |
| AICORE_FALLBACK_TEST_PRIMARY_MODEL: ${{ vars.AICORE_FALLBACK_TEST_PRIMARY_MODEL }} | |
| AICORE_FILTER_TEST_MODEL: ${{ vars.AICORE_FILTER_TEST_MODEL }} | |
| AICORE_RESOURCE_GROUP: ${{ vars.AICORE_RESOURCE_GROUP }} | |
| CLOUD_SDK_CFG_AUDITLOG_DEFAULT_URL: ${{ vars.CLOUD_SDK_CFG_AUDITLOG_DEFAULT_URL }} | |
| CLOUD_SDK_CFG_DESTINATION_DEFAULT_IDENTITYZONE: ${{ vars.CLOUD_SDK_CFG_DESTINATION_DEFAULT_IDENTITYZONE }} | |
| CLOUD_SDK_CFG_DESTINATION_DEFAULT_TENANT_SUBDOMAIN: ${{ vars.CLOUD_SDK_CFG_DESTINATION_DEFAULT_TENANT_SUBDOMAIN }} | |
| CLOUD_SDK_CFG_DESTINATION_DEFAULT_URI: ${{ vars.CLOUD_SDK_CFG_DESTINATION_DEFAULT_URI }} | |
| CLOUD_SDK_CFG_DESTINATION_DEFAULT_URL: ${{ vars.CLOUD_SDK_CFG_DESTINATION_DEFAULT_URL }} | |
| CLOUD_SDK_CFG_HANA_AGENT_MEMORY_DEFAULT_APPLICATION_URL: ${{ vars.CLOUD_SDK_CFG_HANA_AGENT_MEMORY_DEFAULT_APPLICATION_URL }} | |
| CLOUD_SDK_CFG_HANA_AGENT_MEMORY_DEFAULT_SUBSCRIBER_TENANT: ${{ vars.CLOUD_SDK_CFG_HANA_AGENT_MEMORY_DEFAULT_SUBSCRIBER_TENANT }} | |
| CLOUD_SDK_CFG_OBJECTSTORE_AZURE_CONTAINER_NAME: ${{ vars.CLOUD_SDK_CFG_OBJECTSTORE_AZURE_CONTAINER_NAME }} | |
| CLOUD_SDK_CFG_OBJECTSTORE_AZURE_CONTAINER_URI: ${{ vars.CLOUD_SDK_CFG_OBJECTSTORE_AZURE_CONTAINER_URI }} | |
| CLOUD_SDK_CFG_OBJECTSTORE_DEFAULT_BUCKET: ${{ vars.CLOUD_SDK_CFG_OBJECTSTORE_DEFAULT_BUCKET }} | |
| CLOUD_SDK_CFG_OBJECTSTORE_DEFAULT_HOST: ${{ vars.CLOUD_SDK_CFG_OBJECTSTORE_DEFAULT_HOST }} | |
| CLOUD_SDK_CFG_OBJECTSTORE_GCS_BUCKET: ${{ vars.CLOUD_SDK_CFG_OBJECTSTORE_GCS_BUCKET }} | |
| CLOUD_SDK_CFG_OBJECTSTORE_GCS_PROJECTID: ${{ vars.CLOUD_SDK_CFG_OBJECTSTORE_GCS_PROJECTID }} | |
| CLOUD_SDK_CFG_SDM_DEFAULT_URI: ${{ vars.CLOUD_SDK_CFG_SDM_DEFAULT_URI }} | |
| run: | | |
| env | grep -E '^(CLOUD_SDK_CFG_|AICORE_)' >> "$GITHUB_ENV" | |
| echo "Integration test environment set up." | |
| - name: Run integration tests | |
| env: | |
| TEST_PATHS: ${{ needs.detect-scope.outputs.test_paths }} | |
| run: uv run pytest $TEST_PATHS -v --tb=short |