ci: add a dependabot config, deliberately quiet - #472
Merged
Conversation
There is no dependabot.yml, so nothing tells anyone a dependency has moved until it breaks or until someone goes looking. Two things this cycle came from that: the WebKitGTK pin in build.yml went stale until an outside contributor traced an AppImage that would not start on modern Mesa back to it (#463), and dompurify sat at 3.3.1 and comrak at 0.18 until both were bumped by hand. Configured for one maintainer rather than for coverage. Three ecosystems -- npm at the root, cargo in src-tauri, github-actions -- each monthly and each grouped behind `patterns: ['*']`, so a month produces at most three pull requests and usually fewer, since four of the five actions in use are tracked by major tag. `applies-to: version-updates` on every group keeps security updates out of the batch: those are a repository setting, not a file, and they open their own pull requests as advisories land. Commit prefixes follow this repository's convention, so the pull requests read as chore(deps)/chore(deps-dev)/ci(deps). Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
PathGao
added a commit
that referenced
this pull request
Aug 6, 2026
…#484) #472 gave each ecosystem one grouped pull request a month with `patterns: ['*']` and no `update-types` filter. The first run showed what that grouping actually covers: | PR | contents | crossed | |------|-----------|-----------------------------------------------------| | #476 | 4 actions | major tags v4 -> v7, merged | | #477 | 11 npm | TypeScript 5.6 -> 7.0, Vite 6 -> 8 | | #478 | 17 crates | tauri-plugin-prevent-default 2 -> 5, notify 6 -> 8 | Nothing failed. Dependabot's schema check accepts the config, and the result is a `chore(deps)` title wrapped around a toolchain migration -- a diff whose per-dependency changelogs are the review, presented as a batch that cannot be split, bisected, or reverted per dependency. So each group now takes `update-types: [minor, patch]`. Majors fall outside every group and arrive one pull request per dependency, each carrying its own changelog. That is the documented shape: "Example: Individual pull requests for major updates and grouped for minor/patch updates" in GitHub's guide to optimizing pull request creation, whose stated result is "All major updates will continue to be raised as individual pull requests." `update-types` alone does not suppress anything. The next example in the same guide, the one titled "no pull requests for major updates", starts from this exact group and reaches that outcome by *adding* an `ignore` condition on `version-update:semver-major`. That condition is deliberately not written here: an `ignore` is a permanent, repo-invisible mute, and the point of this change is to make majors visible one at a time, not to stop hearing about them. `open-pull-requests-limit` goes 2 -> 4 because the shape of a run changed. Two was sized for "one grouped pull request, plus headroom for a stale one". With majors opening individually the file now holds one grouped pull request plus n majors, and a limit of 2 leaves room for exactly one of them. One caveat, which is in the config comment because it is invisible from the config: on a run where a grouped pull request is already open, Dependabot marks every dependency matching the group's `patterns` as handled before it consults `update-types`, so that run opens no individual major pull requests at all. They appear on the first run after the grouped pull request is merged or closed. Majors are deferred by an unreviewed batch, not dropped by it. Separately, and recorded in the config comment because nothing else in the repository says it: `tauri build` fails when a Tauri plugin's crate and npm halves disagree on major *or minor*, and Dependabot puts those two halves in two different pull requests. #478 is red on Linux and macOS for exactly that -- `tauri-plugin-dialog (v2.7.2) : @tauri-apps/plugin-dialog (v2.6.0)`, the npm half sitting in #477. That coupling is not a semver problem and this change does not fix it; the pair has to be merged as a pair. The github-actions comment is corrected while it is being rewritten: it claimed all five actions are tracked by major tag. Four are; `dtolnay/rust-toolchain@stable` carries no version for Dependabot to compare. scripts/dependabotConfig.test.ts locks the four properties this file has that a reader cannot see: no group lists or admits `major`, every group stays `applies-to: version-updates` so a security advisory never waits for the monthly batch, the `interval` matches the cadence the header comment promises, and the limit stays above the point where the queue becomes invisible. Each was verified to fail by breaking the property it claims to protect. `ecosystemBlocks()` asserts it found blocks, because every check is a `for` over its result and a `for` over an empty list passes. Measured: an extra space in each `- package-ecosystem:` line left four of the five checks green. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This was referenced Aug 6, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
There is no
.github/dependabot.yml. Nothing in this repository notices that adependency has moved — you find out when it breaks, or when someone goes
looking.
The evidence, from this repository, this cycle
#463.
build.ymlpinned the WebKitGTK stack at=2.44.0-2.tauri buildbundled 2.44.0 into the AppImage, and 2.44.0 fails EGL initialization against
modern Mesa:
EGL_BAD_PARAMETER, process exits, no window ever appears. Firstreported in #182; still broken on the v2.7.0 release; traced and fixed by an
outside contributor. The application did not launch, on a whole class of Linux
systems, because a pin nobody was watching aged out from under it.
dompurify sat at 3.3.1 while 3.4.12 was current. It is the sanitizer between
rendered Markdown and the webview — the one dependency where "a version behind"
and "a security posture" are the same sentence. It was bumped by hand this cycle
and is now pinned exactly in both
dependenciesandoverrides.comrak sat at 0.18 — a 2023 release — until it went to 0.54 by hand this
cycle. That is the Markdown parser. Thirty-six minor versions of upstream
behaviour and fixes, arriving as one jump rather than as a stream anyone had the
chance to read.
There is a real check here already:
npm auditon the complete lockfile intest.yml(#308, #314). But it is a gate, not a notice. It only speaks whensomebody opens a pull request, and when it does speak it turns a new advisory
into a red X on whichever unrelated pull request happened to run next. Neither
npm auditnor anything else in the tree looks at Cargo or at the actions.What this configures, and the noise it costs you
Three ecosystems, each monthly, each grouped behind
patterns: ['*']soeverything that moved arrives as one pull request:
package.json(root)src-tauri/Cargo.toml.github/workflows/At most three pull requests a month, realistically closer to two. The actions
number is low for a checkable reason: of the five actions in use
(
actions/checkout@v4,actions/setup-node@v4,actions/upload-artifact@v4,softprops/action-gh-release@v2,dtolnay/rust-toolchain@stable), four aretracked by major tag and only move on a major release, and the fifth is tracked
by branch —
@stableis not a version, so Dependabot has nothing to bump thereat all.
Weekly on all three, ungrouped, would have been the default-shaped choice and
would have produced something like a dozen pull requests a month. That is the
volume at which a dependency bot stops being read, and an unread bot is worse
than none — it trains you to close things unexamined.
Security updates are not on this schedule and are not in this file. They are
a repository setting (Settings → Advanced Security → Dependabot security
updates), they open their own pull requests as advisories land, and they are not
subject to
open-pull-requests-limit.applies-to: version-updateson eachgroup is precisely the knob that keeps them out of the monthly batch, so a
sanitizer advisory still arrives on its own, immediately, rather than waiting for
the first of the month. I cannot turn that setting on — I have push and
triage here, not admin. If it is off, this file gives you the quiet monthly
cadence and none of the promptness, which is the half that matters least. Worth
checking before merging.
What this would not have caught — including #463 itself
I want to be plain about this, because "add Dependabot" invites the assumption
that the motivating bug is now covered. It is not.
The apt pins in
build.ymlare not a package ecosystem Dependabot supports.libwebkit2gtk-4.1-0=2.44.0-2lives inside arun:block, as an argument tosudo apt-get install. There is nopackage-ecosystemfor that. Dependabotwould not have opened a pull request, would not have flagged the pin as stale,
and would not have said anything at all while the AppImage was broken. #463
had to be found by a user and fixed by hand, and it would have had to be found
by a user and fixed by hand with this file merged. It is here as evidence for
the class of problem — an unattended dependency that quietly ages into a
user-facing break — not as something this config fixes.
Two smaller ones:
overridesinpackage.json.dompurifyis pinned in bothdependenciesand theoverridesblock. Dependabot updates the manifest'sdependency sections; I am not confident it rewrites
overrides, and I did notverify it against a live run. If it does not, the first npm group pull request
will bump one and leave the other, and the two need reconciling by hand. Worth
watching on the first one rather than assuming either way.
patterns: ['*']pull requestcan carry a major bump that breaks the build, and it blocks the whole batch
when it does. I chose it anyway because your scarce resource is pull requests
to read, not lines to read, and because
test.ymlandtest_build.ymlalreadybuild on three platforms — a bad group fails loudly rather than merging quietly.
If it becomes a nuisance, the fix is an
ignoreentry for the offender (amonaco-editormajor is the likely candidate) or splitting majors into theirown group; both are additive edits to this file.
Schema
Written against the current
Dependabot options reference,
read for this change rather than recalled — the grouping options in particular
have moved, and
applies-tois the part this config depends on.Two current options I looked at and deliberately did not use:
cooldown(default-days,semver-major-days, …), which holds a versionback for a set period after release so a yanked or hot-fixed version is never
picked up. Genuinely useful, and largely redundant against a monthly cadence —
a month is already a longer cooling period than any value I would have set.
labels. This repository has nodependencieslabel; Dependabot createsits own defaults. Adding a label list would be configuration that has to be
kept in sync with the label set for no gain.
Verification
yamlpackagealready in this lockfile and checked field by field against the options
reference: top level is
version+updates; each entry uses only documentedkeys;
applies-to: version-updatesresolves insidegroups.<name>, not besideit. A dependabot.yml that GitHub rejects fails the way a malformed workflow
fails — silently, by simply never running — so I parsed it rather than reading it.
git ls-tree -r origin/mastergives exactly onepackage.jsonand exactly oneCargo.toml(src-tauri/Cargo.toml), hencedirectory: /anddirectory: /src-tauri.npm run check— 645 files, 0 errors.npm test— 692 pass, 0 fail. Thischange touches no source; that is a "nothing broke" baseline.
the first grouped pull request contains, whether it touches
overrides—cannot be observed until it is merged onto the default branch. Everything above
about volume is arithmetic over the manifests, not an observation.
Your call
This puts recurring pull requests in your queue every month for as long as it is
merged, and you are the one who has to read them. If the cadence is still too
much,
quarterlyis a one-word change and the rest of the file stands; if it istoo little,
weeklylikewise. And if you would rather have the alerts withoutthe pull requests, Dependabot security alerts alone is a repository setting and
needs no file at all — merging nothing is a legitimate outcome here.