Skip to content

feat(ci): publish VS Code extensions with the registries' own CLIs - #99

Merged
jimisola merged 2 commits into
mainfrom
fix/vscode-publish-official-clis
Aug 23, 2026
Merged

feat(ci): publish VS Code extensions with the registries' own CLIs#99
jimisola merged 2 commits into
mainfrom
fix/vscode-publish-official-clis

Conversation

@jimisola

Copy link
Copy Markdown
Member

Part of #98.

Description

Replaces HaaLeo/publish-vscode-extension with the registries' own CLIs — vsce (Microsoft) and ovsx (Eclipse Foundation).

The forcing issue is authentication. Azure DevOps retires global PATs on 2026-12-01, and the action declares pat as required: true with no Entra ID support — it cannot follow us onto the thing that replaces the token it depends on. vsce 3.9.2 already has --azure-credential.

Two other problems resolve as a side effect:

  • The action still declares using: 'node20', which is what emits the "Node 20 is being deprecated" warning on every publish. A run: step uses the job's own Node — no using: to deprecate.
  • Its last commit was 2025-06-12, 14 months ago, with no upstream issue about node24. Both CLIs shipped a release this month.

What changes

Before After
Open VSX HaaLeo@v2.0.0 npx --no-install ovsx publish
Marketplace HaaLeo@v2.0.0 npx --no-install vsce publish --packagePath
Marketplace auth VSCE_PAT only VSCE_PAT, or Entra via new azure-credential input
Dry-run action's dryRun explicit step that fails if no VSIX was produced

Auth is unchanged in this PR. azure-credential defaults to false, so publishing keeps working exactly as today; flipping it is one line once the Azure side exists. Deliberately not switching now — that would break releases until Entra is set up.

--no-install is load-bearing: both CLIs come from the extension's devDependencies via the npm ci above, so a missing one fails clearly instead of silently fetching an unpinned version from the network into a job holding publish credentials.

Open VSX is Eclipse-run and unaffected by any of this — OVSX_PAT stays a PAT.

Companion

reqstool-vscode needs ovsx added to devDependencies (@vscode/vsce is already there at 3.9.2). Merge that first, or the first publish after this fails on --no-install.

Checklist

Test plan

yamllint, zizmor and check-permissions.py clean locally — every interpolation goes through env:, so there is no template-injection surface in the new run: steps. vsce publish --packagePath and --azure-credential were verified against vsce@3.9.2's actual --help output, not assumed.

The real test is a reqstool-vscode release with dry-run first, then a real one. I have not dispatched either — the last publish path change this week broke twice in ways only a real dispatch surfaced, so this deserves a dry run before a live release.

Replaces HaaLeo/publish-vscode-extension with vsce and ovsx, run
directly.

The forcing issue is authentication, not the action itself. Azure DevOps
retires global Personal Access Tokens on 2026-12-01, and the action
declares `pat` as a required input with no Entra ID support -- so it
cannot follow us onto the thing that replaces the token it depends on.
vsce 3.9.2 already carries --azure-credential.

Two other things fall out for free. The action still declares node20,
which is what emits the "Node 20 is being deprecated" warning on every
publish; a `run:` step uses the job's own Node, so there is no `using:`
to be deprecated. And the action has had no commit since 2025-06, while
both CLIs are first-party and shipped a release this month.

The CLIs come from the extension's own devDependencies -- vsce already
builds the VSIX -- so `--no-install` makes a missing one a clear failure
rather than a silent unpinned fetch, and Renovate tracks their versions
in the consuming repo's lockfile.

Auth is unchanged for now: VSCE_PAT still, with a new azure-credential
input defaulting off, so switching to Entra is one line once the Azure
side exists. See #98.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
jimisola added a commit to reqstool/reqstool-vscode that referenced this pull request Aug 23, 2026
reqstool/.github#99 replaces HaaLeo/publish-vscode-extension with the
registries' own CLIs, invoked as `npx --no-install`. vsce is already here
-- scripts/build.mjs shells out to it -- but ovsx was supplied by the
action and has to become a real dependency.

Pinned exactly, like vsce, so Renovate manages both from this lockfile
rather than a version floating in the shared workflow. npm audit is
unchanged: same 4 pre-existing findings, all via mocha, none from ovsx.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
@jimisola
jimisola merged commit ab68a7e into main Aug 23, 2026
13 checks passed
@jimisola
jimisola deleted the fix/vscode-publish-official-clis branch August 23, 2026 23:28
jimisola added a commit that referenced this pull request Aug 23, 2026
Every repo in the org now pins to a tag here rather than @main (#25),
which makes two things load-bearing that were nowhere written down: that
consumers pin @<sha> # <version> rather than @<tag>, and that merging to
main releases nothing until someone tags.

The second already bit: 1.0.0 was tagged before #99 merged, so the
consumers pinned to it are still on the old VS Code publish path. A tag
that lags main means fixes reach nobody and Renovate has nothing to
propose.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
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