Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
515f663
Add VS Code extension E2E tests and CI pipeline
lambrianmsft Mar 5, 2026
ab7a273
fix: Pin VS Code version to 1.108.0 for ExTester compatibility
lambrianmsft Mar 5, 2026
4a722e3
Merge main into lambrian/vscode_e2e_testing (resolve pnpm-lock.yaml c…
lambrianmsft Mar 5, 2026
1e4736e
fix: improve e2e test stability — QuickPick wizard handling, writeTes…
lambrianmsft Mar 5, 2026
b49654d
fix: CI stability — settings per phase, manifest fallbacks, JS click …
lambrianmsft Mar 5, 2026
c038cd6
fix: CI run 2 — driver scope, retry count, conversion settings
lambrianmsft Mar 6, 2026
058502a
fix: wait for extension re-activation after workspace switch
lambrianmsft Mar 6, 2026
48c9012
fix: skip redundant workspace switch, increase CI timeout
lambrianmsft Mar 6, 2026
75f453a
fix: remove 300s blocking wait, fix async interleaving across phases
lambrianmsft Mar 6, 2026
da3b8d3
fix: kill VS Code processes on Linux CI between phases (root cause)
lambrianmsft Mar 6, 2026
0a9fabf
fix: replace command palette with Explorer right-click for Open Designer
lambrianmsft Mar 6, 2026
fa5d8ab
fix: clean IPC socket files between phases, increase kill wait
lambrianmsft Mar 6, 2026
a038848
diag: add comprehensive logging to diagnose code -r failure on Linux CI
lambrianmsft Mar 6, 2026
1844f22
fix: replace code -r with command palette for opening workspaces
lambrianmsft Mar 6, 2026
1918193
fix: replace all openResources (code -r) with Quick Open + command pa…
lambrianmsft Mar 7, 2026
da9cef4
fix: dismiss dialogs in openFolderInSession + retry switchToFrame
lambrianmsft Mar 9, 2026
9315f85
fix: bypass ExTester WebView.switchToFrame() with manual Selenium fra…
lambrianmsft Mar 9, 2026
7876f7c
fix: wait for func binary on disk + protect dep validation from dismi…
lambrianmsft Mar 9, 2026
28dd2aa
fix: chmod +x on downloaded runtime binaries (func/dotnet/node)
lambrianmsft Mar 9, 2026
18d53ae
fix: wait for extension dependency validation before opening designer
lambrianmsft Mar 10, 2026
d11c5bd
fix: don't falsely match outer webview frame body as #root
lambrianmsft Mar 10, 2026
54f6da2
revert: restore #root,body selector for VS Code 1.108.0 compatibility
lambrianmsft Mar 10, 2026
608c99c
fix: cache runtime deps, dismiss GitHub 403, wait for design-time API
lambrianmsft Mar 16, 2026
6fee35d
fix: guard authData null access + remove subscription keys from local…
lambrianmsft Mar 16, 2026
a282239
fix: set WORKFLOWS_SUBSCRIPTION_ID='' instead of deleting it
lambrianmsft Mar 17, 2026
7afe5fd
fix: unified polling loop for designer webview frame switching
lambrianmsft Mar 17, 2026
51fd829
fix: install .NET SDK and set DOTNET_ROOT for func host start
lambrianmsft Mar 17, 2026
350e361
fix: close editors before test 2 workspace switch + poll for Compose …
lambrianmsft Mar 17, 2026
66e970b
fix: use keyboard shortcut for close editors + add diagnostic screens…
lambrianmsft Mar 18, 2026
190e317
fix: skip custom code run verification + enhance canvasHasNode detection
lambrianmsft Mar 18, 2026
5688a77
fix: capture node count AFTER addParallelBranch for correct baseline
lambrianmsft Mar 18, 2026
98eefed
Updated to use the right function namespace, updated tasks.json, fixe…
lambrianmsft Mar 23, 2026
a94fc1f
Removed missing intl, updated for additional validation message cover…
lambrianmsft Mar 25, 2026
a37466c
Merge branch 'main' into lambrian/vscode_e2e_testing
lambrianmsft Mar 25, 2026
f3070e0
fix corrupted pnpm lock file
lambrianmsft Mar 25, 2026
38554aa
correction CodeQL Incomplete string escaping or encoding error
lambrianmsft Mar 25, 2026
9857a63
Removed the onboarding/runtime dependency cycle, cleaned up related t…
lambrianmsft Mar 27, 2026
873cda7
Exclude the src/test/e2e, src/test/ui, and the authorization token fi…
lambrianmsft Mar 27, 2026
aba5b17
Exclude the src/test/e2e, src/test/ui, and the authorization token fi…
lambrianmsft Mar 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,24 @@ pnpm run build:lib # or pnpm turbo run build:lib
pnpm run build:extension
```

### VS Code Extension E2E Tests (ExTester)
```bash
# Build + run all phases
cd apps/vs-code-designer
npx tsup --config tsup.e2e.test.config.ts
node src/test/ui/run-e2e.js

# Run specific phases
$env:E2E_MODE="createonly" # Phase 4.1: workspace creation
$env:E2E_MODE="designeronly" # Phase 4.2: designer lifecycle
$env:E2E_MODE="newtestsonly" # Phases 4.3-4.6: new tests
node src/test/ui/run-e2e.js
```

**Key knowledge files for E2E tests:**
- `apps/vs-code-designer/src/test/ui/SKILL.md` — Complete learning document (700+ lines)
- `apps/vs-code-designer/CLAUDE.md` — Critical rules for writing new tests

### Testing
```bash
# Run all unit tests
Expand Down Expand Up @@ -71,6 +89,16 @@ eslint --cache --fix
pnpm run check # or biome check --write .
```

**MANDATORY after every edit**: Run `npx biome check --write <files>` before committing.
Do NOT use `--unsafe` flag — fix unsafe lint errors manually.
Always verify compilation after changes: `npx tsup --config tsup.e2e.test.config.ts` (for E2E test files).

**Biome rules to follow when writing code** (these cause errors if violated):
- Use string literals (`'text'`) NOT template literals (`` `text` ``) when there are no interpolations
- Avoid unnecessary `catch` bindings — use `catch {` not `catch (e) {` when `e` is unused
- Keep imports organized and remove unused imports
- Always use block statements with braces — `if (x) { break; }` not `if (x) break;`

### VS Code Extension
```bash
# Pack VS Code extension
Expand Down
11 changes: 11 additions & 0 deletions .github/workflows/pr-coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,11 @@ jobs:
**/webviewCommunication.tsx
# VS Code React intl files (localization catalog, not unit-test target)
apps/vs-code-react/src/intl/**
# VS Code extension E2E and UI test harness files
apps/vs-code-designer/src/test/e2e/**
apps/vs-code-designer/src/test/ui/**
# Environment-specific utility excluded from coverage policy
apps/vs-code-designer/src/app/utils/codeless/getAuthorizationToken.ts

- name: Check coverage on changed files
id: coverage-check
Expand Down Expand Up @@ -189,6 +194,12 @@ jobs:
continue
fi

# Defensive skip for files excluded from the PR coverage gate
if [[ "$file" =~ ^apps/vs-code-designer/src/test/(e2e|ui)/ ]] || [ "$file" = "apps/vs-code-designer/src/app/utils/codeless/getAuthorizationToken.ts" ]; then
SKIPPED_FILES="$SKIPPED_FILES\n⏭️ \`$file\` - Coverage check excluded by workflow policy"
continue
fi

# Find the corresponding coverage file for this source file
# Look in the package's coverage directory
PKG_DIR=$(echo "$file" | sed 's|/src/.*||')
Expand Down
99 changes: 99 additions & 0 deletions .github/workflows/vscode-e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: VS Code Extension E2E Tests

on:
push:
branches: [main, dev/*, hotfix/*]
pull_request:
branches: [main, dev/*, hotfix/*]

concurrency:
group: vscode-e2e-${{ github.head_ref || github.ref }}
cancel-in-progress: true

jobs:
vscode-e2e:
timeout-minutes: 90
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Cache turbo build setup
uses: actions/cache@v4
with:
path: .turbo
key: ${{ runner.os }}-turbo-${{ github.sha }}
restore-keys: |
${{ runner.os }}-turbo-

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20.x

- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'

- name: Setup pnpm
uses: pnpm/action-setup@v3
with:
version: 9.1.3
run_install: |
- recursive: true
args: [--frozen-lockfile, --strict-peer-dependencies]

- name: Build extension
run: pnpm turbo run build:extension --cache-dir=.turbo

- name: Compile E2E tests
working-directory: apps/vs-code-designer
run: npx tsup --config tsup.e2e.test.config.ts

- name: Install system dependencies for virtual display
run: |
sudo apt-get update
sudo apt-get install -y xvfb libgbm-dev libgtk-3-0 libnss3 libasound2t64 libxss1 libatk-bridge2.0-0 libatk1.0-0

# Cache the auto-downloaded runtime dependencies (func, dotnet, node)
# so subsequent runs don't re-download ~500MB each time.
- name: Cache Logic Apps runtime dependencies
uses: actions/cache@v4
with:
path: ~/.azurelogicapps/dependencies
key: la-runtime-deps-${{ runner.os }}-v1
restore-keys: |
la-runtime-deps-${{ runner.os }}-
# Save even when tests fail so deps are available on next run
save-always: true

- name: Run VS Code Extension E2E tests
run: xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" node apps/vs-code-designer/src/test/ui/run-e2e.js
env:
# Run all phases (4.1 workspace creation through 4.7 smoke tests)
E2E_MODE: full
# Increase Node memory for CI
NODE_OPTIONS: --max-old-space-size=4096
# Set TEMP so screenshot paths are predictable on Linux
# (process.env.TEMP is undefined on Ubuntu, causing fallback to cwd)
TEMP: ${{ runner.temp }}

# Screenshots are written to $TEMP/test-resources/screenshots/ by both:
# - Explicit test screenshots (e.g., inlineJS-after-request-trigger.png)
# - ExTester auto-failure screenshots (captured on test failure)
# Upload ALL screenshots as artifacts so they're available for debugging
# after the pipeline finishes, even if the runner is recycled.
- name: Upload test screenshots (always)
uses: actions/upload-artifact@v4
if: always()
with:
name: vscode-e2e-screenshots
path: |
${{ runner.temp }}/test-resources/screenshots/
test-resources/screenshots/
if-no-files-found: ignore
retention-days: 30
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,10 @@ debug.log
# vscode e2e exTester artifacts
/apps/vs-code-designer/test-resources
test-resources
test-extensions
/apps/vs-code-designer/out
/apps/vs-code-designer/*.vsix
.vscode-test

# System Files
.DS_Store
Expand Down
7 changes: 7 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,13 @@ Each app and library has its own CLAUDE.md with specific guidance.
- `/libs/designer/src/lib/ui/settings/` - Operation settings
- `/libs/designer/src/lib/core/parsers/` - Workflow parsers

5. **VS Code Extension E2E Tests**:
- `/apps/vs-code-designer/src/test/ui/SKILL.md` - Complete test knowledge base (700+ lines)
- `/apps/vs-code-designer/src/test/ui/designerHelpers.ts` - Shared designer test helpers
- `/apps/vs-code-designer/src/test/ui/runHelpers.ts` - Shared debug/run test helpers
- `/apps/vs-code-designer/src/test/ui/run-e2e.js` - Test launcher (7 phases)
- `/apps/vs-code-designer/CLAUDE.md` - VS Code extension development guide with E2E test rules

### Debugging Tips

1. **Standalone Development**: Use `pnpm run start` for rapid development with hot reload
Expand Down
Loading
Loading