ci: consolidate Dependabot npm updates to the pnpm workspace root - #340
Conversation
The repo has a single root pnpm-lock.yaml (the #190 consolidation) covering docs, clients/ts, and tests/e2e/sdk. Dependabot only updates a lockfile co-located with the manifest it is pointed at, so the previous per-member npm configs (directory: /docs, /clients/ts, /tests/e2e/sdk) edited the member package.json but left the root lockfile untouched. Every such PR then failed CI's `pnpm install --frozen-lockfile` with ERR_PNPM_OUTDATED_LOCKFILE (e.g. #211, #337), and no rebase could fix it because a rebase never regenerates the lockfile. Point a single npm entry at the workspace root so Dependabot reads pnpm-workspace.yaml, walks every member, and updates the one root lockfile. One combined grouped npm PR per Monday, matching go-deps / actions-deps. Also brings the root package.json's own devDeps (biome, markdownlint, nyc) under Dependabot — the per-member configs never covered them. Sync the docs that described the old layout: development.md's Dependabot section (five configs -> three; document the root-lockfile rationale), SECURITY.md's supply-chain line (three npm workspaces -> one root npm config), and a CHANGELOG [Unreleased] entry. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (4)
📜 Recent review details⏰ Context from checks skipped due to timeout of 300000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
🧰 Additional context used📓 Path-based instructions (1)docs/src/content/docs/**/*.{md,mdx}📄 CodeRabbit inference engine (AGENTS.md)
Files:
🧠 Learnings (1)📚 Learning: 2026-06-10T15:01:09.027ZApplied to files:
🪛 LanguageTooldocs/src/content/docs/development.md[uncategorized] ~522-~522: The official name of this software platform is spelled with a capital “H”. (GITHUB) 🔇 Additional comments (4)
📝 WalkthroughSummary by CodeRabbit
WalkthroughDependabot's npm configuration was consolidated from three workspace-specific entries into a single root-level configuration targeting the pnpm workspace root. This change prevents CI failures caused by outdated lockfiles when per-member manifests are updated. Documentation, security policy, and changelog entries were updated to reflect the new consolidated strategy. ChangesDependabot Configuration Consolidation
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Suggested labels
Suggested reviewers
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
✨ Simplify code
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
📚 Docs preview is live → https://2a03efe5-wavehouse-docs.wave-rf.workers.dev
|
Code Coverage OverviewLanguages: Go GoThe overall coverage remains at 89%, unchanged from the Code Coverage is in Public Preview. Learn more and provide us with your feedback. |
Problem
Every Dependabot npm PR has been failing CI since the #190 root-lockfile consolidation — e.g. #211 (
@vitest/coverage-v8intests/e2e/sdk) and #337 (thedocsgroup). They fail fast on Lint/Unit/E2E/Coverage and a rebase never fixes them.Root cause is the Dependabot config, not the dependencies. The repo is a pnpm workspace with a single root
pnpm-lock.yaml, but.github/dependabot.ymlpointed its three npm entries at the member directories (directory: /docs,/clients/ts,/tests/e2e/sdk). Dependabot only updates a lockfile co-located with the manifest it targets, so it edited the memberpackage.jsonbut left the root lockfile untouched. CI then runspnpm install --frozen-lockfile, the lockfile's recorded specifier no longer matchespackage.json, and it aborts withERR_PNPM_OUTDATED_LOCKFILE. A rebase only replays the samepackage.json-only change onto freshmain— it never regenerates the lockfile, so the mismatch returns every run. (#337, created well after #190, fails identically — confirming it's structural, not a stale branch.)Fix
Replace the three per-member npm entries with one entry at the workspace root (
directory: /, groupnpm-deps, prefixdeps). At the root, Dependabot readspnpm-workspace.yaml, walks every member, and updates the single root lockfile inside the PR. As a bonus it now also covers the rootpackage.json's own devDeps (biome, markdownlint, nyc), which the per-member configs never did.Trade-off: one combined weekly npm PR with a single
deps:prefix, instead of three per-area PRs (docs:/deps(sdk):/deps(tests):). This matches the existing groupedgo-deps/actions-depsconfigs and the team's stated preference for fewer Monday PRs.Docs sync
docs/src/content/docs/development.md— Dependabot section: five configs → three, plus the root-lockfile rationale.SECURITY.md— supply-chain line: "three npm workspaces" → one root npm config.CHANGELOG.md—[Unreleased] → Changedentry.Note (out of scope)
pnpm-workspace.yamlsetsminimumReleaseAge: 10080(7-day cooldown), which Dependabot doesn't honor. When the new config regenerates lockfiles, a dep released <7 days ago can be held by the cooldown at install time — so a freshly-cut bump may need a few days before it merges cleanly. Pre-existing; the no-auto-merge + admin-review gate covers it.Follow-up on the broken PRs
Once this merges, the old per-member configs no longer exist, so #211 and #337 should be closed (not rebased — rebasing keeps the old member-directory branch and reproduces the failure). The new root config regenerates correct combined PRs on the next Dependabot run.
🤖 Generated with Claude Code