Skip to content

ci: stop installing vsce and ovsx unpinned - #1004

Merged
lcottercertinia merged 2 commits into
certinia:mainfrom
lukecotter:bug-ci-vsce-pinning
Sep 3, 2026
Merged

ci: stop installing vsce and ovsx unpinned#1004
lcottercertinia merged 2 commits into
certinia:mainfrom
lukecotter:bug-ci-vsce-pinning

Conversation

@lukecotter

@lukecotter lukecotter commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator

PR overview

Every publish path installed its own tooling with pnpm add --global @vscode/vsce and
pnpm add --global ovsx, which takes whatever the registry serves that day. The pre-release
job runs unattended every Tuesday, so nobody sees what version it picked.

  • vsce is already a lana devDependency, so it is already in the lockfile. Call it through
    pnpm exec / the existing build:vsix script instead of a global install.
  • ovsx is not a dependency and does not need to be: it only uploads at release time. Running
    it as pnpm dlx ovsx@1.1.1 pins the version without putting its native keyring binaries into
    every CI job and every developer's install.

No package.json or lockfile change, so pnpm install --frozen-lockfile is unaffected.

Trade-off worth knowing

Dependabot cannot see a version inside a run: block, so the ovsx pin will not be bumped
automatically the way vsce is. A stale pin fails loudly at verify-pat, before anything is
published. The alternative — ovsx as a devDependency — costs 56 extra packages
(@napi-rs/keyring, @node-rs/crc32 and the inquirer tree) on every install, for a tool used
twice a release.

Type of change

  • Chore

Validation

  • pnpm install --frozen-lockfile passes against the unchanged lockfile.
  • pnpm --filter lana exec vsce package --pre-release --no-dependencies runs in lana/ with the
    flags passed through unchanged.
  • ovsx@1.1.1 is current latest and still takes verify-pat, --no-dependencies,
    --pre-release and --skip-duplicate.
  • The dlx fetch happens at verify-pat, before any upload, so a download failure cannot land
    mid-publish.

Known gap

cd-prerelease.yml still packages inline (vsce package --pre-release) while ci.yml and
publish.yml call the build:vsix script, because build:vsix has no --pre-release flag.
Unifying them needs a second script in lana/package.json; left out to keep this PR to
workflows only.

@lukecotter

Copy link
Copy Markdown
Collaborator Author

Dropped the upload-artifact commit and rebased onto fbeb6751. Dependabot took it from v4 straight to v7 in #1002, so my v5 bump would have been a downgrade. This is now just the vsce pinning across the three workflows.

All three workflows installed vsce globally at run time, so the published VSIX
was built with whatever version was latest that day. The @vscode/vsce devDep
that certinia#957 pinned in lana was reachable only from build:vsix, which nothing in
CI called.

ci.yml and publish.yml now run that same script. cd-prerelease.yml needs
--pre-release, so it calls the pinned binary directly.
pnpm add --global ovsx installed whatever the registry served that day.
Run it through pnpm dlx at a fixed version instead: ovsx only uploads at
release time, so a devDependency would put its native keyring binaries in
every install for no gain.
lcottercertinia
lcottercertinia previously approved these changes Sep 3, 2026
@lukecotter lukecotter changed the title ci: package the VSIX with the pinned vsce ci: stop installing vsce and ovsx unpinned Sep 3, 2026
@lcottercertinia
lcottercertinia merged commit 7db4979 into certinia:main Sep 3, 2026
9 checks passed
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.

2 participants