test: retain PR 19376 visual evidence in isolated CI run

This commit is contained in:
m4air
2026-09-07 22:37:14 -07:00
parent 018e219856
commit 03e66a496b
6 changed files with 23 additions and 9 deletions
+11 -8
View File
@@ -3,6 +3,9 @@ name: E2E
run-name: E2E ${{ inputs.ref || github.ref }}
# Why: checkout + artifact upload only; callers can only further restrict.
env:
ORCA_BACKGROUND_LAUNCH: "1"
permissions:
contents: read
@@ -177,12 +180,12 @@ jobs:
# them as an artifact makes post-mortem debugging on CI possible without
# re-running locally.
- name: Upload Playwright traces
if: failure()
if: always()
uses: actions/upload-artifact@v7
with:
name: playwright-traces-${{ matrix.shard_name }}
path: test-results/
retention-days: 7
retention-days: 30
if-no-files-found: ignore
changed-e2e:
@@ -254,12 +257,12 @@ jobs:
pnpm run test:e2e "${TEST_FILES[@]}" --workers=1 "${E2E_PROJECT_ARGS[@]}"
- name: Upload Playwright traces
if: failure()
if: always()
uses: actions/upload-artifact@v7
with:
name: playwright-traces-changed
path: test-results/
retention-days: 7
retention-days: 30
if-no-files-found: ignore
ssh-docker-watcher-isolation:
@@ -349,12 +352,12 @@ jobs:
fi
- name: Upload watcher isolation traces
if: failure()
if: always()
uses: actions/upload-artifact@v7
with:
name: playwright-traces-ssh-docker-watcher-isolation
path: e2e-traces/
retention-days: 7
retention-days: 30
if-no-files-found: ignore
ssh-browser-network-route:
@@ -434,9 +437,9 @@ jobs:
ORCA_E2E_FORWARD_APP_LOGS: '1'
run: xvfb-run --auto-servernum bash .github/scripts/e2e-with-window-manager.sh pnpm exec playwright test --config tests/playwright.config.ts tests/e2e/ssh-localhost.spec.ts --project=electron-headless --workers=1
- uses: actions/upload-artifact@v7
if: failure()
if: always()
with:
name: localhost-ssh-traces
path: test-results/
retention-days: 7
retention-days: 30
if-no-files-found: ignore
@@ -110,6 +110,7 @@ for (const workspace of ['git', 'folder', 'paired remote'] as const) {
body: await page.screenshot(),
contentType: 'image/png'
})
await page.screenshot({ path: testInfo.outputPath('reopened-editor.png') })
await closeActiveEditorTab(page, filePath)
} finally {
await client?.dispose()
+3
View File
@@ -42,6 +42,7 @@ test.describe('Markdown nested toggle regression', () => {
await waitForRichMarkdownEditor(orcaPage)
await expectEditableNestedToggles(orcaPage)
await orcaPage.screenshot({ path: testInfo.outputPath('verified-editor.png') })
} finally {
await cleanupMarkdownFixture(filePath)
}
@@ -83,6 +84,7 @@ test.describe('Markdown nested toggle regression', () => {
await waitForRichMarkdownEditor(orcaPage)
await expectEditableNestedToggles(orcaPage)
await expectSentinelInsideNestedToggle(orcaPage, sentinel)
await orcaPage.screenshot({ path: testInfo.outputPath('verified-editor.png') })
} finally {
await cleanupMarkdownFixture(filePath)
}
@@ -106,6 +108,7 @@ test.describe('Markdown nested toggle regression', () => {
await waitForRichMarkdownEditor(orcaPage)
await expectPassthroughFallback(orcaPage)
await orcaPage.screenshot({ path: testInfo.outputPath('verified-editor.png') })
} finally {
await cleanupMarkdownFixture(filePath)
}
+2 -1
View File
@@ -84,7 +84,8 @@ test.describe('Markdown ordered-list exit regression', () => {
await expectSentinelParagraphOutsideOrderedList(orcaPage, row.sentinel)
await expectSerializedDraftOutsideOrderedList(orcaPage, draftKey, row.sentinel)
} finally {
await orcaPage.screenshot({ path: testInfo.outputPath('verified-editor.png') })
} finally {
await cleanupMarkdownFixture(filePath)
}
})
+4
View File
@@ -169,6 +169,7 @@ test.describe('Markdown prose reflow', () => {
expect(metrics.sourceLineCount).toBe(4)
expect(metrics.whiteSpace).toBe('normal')
expect(metrics.lineCount).toBeLessThan(metrics.sourceLineCount)
await orcaPage.screenshot({ path: testInfo.outputPath('verified-editor.png') })
} finally {
await cleanupMarkdownFixture(filePath)
}
@@ -192,6 +193,7 @@ test.describe('Markdown prose reflow', () => {
expect(metrics.sourceLineCount).toBe(4)
expect(metrics.whiteSpace).toBe('normal')
expect(metrics.lineCount).toBeLessThan(metrics.sourceLineCount)
await orcaPage.screenshot({ path: testInfo.outputPath('verified-editor.png') })
} finally {
await cleanupMarkdownFixture(filePath)
}
@@ -217,6 +219,7 @@ test.describe('Markdown prose reflow', () => {
expect(metrics.sourceLineCount).toBe(4)
expect(metrics.whiteSpace).toBe('normal')
expect(metrics.lineCount).toBeLessThan(metrics.sourceLineCount)
await orcaPage.screenshot({ path: testInfo.outputPath('verified-editor.png') })
} finally {
await cleanupMarkdownFixture(filePath)
}
@@ -239,6 +242,7 @@ test.describe('Markdown prose reflow', () => {
expect(metrics.sourceLineCount).toBe(4)
expect(metrics.whiteSpace).toBe('normal')
expect(metrics.lineCount).toBeLessThan(metrics.sourceLineCount)
await orcaPage.screenshot({ path: testInfo.outputPath('verified-editor.png') })
} finally {
await cleanupMarkdownFixture(filePath)
}
@@ -101,6 +101,7 @@ test.describe('Rich markdown link bubble stacking', () => {
expect(overlap.bubbleRight).toBeGreaterThan(overlap.explorerLeft)
expect(overlap.overlapWidth).toBeGreaterThan(8)
expect(overlap.topElementIsBubble).toBe(true)
await orcaPage.screenshot({ path: testInfo.outputPath('link-bubble-over-explorer.png') })
// The Edit action exposes its label via aria-label (a shadcn Button +
// Radix tooltip), not a title attribute, so match by accessible name.
@@ -115,6 +116,7 @@ test.describe('Rich markdown link bubble stacking', () => {
await expect(input).toBeFocused()
await input.fill(`https://example.com/${'long-url-segment/'.repeat(30)}`)
await input.press('End')
await orcaPage.screenshot({ path: testInfo.outputPath('link-bubble-edit.png') })
expect(await input.evaluate((element) => element.scrollLeft)).toBeGreaterThan(0)
await expect(input).toBeFocused()
await expect(bubble).toBeVisible()