From efdfab1a212673b8ffd6110006a28af0b4008ed4 Mon Sep 17 00:00:00 2001 From: Simon Siefke Date: Sat, 18 Jul 2026 10:55:01 +0000 Subject: [PATCH 1/2] test: reproduce flaky mcp list e2e --- .github/workflows/pr.yml | 63 +++++----------------------------------- 1 file changed, 8 insertions(+), 55 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index d38a27ccec..57ef851b67 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -6,12 +6,14 @@ on: - main jobs: - pr: - runs-on: ${{ matrix.os }} + reproduce-mcp-list: + name: mcp-list (attempt ${{ matrix.attempt }}) + runs-on: ubuntu-24.04 strategy: fail-fast: false + max-parallel: 1 matrix: - os: [ubuntu-24.04, macos-26, windows-2022] + attempt: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] timeout-minutes: 240 steps: - uses: actions/checkout@v7 @@ -34,66 +36,17 @@ jobs: **/.vscode-ffmpeg **/.vscode-resolve-source-map-cache key: ${{ runner.os }}-cacheNodeModules-${{ steps.nodeModulesCacheKey.outputs.value }} - - name: Compute source maps cache key - id: sourceMapsCacheKey - run: echo "value=$(node packages/build/src/computeSourceMapsCacheKey.ts)" >> $GITHUB_OUTPUT - shell: bash - - uses: actions/cache@v6 - id: source-maps-cache - with: - path: | - **/.vscode-source-maps - **/.vscode-sources - key: ${{ runner.os }}-cacheSourceMaps-${{ steps.sourceMapsCacheKey.outputs.value }} - name: npm ci run: npm ci --ignore-scripts && npm run postinstall if: steps.npm-cache.outputs.cache-hit != 'true' - - run: npm run type-check - - run: npm run lint - run: npm run build - - run: npx lerna run test --since origin/main - - name: Run headless test (with videos) - if: matrix.os != 'macos-26' - uses: coactions/setup-xvfb@v1 - with: - run: node packages/cli/bin/test.js --cwd packages/e2e --record-video - - name: Run headless test - uses: coactions/setup-xvfb@v1 - with: - run: npm run e2e - - name: Run headless test (flakyness check) - if: matrix.os != 'macos-26' - uses: coactions/setup-xvfb@v1 - with: - run: npm run e2e:check-flakyness - - name: Run headless test (second flakyness check) - if: matrix.os != 'macos-26' - uses: coactions/setup-xvfb@v1 - with: - run: npm run e2e:check-flakyness - - name: Run headless test (check leaks, event listener count) - if: matrix.os != 'macos-26' - uses: coactions/setup-xvfb@v1 - with: - run: node packages/cli/bin/test.js --cwd packages/e2e --check-leaks --measure-after - - name: Run headless test (check leaks, event listeners) - if: matrix.os == 'ubuntu-24.04' - uses: coactions/setup-xvfb@v1 - with: - run: node packages/cli/bin/test.js --cwd packages/e2e --check-leaks --measure event-listeners - - name: Run Memory City smoke test - if: matrix.os == 'ubuntu-24.04' + - name: Run mcp-list uses: coactions/setup-xvfb@v1 with: - run: node packages/cli/bin/test.js --cwd packages/e2e --check-leaks --measure memory-city --only ^editor-open.ts --workers 1 - - name: Generate charts - run: node packages/charts/src/main.ts - - name: Validate Memory City artifact - if: matrix.os == 'ubuntu-24.04' - run: node packages/visualizations/src/validate.ts + run: node packages/cli/bin/test.js --cwd packages/e2e --record-video --only ^mcp-list.ts --workers 1 --run-skipped-tests-anyway - uses: actions/upload-artifact@v7 if: always() with: - name: vscode-videos-${{ runner.os }} + name: mcp-list-attempt-${{ matrix.attempt }} path: ./.vscode-videos include-hidden-files: true From ee22ff587e5150b1f97b1a776f3f10a3b0f02ba4 Mon Sep 17 00:00:00 2001 From: Simon Siefke Date: Sat, 18 Jul 2026 10:55:46 +0000 Subject: [PATCH 2/2] fix: update MCP quick input selector --- packages/page-object/src/parts/MCP/MCP.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/page-object/src/parts/MCP/MCP.ts b/packages/page-object/src/parts/MCP/MCP.ts index df52e09054..a7ddbc026f 100644 --- a/packages/page-object/src/parts/MCP/MCP.ts +++ b/packages/page-object/src/parts/MCP/MCP.ts @@ -40,7 +40,7 @@ export const create = ({ electronApp, expect, ideVersion, page, platform, VError await this.selectCommand(httpOption, true) const quickPickLocator = page.locator('.quick-input-widget') - const quickPickInput = quickPickLocator.locator('[aria-autocomplete="list"]') + const quickPickInput = quickPickLocator.locator('.ibwrapper .input') await expect(quickPickInput).toHaveAttribute('aria-label', `URL of the MCP server (e.g., http://localhost:3000) - Enter Server URL`) await page.waitForIdle() await quickPickInput.type(`${serverUrl}/mcp`)