fix: resolve tool scheduling, cancellation, and search issues #1674
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: 'Testing: E2E' | |
| on: | |
| push: | |
| branches: | |
| - 'main' | |
| # This will run for PRs from the base repository, providing secrets. | |
| pull_request: | |
| branches: | |
| - 'main' | |
| - 'release/**' | |
| # This will run for PRs from forks when a label is added. | |
| pull_request_target: | |
| types: ['labeled'] | |
| merge_group: | |
| workflow_dispatch: | |
| inputs: | |
| branch_ref: | |
| description: 'Branch to run on' | |
| required: true | |
| default: 'main' | |
| type: 'string' | |
| jobs: | |
| e2e_linux: | |
| name: 'E2E Test (Linux) - ${{ matrix.sandbox }}' | |
| if: | | |
| github.event_name == 'push' || | |
| github.event_name == 'merge_group' || | |
| github.event_name == 'workflow_dispatch' || | |
| (github.event.pull_request.head.repo.full_name == github.repository) || | |
| (github.event.label.name == 'maintainer:e2e:ok') | |
| runs-on: 'ubuntu-latest' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| sandbox: | |
| - 'sandbox:none' | |
| - 'sandbox:docker' | |
| node-version: | |
| - '20.x' | |
| steps: | |
| - name: 'Checkout (fork)' | |
| uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5 | |
| if: "github.event_name == 'pull_request_target'" | |
| with: | |
| ref: '${{ github.event.pull_request.head.sha }}' | |
| repository: '${{ github.event.pull_request.head.repo.full_name }}' | |
| - name: 'Checkout (internal)' | |
| uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5 | |
| if: "github.event_name != 'pull_request_target'" | |
| with: | |
| ref: '${{ github.event.inputs.branch_ref || github.ref }}' | |
| - name: 'Set up Node.js ${{ matrix.node-version }}' | |
| uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4 | |
| with: | |
| node-version: '${{ matrix.node-version }}' | |
| - name: 'Install dependencies' | |
| run: 'npm ci' | |
| - name: 'Build project' | |
| run: 'npm run build' | |
| - name: 'Set up Docker' | |
| if: "matrix.sandbox == 'sandbox:docker'" | |
| uses: 'docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435' # ratchet:docker/setup-buildx-action@v3 | |
| - name: 'Run E2E tests' | |
| env: | |
| # Provider configuration from repository secrets/variables | |
| OPENAI_API_KEY: '${{ secrets[vars.KEY_VAR_NAME] }}' | |
| OPENAI_BASE_URL: '${{ vars.OPENAI_BASE_URL }}' | |
| LLXPRT_DEFAULT_MODEL: '${{ vars.LLXPRT_DEFAULT_MODEL }}' | |
| LLXPRT_DEFAULT_PROVIDER: '${{ vars.LLXPRT_DEFAULT_PROVIDER }}' | |
| # Set auth type to provider for API key authentication | |
| LLXPRT_AUTH_TYPE: 'provider' | |
| KEEP_OUTPUT: 'true' | |
| VERBOSE: 'true' | |
| # Force file storage to avoid keytar/libsecret dependency in CI | |
| LLXPRT_FORCE_FILE_STORAGE: 'true' | |
| shell: 'bash' | |
| run: | | |
| if [[ "${{ matrix.sandbox }}" == "sandbox:docker" ]]; then | |
| npm run test:integration:sandbox:docker | |
| else | |
| npm run test:integration:sandbox:none | |
| fi | |
| e2e_mac: | |
| name: 'E2E Test (macOS)' | |
| if: | | |
| github.event_name == 'push' || | |
| github.event_name == 'merge_group' || | |
| github.event_name == 'workflow_dispatch' || | |
| (github.event.pull_request.head.repo.full_name == github.repository) || | |
| (github.event.label.name == 'maintainer:e2e:ok') | |
| runs-on: 'macos-latest' | |
| continue-on-error: true | |
| steps: | |
| - name: 'Checkout (fork)' | |
| uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5 | |
| if: "github.event_name == 'pull_request_target'" | |
| with: | |
| ref: '${{ github.event.pull_request.head.sha }}' | |
| repository: '${{ github.event.pull_request.head.repo.full_name }}' | |
| - name: 'Checkout (internal)' | |
| uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5 | |
| if: "github.event_name != 'pull_request_target'" | |
| with: | |
| ref: '${{ github.event.inputs.branch_ref || github.ref }}' | |
| - name: 'Set up Node.js 20.x' | |
| uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4 | |
| with: | |
| node-version: '20.x' | |
| - name: 'Install dependencies' | |
| run: 'npm ci' | |
| - name: 'Build project' | |
| run: 'npm run build' | |
| - name: 'Fix rollup optional dependencies on macOS' | |
| if: "runner.os == 'macOS'" | |
| run: | | |
| npm cache clean --force | |
| - name: 'Run E2E tests (non-Windows)' | |
| if: "runner.os != 'Windows'" | |
| env: | |
| # Provider configuration from repository secrets/variables | |
| OPENAI_API_KEY: '${{ secrets[vars.KEY_VAR_NAME] }}' | |
| OPENAI_BASE_URL: '${{ vars.OPENAI_BASE_URL }}' | |
| LLXPRT_DEFAULT_MODEL: '${{ vars.LLXPRT_DEFAULT_MODEL }}' | |
| LLXPRT_DEFAULT_PROVIDER: '${{ vars.LLXPRT_DEFAULT_PROVIDER }}' | |
| # Set auth type to provider for API key authentication | |
| LLXPRT_AUTH_TYPE: 'provider' | |
| KEEP_OUTPUT: 'true' | |
| SANDBOX: 'sandbox:none' | |
| VERBOSE: 'true' | |
| # Force file storage to avoid keytar/libsecret dependency in CI | |
| LLXPRT_FORCE_FILE_STORAGE: 'true' | |
| run: 'npm run test:integration:sandbox:none' | |
| e2e_windows: | |
| name: 'Slow E2E - Win' | |
| if: | | |
| github.event_name == 'push' || | |
| github.event_name == 'merge_group' || | |
| github.event_name == 'workflow_dispatch' || | |
| (github.event.pull_request.head.repo.full_name == github.repository) || | |
| (github.event.label.name == 'maintainer:e2e:ok') | |
| runs-on: 'windows-latest' | |
| continue-on-error: true | |
| steps: | |
| - name: 'Checkout (fork)' | |
| uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5 | |
| if: "github.event_name == 'pull_request_target'" | |
| with: | |
| ref: '${{ github.event.pull_request.head.sha }}' | |
| repository: '${{ github.event.pull_request.head.repo.full_name }}' | |
| - name: 'Checkout (internal)' | |
| uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5 | |
| if: "github.event_name != 'pull_request_target'" | |
| with: | |
| ref: '${{ github.event.inputs.branch_ref || github.ref }}' | |
| - name: 'Set up Node.js 20.x' | |
| uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4 | |
| with: | |
| node-version: '20.x' | |
| cache: 'npm' | |
| - name: 'Configure Windows Defender exclusions' | |
| run: | | |
| Add-MpPreference -ExclusionPath $env:GITHUB_WORKSPACE -Force | |
| Add-MpPreference -ExclusionPath "$env:GITHUB_WORKSPACE\node_modules" -Force | |
| Add-MpPreference -ExclusionPath "$env:GITHUB_WORKSPACE\packages" -Force | |
| Add-MpPreference -ExclusionPath "$env:TEMP" -Force | |
| shell: 'pwsh' | |
| - name: 'Configure npm for Windows performance' | |
| run: | | |
| npm config set progress false | |
| npm config set audit false | |
| npm config set fund false | |
| npm config set loglevel error | |
| npm config set maxsockets 32 | |
| npm config set registry https://registry.npmjs.org/ | |
| shell: 'pwsh' | |
| - name: 'Install dependencies' | |
| run: 'npm ci' | |
| shell: 'pwsh' | |
| - name: 'Build project' | |
| run: 'npm run build' | |
| shell: 'pwsh' | |
| - name: 'Run E2E tests' | |
| env: | |
| # Provider configuration from repository secrets/variables | |
| OPENAI_API_KEY: '${{ secrets[vars.KEY_VAR_NAME] }}' | |
| OPENAI_BASE_URL: '${{ vars.OPENAI_BASE_URL }}' | |
| LLXPRT_DEFAULT_MODEL: '${{ vars.LLXPRT_DEFAULT_MODEL }}' | |
| LLXPRT_DEFAULT_PROVIDER: '${{ vars.LLXPRT_DEFAULT_PROVIDER }}' | |
| # Set auth type to provider for API key authentication | |
| LLXPRT_AUTH_TYPE: 'provider' | |
| # Force file storage to avoid keytar/libsecret dependency in CI | |
| LLXPRT_FORCE_FILE_STORAGE: 'true' | |
| KEEP_OUTPUT: 'true' | |
| SANDBOX: 'sandbox:none' | |
| VERBOSE: 'true' | |
| NODE_OPTIONS: '--max-old-space-size=32768 --max-semi-space-size=256' | |
| UV_THREADPOOL_SIZE: '32' | |
| NODE_ENV: 'test' | |
| shell: 'pwsh' | |
| run: 'npm run test:integration:sandbox:none' |