chore(deps): let dependabot cover the VS Code extension#437
Conversation
dependabot.yml declares gomod and github-actions only. The repo has 9 npm manifests, and extensions/vscode/package.json:110-116 is currently carrying five hand-written CVE resolutions pins - undici, form-data, js-yaml, minimatch - i.e. someone is patching CVEs by hand in a package dependabot never looks at. Scope is deliberately just /extensions/vscode: its yarn.lock is tracked (Yarn Classic v1, which the npm ecosystem supports). /pages is excluded because its lockfile is gitignored (.gitignore:13) - a maintainer policy call, not mine. / and the six npm/*/ stubs have no real dependencies. @types/vscode is ignored because package.json pins it to ^1.74.0 to match engines.vscode ^1.74.0; bumping the types alone would type-check against APIs absent from the declared minimum VS Code. Grouped to minor/patch so the breaking majors already pending (eslint 8->9, @typescript-eslint 6->8, @types/node 18->24, vsce ->3) arrive individually rather than as one unreviewable PR.
|
✅ OpenCodeReview: No comments generated. Looks good to me. |
* ci: add CI job for VS Code extension Add .github/workflows/vscode-ext.yml to validate the VS Code extension (extensions/vscode/) on every push/PR that touches that directory. The workflow runs on the self-hosted node:24 container (matching the existing CI conventions) and executes: - yarn install --frozen-lockfile (lockfile integrity) - yarn lint (ESLint) - yarn compile (TypeScript + webpack dev build) - yarn test (Jest, all 10 test suites) Path filter (extensions/vscode/**) ensures Go-only changes do not trigger this job. No vsce package step — packaging is a release concern. Fixes the gap identified in #441: dependency PRs from dependabot (#437) will now receive real build and test signal before merging. Closes #441 * ci: pin node image version and add yarn dependency caching - Pin node container image to node:24.0.0 for reproducible builds - Add actions/setup-node@v4 with yarn cache for extensions/vscode/yarn.lock to speed up CI workflow runs * ci: use node:24 image container tag * ci: pin node version to 24.4.1 * ci: use actions/cache@v4 for yarn package caching * ci: remove redundant push trigger on main
lizhengfeng101
left a comment
There was a problem hiding this comment.
LGTM.
The one blocking concern raised in the description — "Nothing in CI builds or tests this extension" — has since been resolved by #444 (ci: add CI job for VS Code extension), merged on 2026-07-22, after this PR was opened. That workflow runs yarn install --frozen-lockfile → yarn lint → yarn compile → yarn test on extensions/vscode/**, so dependabot PRs here will now be validated rather than going green blind.
To be clear, #444 and this PR are complementary, not redundant:
- #444 is the gate — it validates changes when they happen.
- This PR is the driver — dependabot actively finds stale/vulnerable deps and opens update PRs, which then pass through that gate.
The case for merging has actually strengthened: the hand-maintained resolutions block has grown from 5 pins to 8 since this PR was written (brace-expansion, fast-uri, linkify-it added; js-yaml tightened), confirming CVEs are still being patched by hand in a package no bot watches.
Config is schema-valid; the scoped ignore on @types/vscode and update-types: [minor, patch] grouping are sound choices. Pure addition, both existing entries untouched. Low risk. Approving.
Description
.github/dependabot.ymldeclares two ecosystems,gomodandgithub-actions, both at/. Therepo has 9 npm manifests, so the VS Code extension is entirely unmanaged.
The evidence that the gap matters is already in the tree.
extensions/vscode/package.json:110-116:Someone is patching CVEs by hand, in a package dependabot never looks at.
extensions/vscode/yarn.lockis tracked and is# yarn lockfile v1— YarnClassic, which dependabot's npm ecosystem supports.
Scope is deliberately narrow — one directory, not nine
/extensions/vscodeyarn.lock, hand-pinned CVEs/pages.gitignore:13) — that's your policy call, not mine/and the sixnpm/*/optionalDependencieson those six0.0.0platform stubs — pure noiseTwo parts of that are load-bearing rather than decoration:
@types/vscodeis ignored.package.jsondeclares"engines": {"vscode": "^1.74.0"}and"@types/vscode": "^1.74.0"— they read like a contract, but that contract is already brokenin the tree today:
^1.74.0permits anything<2.0.0, so yarn resolved to 1.125.0 — the extension istype-checked against VS Code 1.125 APIs while declaring it runs on 1.74.0+. The ignore rule
just stops a bot dragging it further while nothing validates the result (see below). Fixing it
properly is a behaviour change for a separate PR.
update-types: [minor, patch]. The pending majors here are genuinely breaking:eslint ^8 → 9(flat-config migration, and.eslintrc.jsonis present),@typescript-eslint ^6 → 8,and
@types/node ^18 → 24. A bare"*"group would bundle all of them into one unreviewablePR; this way majors arrive individually.
The thing you should weigh before merging
Nothing in CI builds or tests this extension.
No workflow runs
yarn install,jest,webpack,eslint, orvsce packageforextensions/vscode— even thoughpackage.jsondefinescompile,test,lint, andpackagescripts and there are 10 test files undersrc/**/__tests__/. So every dependabot PR there would be checked only byci.yml, which is Go-only and entirely unaffected → green with zero validation. Merging ongreen would be merging blind. If you'd prefer an extension CI job first, happy to close this and
revisit after.
Also worth naming:
resolutionsis not maintained by dependabot — it's a yarn field, so thisPR reduces future manual pinning but does not retire the existing block.
#340 (gomod) and #347 (actions) are both still open, so adding a third ecosystem to a backlog
that isn't being serviced is a fair objection. This entry is grouped and capped at
open-pull-requests-limit: 5, so it adds at most one PR per week.Verification
Limitations
I have not seen dependabot actually run this config — a schema-valid file is not proof the first
run behaves as intended, and expect a larger burst on that first run than in the steady state. I
did not add an extension CI job, which is arguably the change that should come first.
Type of Change
How Has This Been Tested?
yaml.safe_loadparses; asserted 3 entries, the new one's limit/ignore/groups shape, andthat
versioning-strategyis absent/pageslockfilegitignored, the
engines/@types/vscodeversion contract, the fiveresolutionspinsChecklist
AI assistance: Claude Code helped research and verify this change. I reviewed the full diff
and take responsibility for it.