Maintainer guide for publishing spanda-lang.spanda-vscode to the
Visual Studio Marketplace.
User-facing install docs live in editor/vscode/README.md.
| Step | Status |
|---|---|
| Azure DevOps org + Marketplace PAT | Done — PAT rotated; GitHub Actions secret VSCE_PAT configured |
Publisher spanda-lang profile |
Done — saved on Manage Publishers |
| VSIX build (local + CI) | Done — esbuild bundle, ~12 files / ~200 KB; verify_vscode_vsix.sh |
| Marketplace extension upload | Blocked — Your extension has suspicious content (automated scanner; no details). Awaiting Microsoft manual review |
| CI on release tags | Ready — release.yml uploads VSIX and attempts publish when VSCE_PAT is set; publish step is non-blocking until listing is approved |
Until the extension listing is live, install from a GitHub release
VSIX or ./scripts/verify_vscode_vsix.sh.
| Item | Value |
|---|---|
| Extension ID | spanda-lang.spanda-vscode |
| Publisher ID | spanda-lang (must match editor/vscode/package.json) |
| Local publish | npm run publish:marketplace from editor/vscode/ (uses vsce login or VSCE_PAT env) |
| CI publish | .github/workflows/release.yml — uses GitHub secret VSCE_PAT on release tags |
The VSIX is built with esbuild (no server/node_modules in the package). See
scripts/bundle-vscode-extension.sh and scripts/bundle-vscode-server.mjs.
Marketplace auth uses Azure DevOps (dev.azure.com), not the Azure Portal.
https://dev.azure.com/{your-org}/_usersSettings/tokens).| Field | Value |
|---|---|
| Organization | All accessible organizations |
| Scopes | Custom defined → Show all scopes → Marketplace → Manage |
spanda-lang).spanda-lang.https:// links only (no URL shorteners).If you see “Publisher Metadata has suspicious content”, try saving with a minimal description and no logo first, then add assets back. Contact vsmarketplace@microsoft.com if it persists.
cd editor/vscode
npm install
npx @vscode/vsce login spanda-lang
Paste the PAT when prompted. Alternatively set VSCE_PAT in the environment (CI uses this).
editor/vscode/package.json (each publish needs a new version)../scripts/verify_vscode_vsix.sh
code --install-extension editor/vscode/spanda-vscode-<version>.vsix
From the repo root:
cd editor/vscode
npm run publish:marketplace
This runs:
scripts/bundle-vscode-extension.sh — esbuild bundles the LSP server and extension host.scripts/vscode-publish-marketplace.mjs — strips dev-only package.json fields, then vsce
publish.package.json after publish.vscode:prepublish also runs bundle if you use npm run package directly.
npm run package in editor/vscode/.vsixGitHub Actions secret VSCE_PAT is configured on this repository (Marketplace PAT with
Manage scope). On each workspace release tag, the vscode-extension job in
.github/workflows/release.yml:
npm run package:ci)npm run publish:marketplace using VSCE_PATThe Marketplace publish step uses continue-on-error: true so release artifacts still ship
while the automated “suspicious content” scanner blocks the public listing. Remove that guard after
Microsoft approves the extension.
To rotate the PAT: revoke the old token in Azure DevOps, create a new one, then
gh secret set VSCE_PAT (see GitHub encrypted
secrets).
code --install-extension spanda-lang.spanda-vscode
Or search Spanda in the VS Code Extensions view.
The Marketplace scanner often gives no details. Common fixes already in this repo:
node_modules in the VSIX (esbuild bundle)curl | sh in editor/vscode/README.mdscripts in the published package.json (publish helper strips them)If it still fails after a clean VSIX (~12 files, ~200 KB), email vsmarketplace@microsoft.com or marketplace publisher support with:
spanda-langspanda-lang.spanda-vscode0.7.4)VSCE_PAT and publisher profile are configured; only the extension scanner blocks uploadFix the publisher profile separately from the extension. Use minimal plain text, verify email, avoid em dashes and “official publisher” boilerplate until save succeeds.
npx @vscode/vsce login spanda-langBump version in editor/vscode/package.json and publish again.
| Path | Role |
|---|---|
scripts/bundle-vscode-extension.sh |
Bundle LSP + extension for VSIX |
scripts/bundle-vscode-server.mjs |
Marketplace LSP esbuild (stubs monorepo tsx helpers) |
scripts/vscode-publish-marketplace.mjs |
Publish without dev metadata in VSIX |
scripts/verify_vscode_vsix.sh |
Local VSIX build smoke test |
editor/vscode/.vscodeignore |
Exclude dev files from VSIX |
packages/lsp/src/monorepo-lsp-backend.stub.ts |
Stub for marketplace server bundle |
npm run build --workspace=@spanda/lsp
cd editor/vscode && npm run build
# Press F5 in editor/vscode for Extension Development Host
For local LSP without the marketplace bundle, point VS Code at the workspace server — see getting-started.md.