From 112bcc90695c69b99fae89ec0865a582c26d43f8 Mon Sep 17 00:00:00 2001 From: Simon Siefke Date: Sat, 18 Jul 2026 10:59:38 +0000 Subject: [PATCH 1/3] test: reproduce move output to sidebar failure --- .github/workflows/pr.yml | 50 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index d38a27ccec..199ff729ab 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -6,6 +6,56 @@ on: - main jobs: + diagnose-move-output-to-sidebar: + name: move-output-to-sidebar (attempt ${{ matrix.attempt }}) + runs-on: ubuntu-24.04 + strategy: + fail-fast: false + max-parallel: 1 + matrix: + attempt: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] + timeout-minutes: 30 + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 + with: + node-version-file: '.nvmrc' + - name: Compute node modules cache key + id: nodeModulesCacheKey + run: echo "value=$(node scripts/computeNodeModulesCacheKey.js)" >> $GITHUB_OUTPUT + shell: bash + - uses: actions/cache@v6 + id: npm-cache + with: + path: | + **/node_modules + **/.vscode-test + **/.vscode-user-data-dir + **/.vscode-ffmpeg + **/.vscode-resolve-source-map-cache + key: ${{ runner.os }}-cacheNodeModules-${{ steps.nodeModulesCacheKey.outputs.value }} + - name: npm ci + run: npm ci --ignore-scripts && npm run postinstall + if: steps.npm-cache.outputs.cache-hit != 'true' + - run: npm run build + - name: Run exact e2e test + uses: coactions/setup-xvfb@v1 + with: + run: >- + node packages/cli/bin/test.js + --cwd packages/e2e + --only ^move-output-to-sidebar.ts + --run-skipped-tests-anyway + --record-video + --workers 1 + - uses: actions/upload-artifact@v7 + if: always() + with: + name: move-output-to-sidebar-attempt-${{ matrix.attempt }} + path: ./.vscode-videos + include-hidden-files: true + if-no-files-found: ignore + pr: runs-on: ${{ matrix.os }} strategy: From 1277f813760cb3f289c1f978c814991fbfe15ea4 Mon Sep 17 00:00:00 2001 From: Simon Siefke Date: Sat, 18 Jul 2026 11:01:51 +0000 Subject: [PATCH 2/3] fix: wait for output view actions --- packages/page-object/src/parts/Output/Output.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/page-object/src/parts/Output/Output.ts b/packages/page-object/src/parts/Output/Output.ts index 4ec2fadfa7..a860a39977 100644 --- a/packages/page-object/src/parts/Output/Output.ts +++ b/packages/page-object/src/parts/Output/Output.ts @@ -73,11 +73,19 @@ export const create = ({ electronApp, expect, ideVersion, page, platform, VError }, async moveOutputToSidebar() { try { + await page.waitForIdle() const outputView = page.locator('.pane-body.output-view') await expect(outputView).toBeVisible() + await page.waitForIdle() const moreActions = page.locator('.panel [aria-label="Views and More Actions..."]') await expect(moreActions).toBeVisible() + await page.waitForIdle() + await moreActions.focus() + await page.waitForIdle() + await expect(moreActions).toBeFocused() + await page.waitForIdle() await moreActions.click() + await page.waitForIdle() const contextMenu = ContextMenu.create({ electronApp, expect, ideVersion, page, platform, VError }) await contextMenu.openSubMenu('Move To', false) await contextMenu.select('Sidebar', false) From ca78bee56300b43c5012629343b8c786e68d221e Mon Sep 17 00:00:00 2001 From: Simon Siefke Date: Sat, 18 Jul 2026 11:11:02 +0000 Subject: [PATCH 3/3] fix: use output tab move action --- .../page-object/src/parts/Output/Output.ts | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/page-object/src/parts/Output/Output.ts b/packages/page-object/src/parts/Output/Output.ts index a860a39977..37cf1b7082 100644 --- a/packages/page-object/src/parts/Output/Output.ts +++ b/packages/page-object/src/parts/Output/Output.ts @@ -73,22 +73,22 @@ export const create = ({ electronApp, expect, ideVersion, page, platform, VError }, async moveOutputToSidebar() { try { - await page.waitForIdle() const outputView = page.locator('.pane-body.output-view') await expect(outputView).toBeVisible() - await page.waitForIdle() - const moreActions = page.locator('.panel [aria-label="Views and More Actions..."]') - await expect(moreActions).toBeVisible() - await page.waitForIdle() - await moreActions.focus() - await page.waitForIdle() - await expect(moreActions).toBeFocused() - await page.waitForIdle() - await moreActions.click() - await page.waitForIdle() + const outputTab = page.locator('.part.panel [role="tab"]', { + hasText: 'Output', + }) + await expect(outputTab).toBeVisible() const contextMenu = ContextMenu.create({ electronApp, expect, ideVersion, page, platform, VError }) + await contextMenu.open(outputTab) await contextMenu.openSubMenu('Move To', false) - await contextMenu.select('Sidebar', false) + const primarySideBar = page.locator('.monaco-submenu .action-menu-item:has(.action-label[aria-label="Primary Side Bar"])') + await expect(primarySideBar).toBeVisible() + await expect(primarySideBar).toBeFocused() + await page.keyboard.press('Enter') + await page.waitForIdle() + const sideBarOutputView = page.locator('.part.sidebar .pane-body.output-view') + await expect(sideBarOutputView).toBeVisible() } catch (error) { throw new VError(error, `Failed to move output to sidebar`) }