Skip to content

Fix Windows VSIX jobs: shell-spawn npm and CRLF-pin the VSIX legal files (unblocks v0.37 release)#346

Merged
abdushakoor12 merged 1 commit into
mainfrom
fix/vsix-windows-npm-and-legal-pins
Jul 22, 2026
Merged

Fix Windows VSIX jobs: shell-spawn npm and CRLF-pin the VSIX legal files (unblocks v0.37 release)#346
abdushakoor12 merged 1 commit into
mainfrom
fix/vsix-windows-npm-and-legal-pins

Conversation

@abdushakoor12

Copy link
Copy Markdown
Collaborator

TLDR

Fixes the failure that stopped the v0.37.2 release at the Windows VSIX jobs — licenses:check spawning npm in a way Windows cannot execute — and defuses the CRLF checkout landmine sitting directly behind it in the same jobs.

What Was Added?

  • VSIX_LEGAL_FILES in scripts/verify_release_attribution.py: VSCODE-DISTRIBUTION-LICENSE, VSCODE-DEPENDENCY-LICENSES, and vscode-license-manifest.json join the checkout byte-stability guard added in Fix v0.36/v0.37 release failures: CRLF-proof byte-verified typeshed index + native linux-arm64 wheel build #344, since the VSIX pipeline byte-compares/ships them (update-dependency-licenses.mjs --check requires the committed carrier + manifest to equal regenerated LF bytes; the distribution license is packed verbatim into the VSIX as LICENSE.txt).
  • .gitattributes -text pins for those three files.

What Was Changed or Deleted?

vscode-extension/scripts/update-dependency-licenses.mjs spawns npm.cmd through a shell on Windows (static arguments only). On win32 npm is a .cmd, which Node cannot spawn directly — execFileSync("npm", …) failed with spawnSync npm ENOENT, killing both win32 VSIX jobs in the v0.37.2 release run (first-ever execution of this check on Windows; it was added after v0.35.0 with the VSIX license carrier work).

How Do The Automated Tests Prove It Works?

  • Guard proven test-first: with only the guard extension applied, python3 scripts/verify_release_attribution.py --policy-only fails with VSCODE-DISTRIBUTION-LICENSE is byte-verified but not pinned '-text' in .gitattributes; with the pins it passes. CI runs that exact command on every PR.
  • npm run licenses:check still reports VS Code production dependency licenses are exact on POSIX after the spawn change, and eslint passes.
  • The Windows spawn path itself is proven by the next tagged release run (the win32 VSIX jobs only exist in release.yml).

Breaking Changes

  • None

…X legal files

The win32 VSIX jobs in the v0.37.2 release died in licenses:check because
update-dependency-licenses.mjs spawned 'npm' via execFileSync — on Windows
npm is npm.cmd and needs a shell, so the spawn failed ENOENT. Spawn
npm.cmd through a shell on win32 (static arguments only).

Behind that spawn the same jobs would then have hit the CRLF checkout
problem fixed for the typeshed index in #344: the --check mode
byte-compares the committed VSCODE-DEPENDENCY-LICENSES and
vscode-license-manifest.json against regenerated LF bytes, and
VSCODE-DISTRIBUTION-LICENSE ships verbatim into the VSIX as LICENSE.txt.
Pin all three -text and add them to the checkout byte-stability guard so
an unpinned byte-verified file keeps failing PR CI, not the release.
@abdushakoor12
abdushakoor12 merged commit c48fa31 into main Jul 22, 2026
40 of 41 checks passed
@abdushakoor12
abdushakoor12 deleted the fix/vsix-windows-npm-and-legal-pins branch July 22, 2026 14:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant