pi-ai-provider-e2e.yml 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. name: E2E (pi-ai Azure OpenAI and Anthropic)
  2. # This suite spends tokens against two external providers and is intentionally
  3. # opt-in. It has no push, pull_request, schedule, or workflow_call trigger.
  4. on:
  5. workflow_dispatch:
  6. inputs:
  7. azure_openai_model:
  8. description: Azure OpenAI model from pi-ai's installed catalog
  9. required: true
  10. default: gpt-5.5
  11. type: string
  12. anthropic_model:
  13. description: Anthropic model from pi-ai's installed catalog
  14. required: true
  15. default: claude-opus-4-8
  16. type: string
  17. permissions:
  18. contents: read
  19. jobs:
  20. e2e:
  21. runs-on: ubuntu-latest
  22. name: Azure OpenAI Responses + Anthropic Messages
  23. timeout-minutes: 20
  24. steps:
  25. - uses: actions/checkout@v6
  26. - uses: actions/setup-node@v6
  27. with:
  28. node-version: 24
  29. - name: Enable corepack (pnpm)
  30. run: corepack enable
  31. - name: Resolve pnpm store path
  32. id: pnpm-store
  33. run: echo "path=$(pnpm store path --silent)" >> "$GITHUB_OUTPUT"
  34. - uses: actions/cache@v4
  35. with:
  36. path: ${{ steps.pnpm-store.outputs.path }}
  37. key: ${{ runner.os }}-node-24-pnpm-${{ hashFiles('pnpm-lock.yaml') }}
  38. restore-keys: |
  39. ${{ runner.os }}-node-24-pnpm-
  40. - name: Install (immutable)
  41. run: pnpm install --frozen-lockfile
  42. # The tests self-skip locally when a credential is absent. A manually
  43. # dispatched CI run must fail instead of reporting an all-skipped green.
  44. - name: Preflight (require provider API keys)
  45. env:
  46. AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY_EXTERNAL }}
  47. ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY_EXTERNAL }}
  48. run: |
  49. set -euo pipefail
  50. missing=0
  51. for name in AZURE_OPENAI_API_KEY ANTHROPIC_API_KEY; do
  52. if [ -z "${!name:-}" ]; then
  53. echo "::error::${name} is empty. Configure the corresponding *_EXTERNAL repository secret."
  54. missing=1
  55. fi
  56. done
  57. exit "$missing"
  58. - name: E2E tests (real Azure OpenAI and Anthropic APIs)
  59. env:
  60. AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY_EXTERNAL }}
  61. ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY_EXTERNAL }}
  62. DSH_PI_AI_OPENAI_MODEL: ${{ inputs.azure_openai_model }}
  63. DSH_PI_AI_OPENAI_BASE_URL: https://openai-routerhub-resource.services.ai.azure.com/api/projects/openai/openai/v1
  64. DSH_PI_AI_ANTHROPIC_MODEL: ${{ inputs.anthropic_model }}
  65. DSH_E2E_MAX_WORKERS: 2
  66. run: >-
  67. pnpm exec vitest run --config vitest.e2e.config.ts
  68. packages/llm/llm-pi-ai/tests/provider-apis.e2e.ts