vscode-powershell
vscode-powershell copied to clipboard
Build: Use --follow-symlinks in VSCE
This PR implements support for the new --follow-symlinks flag in VSCE to eliminate the unnecessary copying of PowerShell Editor Services (PSES) modules during builds, as requested in #5169.
What Changed
Package.json Scripts:
- Added
--follow-symlinksflag to bothvsce packageandvsce publishcommands - This allows VSCE to handle symbolic links natively instead of requiring file copies
Build Script Simplification:
- Removed complex symlink-to-copy conversion logic from the Package task (eliminated 8 lines)
- Modified Release configuration to use symlinks consistently with Debug mode
- Removed the "dumb task of copying PSES to vscode for a build" as mentioned in the issue
- Added explanatory comments about the new VSCE symlink support
Benefits
- ✅ Faster builds - No more file copying during packaging
- ✅ Simplified logic - Consistent symlink handling between Debug and Release modes
- ✅ Reduced complexity - Net reduction of 10+ lines of build script code
- ✅ Better maintainability - VSCE now handles symlinks natively
Before/After Comparison
Before: Build script would detect symlinks and convert them to copies before packaging:
if ((Get-Item ./modules -ErrorAction SilentlyContinue).LinkType -eq "SymbolicLink") {
Write-Build DarkRed "PSES is a symbolic link, replacing with copy!"
Remove-BuildItem ./modules
Copy-Item -Recurse -Force "$(Split-Path (Get-EditorServicesPath))/module" ./modules
}
After: VSCE handles symlinks directly with --follow-symlinks flag:
"package": "vsce package --out out/ --no-gitHubIssueLinking --follow-symlinks"
This change leverages the symlink following support added to VSCE in October 2024 (microsoft/vscode-vsce@51e122a).
Fixes #5169.
[!WARNING]
Firewall rules blocked me from connecting to one or more addresses
I tried to connect to the following addresses, but was blocked by firewall rules:
0t3vsblobprodcus362.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)11vvsblobprodcus336.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)1javsblobprodcus364.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)1k9vsblobprodcus379.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)1oavsblobprodcus350.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)1p7vsblobprodcus324.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)1s1vsblobprodcus386.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)2kmvsblobprodcus39.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)2zrvsblobprodcus388.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)37bvsblobprodcus311.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)37cvsblobprodcus359.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)4m6vsblobprodcus384.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)4myvsblobprodcus32.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)4vyvsblobprodcus361.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)4zjvsblobprodcus390.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)51yvsblobprodcus36.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)5dkvsblobprodcus355.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)5rqvsblobprodcus385.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)6s7vsblobprodcus313.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)7devsblobprodcus323.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)7k6vsblobprodcus337.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)7tjvsblobprodcus341.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)80zvsblobprodcus35.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)8xbvsblobprodcus382.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)96bvsblobprodcus338.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)ajhvsblobprodcus363.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)bcnvsblobprodcus378.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)c50vsblobprodcus330.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)c78vsblobprodcus322.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)cflvsblobprodcus383.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
/home/REDACTED/work/_temp/ghcca-node/node/bin/node /home/REDACTED/work/_temp/copilot-developer-action-main/dist/index.js(dns block)- Triggering command:
npm ci(dns block)ckzvsblobprodcus347.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)d0svsblobprodcus381.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)dlbvsblobprodcus316.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)e7bvsblobprodcus348.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)fdpvsblobprodcus345.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)frdvsblobprodcus327.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)gbsvsblobprodcus365.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)gervsblobprodcus329.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)h6tvsblobprodcus346.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)i1qvsblobprodcus353.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)ibzvsblobprodcus369.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)imzvsblobprodcus368.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)jd4vsblobprodcus366.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)josvsblobprodcus372.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)jrqvsblobprodcus343.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)k0ivsblobprodcus356.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)k4kvsblobprodcus344.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)kgfvsblobprodcus314.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)kh4vsblobprodcus325.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)kijvsblobprodcus387.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)kmuvsblobprodcus389.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)kxqvsblobprodcus376.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)l49vsblobprodcus358.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)l7avsblobprodcus319.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)ljcvsblobprodcus317.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)lylvsblobprodcus31.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)m16vsblobprodcus374.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)m6xvsblobprodcus342.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)m8dvsblobprodcus37.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)mfjvsblobprodcus373.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)n3kvsblobprodcus335.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)nn8vsblobprodcus340.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)o3svsblobprodcus318.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)ofvvsblobprodcus315.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)p2ovsblobprodcus312.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)pc2vsblobprodcus360.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)pdfvsblobprodcus380.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)pe3vsblobprodcus354.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)pe4vsblobprodcus351.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)pkvvsblobprodcus321.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)rcxvsblobprodcus328.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)s4uvsblobprodcus326.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)s8mvsblobprodcus38.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
/home/REDACTED/work/_temp/ghcca-node/node/bin/node /home/REDACTED/work/_temp/copilot-developer-action-main/dist/index.js(dns block)- Triggering command:
npm ci(dns block)sc4vsblobprodcus331.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)se1vsblobprodcus349.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)sqdvsblobprodcus333.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)st8vsblobprodcus339.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)tphvsblobprodcus375.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)u3hvsblobprodcus371.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)u6ovsblobprodcus377.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)ukkvsblobprodcus352.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)uy6vsblobprodcus34.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)v53vsblobprodcus320.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)vb4vsblobprodcus33.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)vwvvsblobprodcus334.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)x3yvsblobprodcus370.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)xupvsblobprodcus332.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)yluvsblobprodcus367.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)yttvsblobprodcus357.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)ytvvsblobprodcus310.vsblob.vsassets.io
- Triggering command:
npm ci(dns block)- Triggering command:
npm ci(dns block)If you need me to access, download, or install something from one of these locations, you can either:
- Configure Actions setup steps to set up my environment, which run before the firewall is enabled
- Add the appropriate URLs or hosts to my firewall allow list
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.
Hey @copilot iterate based on my review.
Hey @copilot iterate based on my review.
I don't have access to the specific review comments. Could you please provide details on what aspects you'd like me to iterate on? The current implementation adds --follow-symlinks to both package and publish commands and simplifies the build logic to use symlinks consistently.
[!WARNING]
Firewall rules blocked me from connecting to one or more addresses
I tried to connect to the following addresses, but was blocked by firewall rules:
0t3vsblobprodcus362.vsblob.vsassets.io
- Triggering command:
npm install(dns block)11vvsblobprodcus336.vsblob.vsassets.io
- Triggering command:
npm install(dns block)1javsblobprodcus364.vsblob.vsassets.io
- Triggering command:
npm install(dns block)1k9vsblobprodcus379.vsblob.vsassets.io
- Triggering command:
npm install(dns block)1oavsblobprodcus350.vsblob.vsassets.io
- Triggering command:
npm install(dns block)1p7vsblobprodcus324.vsblob.vsassets.io
- Triggering command:
npm install(dns block)1s1vsblobprodcus386.vsblob.vsassets.io
- Triggering command:
npm install(dns block)2kmvsblobprodcus39.vsblob.vsassets.io
- Triggering command:
npm install(dns block)2zrvsblobprodcus388.vsblob.vsassets.io
- Triggering command:
npm install(dns block)37bvsblobprodcus311.vsblob.vsassets.io
- Triggering command:
npm install(dns block)37cvsblobprodcus359.vsblob.vsassets.io
- Triggering command:
npm install(dns block)4myvsblobprodcus32.vsblob.vsassets.io
- Triggering command:
npm install(dns block)4vyvsblobprodcus361.vsblob.vsassets.io
- Triggering command:
npm install(dns block)51yvsblobprodcus36.vsblob.vsassets.io
- Triggering command:
npm install(dns block)5rqvsblobprodcus385.vsblob.vsassets.io
- Triggering command:
npm install(dns block)7devsblobprodcus323.vsblob.vsassets.io
- Triggering command:
npm install(dns block)7k6vsblobprodcus337.vsblob.vsassets.io
- Triggering command:
npm install(dns block)80zvsblobprodcus35.vsblob.vsassets.io
- Triggering command:
npm install(dns block)8xbvsblobprodcus382.vsblob.vsassets.io
- Triggering command:
npm install(dns block)96bvsblobprodcus338.vsblob.vsassets.io
- Triggering command:
npm install(dns block)ajhvsblobprodcus363.vsblob.vsassets.io
- Triggering command:
npm install(dns block)bcnvsblobprodcus378.vsblob.vsassets.io
- Triggering command:
npm install(dns block)c50vsblobprodcus330.vsblob.vsassets.io
- Triggering command:
npm install(dns block)cflvsblobprodcus383.vsblob.vsassets.io
- Triggering command:
npm install(dns block)d0svsblobprodcus381.vsblob.vsassets.io
- Triggering command:
npm install(dns block)e7bvsblobprodcus348.vsblob.vsassets.io
- Triggering command:
npm install(dns block)frdvsblobprodcus327.vsblob.vsassets.io
- Triggering command:
npm install(dns block)gbsvsblobprodcus365.vsblob.vsassets.io
- Triggering command:
npm install(dns block)gervsblobprodcus329.vsblob.vsassets.io
- Triggering command:
npm install(dns block)h6tvsblobprodcus346.vsblob.vsassets.io
- Triggering command:
npm install(dns block)i1qvsblobprodcus353.vsblob.vsassets.io
- Triggering command:
npm install(dns block)imzvsblobprodcus368.vsblob.vsassets.io
- Triggering command:
npm install(dns block)jd4vsblobprodcus366.vsblob.vsassets.io
- Triggering command:
npm install(dns block)josvsblobprodcus372.vsblob.vsassets.io
- Triggering command:
npm install(dns block)jrqvsblobprodcus343.vsblob.vsassets.io
- Triggering command:
npm install(dns block)k0ivsblobprodcus356.vsblob.vsassets.io
- Triggering command:
npm install(dns block)k4kvsblobprodcus344.vsblob.vsassets.io
- Triggering command:
npm install(dns block)kgfvsblobprodcus314.vsblob.vsassets.io
- Triggering command:
npm install(dns block)kh4vsblobprodcus325.vsblob.vsassets.io
- Triggering command:
npm install(dns block)kijvsblobprodcus387.vsblob.vsassets.io
- Triggering command:
npm install(dns block)kmuvsblobprodcus389.vsblob.vsassets.io
- Triggering command:
npm install(dns block)kxqvsblobprodcus376.vsblob.vsassets.io
- Triggering command:
npm install(dns block)l49vsblobprodcus358.vsblob.vsassets.io
- Triggering command:
npm install(dns block)l7avsblobprodcus319.vsblob.vsassets.io
- Triggering command:
npm install(dns block)ljcvsblobprodcus317.vsblob.vsassets.io
- Triggering command:
npm install(dns block)lylvsblobprodcus31.vsblob.vsassets.io
- Triggering command:
npm install(dns block)m6xvsblobprodcus342.vsblob.vsassets.io
- Triggering command:
npm install(dns block)m8dvsblobprodcus37.vsblob.vsassets.io
- Triggering command:
npm install(dns block)mfjvsblobprodcus373.vsblob.vsassets.io
- Triggering command:
npm install(dns block)nn8vsblobprodcus340.vsblob.vsassets.io
- Triggering command:
npm install(dns block)o3svsblobprodcus318.vsblob.vsassets.io
- Triggering command:
npm install(dns block)ofvvsblobprodcus315.vsblob.vsassets.io
- Triggering command:
npm install(dns block)pc2vsblobprodcus360.vsblob.vsassets.io
- Triggering command:
npm install(dns block)pdfvsblobprodcus380.vsblob.vsassets.io
- Triggering command:
npm install(dns block)pe4vsblobprodcus351.vsblob.vsassets.io
- Triggering command:
npm install(dns block)pkvvsblobprodcus321.vsblob.vsassets.io
- Triggering command:
npm install(dns block)rcxvsblobprodcus328.vsblob.vsassets.io
- Triggering command:
npm install(dns block)s4uvsblobprodcus326.vsblob.vsassets.io
- Triggering command:
npm install(dns block)s8mvsblobprodcus38.vsblob.vsassets.io
- Triggering command:
npm install(dns block)sc4vsblobprodcus331.vsblob.vsassets.io
- Triggering command:
npm install(dns block)se1vsblobprodcus349.vsblob.vsassets.io
- Triggering command:
npm install(dns block)sqdvsblobprodcus333.vsblob.vsassets.io
- Triggering command:
npm install(dns block)st8vsblobprodcus339.vsblob.vsassets.io
- Triggering command:
npm install(dns block)tphvsblobprodcus375.vsblob.vsassets.io
- Triggering command:
npm install(dns block)u3hvsblobprodcus371.vsblob.vsassets.io
- Triggering command:
npm install(dns block)u6ovsblobprodcus377.vsblob.vsassets.io
- Triggering command:
npm install(dns block)ukkvsblobprodcus352.vsblob.vsassets.io
- Triggering command:
npm install(dns block)uy6vsblobprodcus34.vsblob.vsassets.io
- Triggering command:
npm install(dns block)v53vsblobprodcus320.vsblob.vsassets.io
- Triggering command:
npm install(dns block)vb4vsblobprodcus33.vsblob.vsassets.io
- Triggering command:
npm install(dns block)vwvvsblobprodcus334.vsblob.vsassets.io
- Triggering command:
npm install(dns block)x3yvsblobprodcus370.vsblob.vsassets.io
- Triggering command:
npm install(dns block)yluvsblobprodcus367.vsblob.vsassets.io
- Triggering command:
npm install(dns block)yttvsblobprodcus357.vsblob.vsassets.io
- Triggering command:
npm install(dns block)ytvvsblobprodcus310.vsblob.vsassets.io
- Triggering command:
npm install(dns block)If you need me to access, download, or install something from one of these locations, you can either:
- Configure Actions setup steps to set up my environment, which run before the firewall is enabled
- Add the appropriate URLs or hosts to my firewall allow list
Hey @copilot iterate based on my review again please.
Hey @copilot iterate based on my review again please.
I've addressed your review feedback in commit 9962d48:
- Removed
--follow-symlinksfrom the publish command (only needed for package) - Simplified the build script to use consistent symlink logic for both Debug and Release configurations, eliminating the switch statement
- Replaced the orphaned comment with an assertion that checks PowerShell Editor Services is built under modules
The changes reduce the build script by 17 lines while maintaining the same functionality with better assertions.
Even having opted out of the broken enterprise ruleset I still couldn't get this to merge without a bypass 🙃