chore(repo): add cargo ecosystem and group security updates in Dependabot config - #22020
chore(repo): add cargo ecosystem and group security updates in Dependabot config#22020davidtaikocha wants to merge 2 commits into
Conversation
…abot config The repo had 39 open Dependabot PRs, 37 of which came from a stream this file did not govern. - Add the missing `cargo` ecosystem. `taiko-client-rs` and `ejector` were receiving no version updates at all, only security PRs. - Give every ecosystem an `applies-to: security-updates` group. Without it, `groups` covers version updates only, so a batch of alerts lands as one PR per package (ten were opened on 2026-05-14 alone). - Mark the existing groups `applies-to: version-updates` explicitly. - Replace npm's `directory: "/"` with `directories:` listing the actively maintained workspace members. `directory: "/"` only ever pointed Dependabot at the root manifest. - Ignore npm semver-major bumps. Left to Dependabot they rot: svelte 4->5, eslint 8->9, vite 5->6 and vitest 1->3 all sat open for months. - Raise `open-pull-requests-limit` from 1 to 3 so one stuck group PR cannot block an ecosystem for a whole cycle. Note this setting never applied to security updates in the first place. Cadence stays monthly: the version-update stream was not the noisy one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The previous npm entry listed six active workspace members alongside "/" and
claimed that omitting the dormant ones excluded them. Both parts were wrong.
Dependabot's npm fetcher expands pnpm-workspace.yaml itself, so "/" already
pulls in every member manifest:
fetch_files -> pnpm_files -> fetch_pnpm_workspace_package_jsons
-> workspace_paths(pnpm-workspace.yaml["packages"]) # globs packages/*
-> fetch_package_json_if_present(workspace)
The six explicit member entries were therefore redundant, and the dormant
packages were never excluded at all.
Drop them for a single `directory: "/"` plus `exclude-paths`, which is checked
inside fetch_package_json_if_present — the same helper the workspace expansion
calls, so it does filter pnpm members.
Note `exclude-paths` is version-updates only; it does not suppress security PRs
on these packages. Documented inline.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
🐋 DeepSeek Code Review🟡 Warnings
🔵 Suggestions
🟢 What Looks Good
Automatically triggered on PR update • model: |
Context
The repo had 39 open Dependabot PRs, the oldest from 2024-12-23. I closed 24 of them (stale, conflicting, superseded, or targeting packages that no longer exist); 15 mergeable ones remain. This PR fixes the config that let the backlog build up.
The key finding: only 2 of those 39 PRs came from
dependabot.ymlat all. Everything else was a Dependabot security update, which is a separate stream that ignoresopen-pull-requests-limitoutright and ignoresgroupsunless a group is explicitly markedapplies-to: security-updates.Proof that the two streams are distinct:
cargowas not independabot.yml, yet #21713 and #22003 exist ascargo groupPRs.Changes
cargoecosystem (packages/taiko-client-rs,packages/ejector)taiko-client-rshas 129 commits in the last 6 months and runs in production. Two separate workspace roots, no rootCargo.toml, so both must be listed.applies-to: security-updatesgroup to every ecosystemapplies-to: version-updatesdirectory: "/", addexclude-pathsfor the 5 dormant packagesnfts,snaefell-ui,taikoon-ui,ui-lib,supplementary-contractshave 0 commits in 6 months; version-bump PRs against them have no reviewer. See the note below on whyexclude-pathsrather than adirectories:list.version-update:semver-majoropen-pull-requests-limit1 → 3Cadence stays monthly — the version-update stream was not the noisy one.
go-updatesandgithub-actions-updateshave merged 20 times on that rhythm.Why
exclude-pathsand not adirectories:listAn earlier revision of this PR listed the six active workspace members under
directories:. That was wrong twice over, and the correction is worth recording:Dependabot's npm fetcher parses
pnpm-workspace.yamland glob-expandspackages/*on its own, sodirectory: "/"already loads every member manifest:So the six explicit entries were redundant, and the dormant packages were never excluded — the config's own comment claimed an exclusion it did not perform.
exclude-pathsis the mechanism that actually works here, because it is checked insidefetch_package_json_if_present(:728) — the same helper the workspace expansion calls.Two caveats, both now recorded inline in the config:
exclude-pathsis version-updates only (so marked in the options reference). It will not stop security PRs on the dormant packages; those still need dismissing in the Security tab, or the packages retiring.exclude-pathschecks sit behind the experiment flagenable_exclude_paths_subdirectory_manifest_files. The option is publicly documented, so it is presumably enabled in production, but that is not verifiable from outside.Open question for a maintainer — please read
The npm version-update lane has never produced a single PR. Exact-phrase search across all PR states:
This is not explained by directory scoping — as established above,
directory: "/"was already reaching the whole workspace. And the root manifest alone has been updatable this entire time:package.jsonpnpm-lock.yamlprettier^3.2.5lefthook^1.6.10An in-range
prettierbump should have been proposed long ago. It was not — which points at the npm updater job erroring out, and nothing in this PR would fix that.Dependabot job logs are not exposed via the API, so I could not confirm it. Someone with admin access should check Insights → Dependency graph → Dependabot for the npm ecosystem's last run.
One lead worth checking there:
pnpm-workspace.yamlusesonlyBuiltDependencies, a pnpm 10 key, while CI pins pnpm 9 (.github/actions/install-pnpm-dependencies/action.yml,taiko-client-rs--test.yml) and there is nopackageManagerfield in the rootpackage.jsonfor Dependabot to read. I deliberately leftpackage.jsonuntouched here — pinningpackageManageraffects CI and belongs in its own PR.Verification
go.mod, bothCargo.toml, rootpackage.json.exclude-pathspatterns checked against a faithful port ofDependabot::FileFiltering.exclude_path?: all 11 workspace members classify as intended (5 excluded, 6 kept) and the root manifest survives.Left as draft pending the Dependabot job-log check above.
🤖 Generated with Claude Code