Dependabot in Practice: Keeping Dependency Updates Boring
Turn Dependabot from a noise generator into a calm upgrade pipeline with scheduled, grouped, label-aware PRs that reviewers can ship quickly.
Netbay Infrastructure Team
Netbay Engineering
On this page
Dependabot is two features sharing one name. Version updates open pull requests whenever your manifests or lockfiles move behind your back. Security updates and alerts watch the dependency graph and raise the alarm — and open fix PRs — when a pinned dependency acquires a known advisory. Both jobs share one goal: they should be boring. The moment updates start scaring people, the update PRs start being closed unmerged, and your supply chain quietly rots again.
Config anatomy
Everything lives in a single dependabot.yml at the root of the repository, under a version-2 header. The unit of configuration is a manifest directory: one entry per package ecosystem you want updated.
# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule:
interval: weekly
day: monday
time: '03:00'
open-pull-requests-limit: 10
reviewers:
- netbay/platform-eng
assignees:
- rishi
- meera
labels:
- dependencies
- priority/low
commit-message:
prefix: "chore(deps):"
ignore:
- dependency-name: electron
update-types: ['version-update:semver-major']
groups:
runtime:
patterns: ['express', 'fastify']
update-types: ['patch', 'minor']
- package-ecosystem: docker
directory: /deploy
schedule:
interval: monthly
- package-ecosystem: github-actions
directory: /
schedule:
interval: weeklyThree decisions here matter more than the rest. First, "ignore" with a major-update rule stops a breaking upgrade from being *proposed* until you are ready — voluntary, on your calendar. Second, the "groups" key collapses many PRs into coherent batches. Third, updating github-actions itself is free hygiene: your own automation becomes a dependency you keep current. The same file can schedule the docker and the actions ecosystems side by side, each entry carrying its own cadence — a useful knob when one manifest tracks conservative tools and another tracks a bleeding-edge toolkit.
Groups are the whole game
Dependabot's default of one PR per dependency produces walls of green. Grouping turns that wall into a handful. Group by cohesion, not alphabetically: everything runtime-related in one group, every dev tool in another, and let patch-and-minor versions ride together while majors stay loud. A long-lived PR that says "runtime deps patch+minor" is reviewable reasoning about *risk*, whereas fifty tiny PRs each demand the same judgement fifty times.
Make merges cheap
A noisy Dependabot feed is usually a CI problem wearing a Dependabot costume. If every update PR takes an hour of checks and a slow human review, the queue backs up and updates go stale. Compress the loop:
- Let the update branches be recognizable and tag them early, so reviewer queues sort them correctly.
- Keep a small review SLA for dependency PRs; they are the highest volume, lowest complexity work in your queue.
- Automate merges only once criteria are explicit — label dependencies, green checks, and a batched group qualify.
A small loop makes that routine:
# auto-merge every open dependabot PR whose merge state is CLEAN
gh pr list --author 'app/dependabot' --state open --json number --jq '.[].number' | while read -r pr; do
state=$(gh pr view "$pr" --json mergeStateStatus --jq .mergeStateStatus)
if [ "$state" = CLEAN ]; then
gh pr merge "$pr" --squash --auto --delete-branch
fi
done"mergeStateStatus" returns CLEAN only when all required checks passed and there are no conflicts — so the script is enforcement, not a loophole.
Security updates are a different clock
Do not let the version-update schedule govern security. Dependabot alerts are near-real-time: an advisory that touches your dependency graph raises an alert on its own clock, and enabling security updates turns that alert into a fix PR immediately. Give that path a faster review SLA than the weekly feed — automatic scrutiny for known-exploitable flaws, then a real human confirms the fix and the bump lands. The alert stream is also where you measure supply-chain risk honestly: if critical alerts routinely sit for weeks, your configuration is working and your process is not.
The daily review loop
Every Dependabot PR deserves a thirty-second peek, not a deep audit: glance at the changelog if it is a major, confirm the lockfile delta is what you expect, and let CI plus the tests you already own do the proving. Make one deliberate exception: never merge a dependency pull request whose lockfile diff is unexpectedly large, because a bot-generated change that surprises you is exactly how an unintended dependency arrives silently. Batch-major updates, and your own roadmap — deliberately ignored majors are fine as long as the ignore is a decision with a date attached.
Takeaway: Dependabot pays off the day updating stops being an event. Schedule sensibly, group aggressively, merge cheap green batches — and keep security on a faster clock. The bots, mirrors, and scheduled jobs you run to close the loop all need a dependable Linux box, which is exactly what a Lucknow DC01 VPS from Netbay is — live in under 60 seconds at netbayhosts.in.
Keep reading
Follow along on a real VPS
Deploy Linux in under 60 seconds
These guides are written against Ubuntu, Debian, and RHEL-family images — the same ones on NetBay.
Deploy an instance