Skip to content

fix(vscode): Debugging regressions#9289

Open
lambrianmsft wants to merge 9 commits into
Azure:mainfrom
lambrianmsft:fix/vscode-extension-regressions
Open

fix(vscode): Debugging regressions#9289
lambrianmsft wants to merge 9 commits into
Azure:mainfrom
lambrianmsft:fix/vscode-extension-regressions

Conversation

@lambrianmsft

@lambrianmsft lambrianmsft commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Commit Type

  • feature - New functionality
  • fix - Bug fix
  • refactor - Code restructuring without behavior change
  • perf - Performance improvement
  • docs - Documentation update
  • test - Test-related changes
  • chore - Maintenance/tooling

Risk Level

  • Low - Minor changes, limited scope
  • Medium - Moderate changes, some user impact
  • High - Major changes, significant user/system impact

What & Why

Fixing debugging and start up regressions that users are experiencing. Debugging only happens once consistently and startup seems to download all the dependencies all the time.

Impact of Change

  • Users: Users should now be able to debug multiple times, create workflows from folder-opened Logic App projects, avoid startup dependency redownloads when dependencies are already available, and avoid fallback-safe GitHub version probe errors surfacing as startup notifications.
  • Developers: Adds and updates focused validation around VS Code dependency resolution, FuncCoreTools executable repair/readiness, create workspace/workflow validation, debug sequencing, and LSP extraction behavior.
  • System: Reduces redundant dependency downloads, repairs managed FuncCoreTools executable bits before runtime startup, improves debug task/process shutdown sequencing, and keeps optional dependency version lookup failures on pinned fallback paths instead of user-facing error notifications.

Test Plan

  • Unit tests added/updated
  • E2E tests added/updated
  • Manual testing completed
  • Tested in: Focused local unit tests, VS Code ExTester compile, and GitHub Actions PR checks on head f25db2c.

Contributors

Screenshots/Videos

lambrianmsft and others added 2 commits June 12, 2026 17:00
…g ordering, LSP, project types, workflow creation

Issue 1: Windows binary .exe resolution
- binariesExist() now tries .exe variant on Windows before declaring binary missing
- setNodeJsCommand() uses resolveNodeJsCommand() to find node.exe (mirrors func pattern)
- Prevents 429MB+ re-download on every VS Code startup for Windows users

Issue 2: F5 debug file locking on rapid stop/start
- Moved waitForPrevFuncTaskToStop() BEFORE build/publish steps in pickFuncProcessInternal
- Made stopDesignTimeApi() async, awaiting taskkill completion on Windows
- Prevents GenerateFunctionMetadata IOException on obj/Debug/net8/WorkerExtensions

Issue 3: LSP extraction EPERM + defensive path guards
- formatLockedFileError() now recognizes EPERM alongside EBUSY
- installLSPSDK() retries up to 3 times with 2s delay on locked file errors
- getAzureConnectorDetailsForLocalProject() validates projectPath before use

Issue 4: Codeful / custom code project type separation
- pickFuncProcessInternal guards build paths by project type (isCodefulProject)
- Removed invalidateCodefulSdkCacheIfNeeded from custom code build path
- Codeful projects only run publishCodefulProject, custom code only runs tryBuild

Issue 5: Create workflow crash without .code-workspace
- createWorkflow falls back to vscode.workspace.workspaceFolders when getWorkspaceRoot returns undefined
- Shows user-friendly error instead of path.basename(undefined) crash

Regression commits identified:
- 0d9fafd (Node 24 compat Azure#9246) introduced binariesExist binary path check without .exe
- 298310a (Codeful Public Preview Azure#9142) introduced Issues 2-5
- 4430048 (Azure#9155) contributed to Issue 1 via setNodeJsCommand without .exe

Fixes Azure#9271, Azure#9248, Azure#9244, Azure#9237

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Repair managed FuncCoreTools executable permissions for cached installs and make VS Code E2E runtime readiness assert executable nested binaries.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings June 15, 2026 21:18
@lambrianmsft lambrianmsft added the risk:medium Medium risk change with potential impact label Jun 15, 2026
@github-actions

github-actions Bot commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

🤖 AI PR Validation Report

PR Review Results

Thank you for your submission! Here's detailed feedback on your PR title and body compliance:

PR Title

  • Current: fix(vscode): Debugging regressions
  • Issue: No blocking issue. The title is concise and reasonably descriptive.
  • Recommendation: Optional: consider making it slightly more specific to the primary scope, e.g. fix(vscode): resolve debugging and startup regressions.

Commit Type

  • Properly selected (fix).
  • Only one commit type is checked, which is correct.

⚠️ Risk Level

  • The PR body selected Medium, and the label is also risk:medium, so this matches.
  • Based on the diff, Medium is appropriate, though there are a lot of cross-cutting runtime and workflow changes.

What & Why

  • Current: Fixing debugging and start up regressions that users are experiencing. Debugging only happens once consistently and startup seems to download all the dependencies all the time.
  • Issue: Acceptable, but a bit broad.
  • Recommendation: If you want stronger PR hygiene, briefly enumerate the two main regressions and the intended behavior change.

Impact of Change

  • The section is filled out and clearly describes user, developer, and system impact.
  • Recommendation: No required changes.

Test Plan

  • Unit tests and E2E tests are both present in the diff, so the test plan passes.
  • Manual testing is also listed, and the body includes a concrete validation note.

Contributors

  • Blank, but that is allowed.
  • Recommendation: Optional credit can be added if PM/design/other contributors were involved.

Screenshots/Videos

  • Blank, which is acceptable since this does not appear to be a visual-only change.

Summary Table

Section Status Recommendation
Title Optional: mention debugging + startup regressions explicitly
Commit Type None
Risk Level Matches label and body
What & Why Optional: add a bit more specificity
Impact of Change None
Test Plan None
Contributors Optional credit only
Screenshots/Videos None

Overall: this PR passes. The advised risk level remains medium, matching the submitter's selection and the label. No corrections are required, though a slightly more specific title and a more concise “What & Why” would improve clarity.


Last updated: Thu, 18 Jun 2026 18:54:21 GMT

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR targets VS Code extension debugging/startup regressions by improving process shutdown sequencing and hardening auto-downloaded runtime dependency detection/permissions, so repeated debug sessions work reliably and dependencies aren’t unnecessarily re-downloaded.

Changes:

  • Make design-time API shutdown awaitable (including Windows taskkill) to avoid file-lock/cleanup races that break subsequent debug runs.
  • Improve runtime dependency validation/resolution (FuncCoreTools/node/dotnet) including execute-permission repair and Windows .exe path fallback.
  • Expand E2E/unit coverage around the updated dependency readiness and workflow/project discovery behaviors.

Reviewed changes

Copilot reviewed 38 out of 38 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
apps/vs-code-designer/src/test/ui/runHelpers.ts Add FuncCoreTools permission diagnostics for runtime readiness troubleshooting.
apps/vs-code-designer/src/test/ui/run-e2e.js Harden E2E dependency readiness by checking/repairing executable permissions (incl. gozip).
apps/vs-code-designer/src/test/ui/designerHelpers.ts Validate both func + gozip executability and prefer func candidates when selecting a path.
apps/vs-code-designer/src/main.ts Await async shutdown of all design-time APIs during extension deactivation.
apps/vs-code-designer/src/app/utils/nodeJs/nodeJsVersion.ts Improve Windows Node binary resolution by trying .exe variants.
apps/vs-code-designer/src/app/utils/nodeJs/test/nodeJsVersion.test.ts Add unit tests for Windows node vs node.exe resolution behavior.
apps/vs-code-designer/src/app/utils/languageServerProtocol.ts Retry removal on locked-file errors (EBUSY/EPERM) and export locked-file formatting.
apps/vs-code-designer/src/app/utils/funcCoreTools/funcVersion.ts Add FuncCoreTools permission repair/validation and ensure managed binaries are executable.
apps/vs-code-designer/src/app/utils/funcCoreTools/test/funcVersion.test.ts Add tests for permission repair and managed FuncCoreTools executability validation.
apps/vs-code-designer/src/app/utils/devContainerUtils.ts Add sync devcontainer detection for use in sync dependency checks.
apps/vs-code-designer/src/app/utils/codeless/startDesignTimeApi.ts Make stop APIs async and await Windows taskkill completion to reduce lock races.
apps/vs-code-designer/src/app/utils/codeless/common.ts Guard against missing projectPath in Azure connector details logic with telemetry.
apps/vs-code-designer/src/app/utils/codeless/test/startDesignTimeApi.test.ts Add coverage for awaiting Windows taskkill callbacks before resolving stop.
apps/vs-code-designer/src/app/utils/codeless/test/common.test.ts Add test for undefined projectPath handling.
apps/vs-code-designer/src/app/utils/binaries.ts Improve install/validate behavior: permission repair, devcontainer sync checks, .exe fallback, and cleaner GitHub fallback paths.
apps/vs-code-designer/src/app/utils/test/languageServerProtocol.test.ts Add tests for EPERM detection and retry behavior during LSP install.
apps/vs-code-designer/src/app/utils/test/binaries.test.ts Add tests for Windows .exe fallback, sync existence checks, and GitHub lookup fallback telemetry.
apps/vs-code-designer/src/app/commands/pickFuncProcess.ts Stop prior func task before build/publish and split codeful vs custom-code build paths.
apps/vs-code-designer/src/app/commands/nodeJs/validateNodeJsIsLatest.ts Fix async dependency existence check by awaiting binariesExist.
apps/vs-code-designer/src/app/commands/nodeJs/test/validateNodeJsIsLatest.test.ts Add tests ensuring GitHub latest checks only happen when appropriate.
apps/vs-code-designer/src/app/commands/initProjectForVSCode/initScriptProjectStep.ts Use sync binaries existence to avoid async misuse during task creation.
apps/vs-code-designer/src/app/commands/initProjectForVSCode/initProjectStep.ts Use sync binaries existence to avoid async misuse during task creation.
apps/vs-code-designer/src/app/commands/initProjectForVSCode/initDotnetProjectStep.ts Use sync binaries existence to avoid async misuse during task creation.
apps/vs-code-designer/src/app/commands/funcCoreTools/validateFuncCoreToolsIsLatest.ts Await design-time API shutdown before updating func tools.
apps/vs-code-designer/src/app/commands/funcCoreTools/validateFuncCoreToolsInstalled.ts Validate managed FuncCoreTools nested executability before/after invoking func.
apps/vs-code-designer/src/app/commands/funcCoreTools/test/validateFuncCoreToolsInstalled.test.ts Add coverage for managed nested executability gating behavior.
apps/vs-code-designer/src/app/commands/dotnet/validateDotNetIsLatest.ts Fix async dependency existence check by awaiting binariesExist.
apps/vs-code-designer/src/app/commands/dotnet/test/validateDotNetIsLatest.test.ts Add tests ensuring latest checks are gated by binaries existence.
apps/vs-code-designer/src/app/commands/createWorkflow/createWorkflow.ts Improve project root discovery across multi-folder workspaces; throw user-friendly error when absent.
apps/vs-code-designer/src/app/commands/createWorkflow/createLogicAppWorkflow.ts Allow workflow creation in folder-opened projects (no workspace file required).
apps/vs-code-designer/src/app/commands/createWorkflow/test/createWorkflow.test.ts Add tests for multi-folder fallback and no-project error behavior.
apps/vs-code-designer/src/app/commands/createWorkflow/test/createLogicAppWorkflow.test.ts Update tests to reflect folder-opened workflow creation support.
apps/vs-code-designer/src/app/commands/createProject/createCustomCodeProjectSteps/initCustomCodeScriptProjectStep.ts Use sync binaries existence for task env selection.
apps/vs-code-designer/src/app/commands/createProject/createCustomCodeProjectSteps/initCustomCodeProjectStep.ts Use sync binaries existence for task env selection.
apps/vs-code-designer/src/app/commands/createNewCodeProject/CodeProjectBase/CreateLogicAppVSCodeContents.ts Use sync binaries existence when generating tasks for new codeful projects.
apps/vs-code-designer/src/app/commands/createNewCodeProject/CodeProjectBase/test/CreateLogicAppVSCodeContents.test.ts Update mocks for new sync binaries existence helper.
apps/vs-code-designer/src/app/commands/buildCustomCodeFunctionsProject.ts Remove codeful SDK cache invalidation from build path.
apps/vs-code-designer/src/app/commands/test/pickFuncProcess.test.ts Add tests for codeful/custom-code branching and waiting for prior func task to stop.

Comment on lines +661 to +667
function execTaskkill(pid: number): Promise<void> {
return new Promise((resolve) => {
cp.exec(`taskkill /pid ${pid} /t /f`, () => {
resolve();
});
});
}
Comment on lines +93 to +95
const candidates = ext.nodeJsCliPath.toLowerCase().endsWith('.exe')
? [ext.nodeJsCliPath, `${ext.nodeJsCliPath}.exe`]
: [`${ext.nodeJsCliPath}.exe`, ext.nodeJsCliPath];
lambrianmsft and others added 7 commits June 15, 2026 14:30
Normalize Windows-style project paths before deriving the Logic App name so Linux CI and non-workspace create workflow paths agree.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Cover isDevContainerWorkspaceSync so changed-file coverage stays above the PR gate.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Allow hyphenated workflow names in the create workspace webview validation path, expand validator/message coverage, and harden LSP SDK extraction against transient Windows EPERM locks. Add a manual Windows ExTester repro mode for real LSP extraction ACL failures.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep the consolidated hyphenated workflow-name coverage as a validation assertion without requiring the shared pre-creation form to have every required field populated.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-validated risk:medium Medium risk change with potential impact

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants