name: e2e tests on: push: branches: - main pull_request: permissions: contents: read # Shared env vars for all jobs that run tests env: PLANO_DOCKER_IMAGE: katanemo/plano:e2e jobs: # ────────────────────────────────────────────── # Job 1: Build the Docker image once, with cache # ────────────────────────────────────────────── build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Free disk space on runner run: | sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc docker system prune -af || true docker volume prune -f || true - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build plano image (with GHA cache) uses: docker/build-push-action@v6 with: context: . file: Dockerfile load: true tags: ${{ env.PLANO_DOCKER_IMAGE }} cache-from: type=gha cache-to: type=gha,mode=max - name: Save image as artifact run: docker save ${{ env.PLANO_DOCKER_IMAGE }} -o /tmp/plano-image.tar - name: Upload image artifact uses: actions/upload-artifact@v4 with: name: plano-image path: /tmp/plano-image.tar retention-days: 1 # ────────────────────────────────────────────── # Job 2a: prompt_gateway tests # ────────────────────────────────────────────── test-prompt-gateway: needs: build runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Free disk space on runner run: | sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc docker system prune -af || true docker volume prune -f || true - name: Download plano image uses: actions/download-artifact@v4 with: name: plano-image path: /tmp - name: Load plano image run: docker load -i /tmp/plano-image.tar - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install uv uses: astral-sh/setup-uv@v5 with: enable-cache: true cache-dependency-glob: | tests/e2e/uv.lock cli/uv.lock - name: Run prompt_gateway tests env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }} GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} AZURE_API_KEY: ${{ secrets.AZURE_API_KEY }} AWS_BEARER_TOKEN_BEDROCK: ${{ secrets.AWS_BEARER_TOKEN_BEDROCK }} GROK_API_KEY: ${{ secrets.GROK_API_KEY }} run: | cd tests/e2e && bash run_prompt_gateway_tests.sh # ────────────────────────────────────────────── # Job 2b: model_alias_routing + responses API tests # ────────────────────────────────────────────── test-model-alias-routing: needs: build runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Free disk space on runner run: | sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc docker system prune -af || true docker volume prune -f || true - name: Download plano image uses: actions/download-artifact@v4 with: name: plano-image path: /tmp - name: Load plano image run: docker load -i /tmp/plano-image.tar - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install uv uses: astral-sh/setup-uv@v5 with: enable-cache: true cache-dependency-glob: | tests/e2e/uv.lock cli/uv.lock - name: Run model alias routing tests env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }} GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} AZURE_API_KEY: ${{ secrets.AZURE_API_KEY }} AWS_BEARER_TOKEN_BEDROCK: ${{ secrets.AWS_BEARER_TOKEN_BEDROCK }} GROK_API_KEY: ${{ secrets.GROK_API_KEY }} run: | cd tests/e2e && bash run_model_alias_tests.sh # ────────────────────────────────────────────── # Job 2c: responses API with state storage tests # ────────────────────────────────────────────── test-responses-api-with-state: needs: build runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Free disk space on runner run: | sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc docker system prune -af || true docker volume prune -f || true - name: Download plano image uses: actions/download-artifact@v4 with: name: plano-image path: /tmp - name: Load plano image run: docker load -i /tmp/plano-image.tar - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install uv uses: astral-sh/setup-uv@v5 with: enable-cache: true cache-dependency-glob: | tests/e2e/uv.lock cli/uv.lock - name: Run responses API with state tests env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }} GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} AZURE_API_KEY: ${{ secrets.AZURE_API_KEY }} AWS_BEARER_TOKEN_BEDROCK: ${{ secrets.AWS_BEARER_TOKEN_BEDROCK }} GROK_API_KEY: ${{ secrets.GROK_API_KEY }} run: | cd tests/e2e && bash run_responses_state_tests.sh