Skip to content

package: hack/vsix makes the VSIX, and vsce goes - #12

Merged
aledbf merged 1 commit into
mainfrom
vsix-without-vsce
Nov 14, 2026
Merged

aledbf merged 1 commit into
mainfrom
vsix-without-vsce

Conversation

@aledbf

@aledbf aledbf commented Nov 14, 2026

Copy link
Copy Markdown
Member

The Marketplace refuses an extension that uses a proposed API, so a release here is a GitHub release. All this repository used vsce for was a zip of five files plus its XML manifest. That came with roughly half the lockfile and the minimatch override from #9.

What changes

  • hack/vsix (Go, standard library only) writes the VSIX from the files task package names: extension.vsixmanifest, [Content_Types].xml and extension/…, with the README as readme.md, the way vsce names it. Every entry has one fixed time and the entries are in a fixed order, so the same files give the same bytes. That means a tag's VSIX can be built again and checked against the digest spin pins. It refuses: package.json not first, a missing file, a file type with no content type, a path outside the checkout, main or icon not packaged, and no LICENSE.
  • task package runs it, and task test runs go test ./hack/.... publish:github still runs task package and is unchanged.
  • Removed: @vscode/vsce, the package script, .vscodeignore (the file list lives in the task now), the vsce-sign allowBuilds entry and the minimatch override. Lockfile: 274 packages down to 141.
  • The README's two relative links are now absolute, as vsce used to rewrite them. VS Code shows the packaged README with no repository to resolve a relative link against.

Checked

  • Against the released v2.1.0 VSIX, built by vsce: lib/extension.js, LICENSE.txt, icon.png and readme.md are byte-identical. package.json differs only by the vsce dependency and script this PR removes.
  • Two task package runs give the same sha256.
  • VS Code 1.146.0 installs it (--install-extension into scratch --extensions-dir/--user-data-dir) and lists spin-stack.spinbox-remote@2.1.0.
  • Tests: a plant was caught by the tests in each case — no sort, time.Now() as entry time, no XML escaping, and no check that main/icon are packaged.
  • task ci passes locally.

🤖 Generated with Claude Code

The Marketplace refuses an extension that uses a proposed API, so all
this repository needed of vsce was a zip of five files and its XML
manifest, at the price of half the lockfile (274 packages to 141) and the
minimatch override. hack/vsix writes the same layout, with every entry at
one fixed time and in a fixed order, so a tag's VSIX can be built again
to the digest spin pins.

The README's links are absolute, as vsce rewrote them: VS Code shows the
packaged README with no repository to resolve a relative link against.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@aledbf
aledbf merged commit 2504049 into main Nov 14, 2026
1 check passed
@aledbf
aledbf deleted the vsix-without-vsce branch November 14, 2026 05:06
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