fix(vscode): Debugging regressions#9289
Open
lambrianmsft wants to merge 9 commits into
Open
Conversation
…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>
Contributor
🤖 AI PR Validation ReportPR Review ResultsThank you for your submission! Here's detailed feedback on your PR title and body compliance:✅ PR Title
✅ Commit Type
|
| 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
Contributor
There was a problem hiding this comment.
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
.exepath 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]; |
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Commit Type
Risk Level
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
Test Plan
Contributors
Screenshots/Videos