chore(deps): sweep every pending dependency bump, and group the ones that cannot move alone - #43
Merged
Merged
Conversation
…that cannot move alone
Applies fifteen bumps that Dependabot had opened as ten separate PRs. Two of
those PRs were red, and for the same reason the CodeQL sub-actions were: the
packages are not independently upgradable.
BullMQ and ioredis are one type graph. BullMQ's `ConnectionOptions` accepts an
ioredis `Redis`, and that assignment only typechecks while a single copy of
ioredis resolves in the tree. Bumping either one alone leaves two copies, and
every site that hands a client to a Queue, Worker, QueueEvents or FlowProducer
fails with:
error TS2322: Type 'Redis' is not assignable to type 'ConnectionOptions'
That is exactly how #33 (ioredis alone) and #39 (bullmq alone) failed. The same
two versions applied together are green, which is what this commit does — and a
`bullmq-stack` group now keeps them moving as the pair they are, placed before
the dev-dependencies catch-all so it wins the match.
`ioredis` keeps its exact pin rather than gaining a caret. The pin is not
incidental: it is what guarantees the single-copy resolution the type graph
depends on.
Verified with the full gate: typecheck, test:types, lint, 260 tests at 100%
statements/branches/functions/lines, build, size (12 032 / 18 432 B brotli),
check:exports (all four quadrants green on both subpaths), the dogfood smoke
test, and the 8 Testcontainers E2E tests against a real Redis.
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
The example workspace kept its own older pair while the root moved, so the two
resolved separate copies of ioredis and the example stopped compiling:
Type 'Redis' is missing the following properties from type 'Redis':
_connect, _getServerAddress, _buildCommandContext, ... and 50 more
Two structurally identical types from two copies. It is the same defect the
grouped bump was written to prevent, one level out: forcing both manifests to
name compatible ranges is not enough, because each workspace still resolves its
own. Override the version instead, so exactly one copy exists for the root, the
example, and anything added later.
There was a problem hiding this comment.
Pull request overview
This PR consolidates multiple pending dependency updates into a single change set, and adjusts Dependabot grouping so tightly-coupled packages (BullMQ + ioredis, plus bullmq-otel) update together.
Changes:
- Bumps the BullMQ/ioredis stack plus various dev tooling (ESLint/Prettier/typescript-eslint, commitlint, test tooling) in
package.jsonandpnpm-lock.yaml. - Adds a new Dependabot group (
bullmq-stack) to ensure BullMQ-related packages and ioredis move in lockstep. - Updates the lockfile to reflect the new resolved versions and transitive dependency graph.
Reviewed changes
Copilot reviewed 3 out of 4 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
package.json |
Updates dependency versions for the peer stack and dev tooling (notably BullMQ/ioredis + lint/test tooling). |
pnpm-lock.yaml |
Regenerates the lockfile to match the updated dependency set and new transitive graph. |
.github/dependabot.yml |
Introduces a dedicated Dependabot group for BullMQ/ioredis to keep coupled updates together. |
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 3 out of 4 changed files in this pull request and generated no new comments.
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Comments suppressed due to low confidence (1)
package.json:79
- The repository’s supply-chain contract expects an explicit empty runtime dependencies object. Removing the
"dependencies": {}field makes it easier to accidentally introduce runtime deps later and contradicts the documented "zero direct deps" requirement referenced in repo docs (e.g. AGENTS.md). Please restore an explicit emptydependenciesobject.
},
"peerDependencies": {
This was referenced Jul 30, 2026
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.
Applies fifteen bumps that Dependabot had opened as ten separate PRs, and closes the class that made two of them red.
Why they could not be merged one at a time
BullMQ and ioredis are one type graph. BullMQ's
ConnectionOptionsaccepts an ioredisRedis, and that assignment only typechecks while a single copy of ioredis resolves in the tree. Bump either alone and the copies diverge:at all four sites that hand a client to a
Queue,Worker,QueueEventsorFlowProducer. That is exactly how #33 (ioredis alone) and #39 (bullmq alone) failed — identical errors, identical lines. Applied together, the same two versions are green; I reproduced both directions locally before writing this.Same shape as the CodeQL sub-actions in #38, so it gets the same treatment: a
bullmq-stackgroup coveringbullmq,bullmq-otelandioredisacross all update types, placed before the dev-dependencies catch-all so it wins the match.iorediskeeps its exact pin rather than gaining a caret — the pin is what guarantees the single-copy resolution the type graph depends on, so it is not incidental and I did not "modernise" it.What is in here
bullmq5.79.1 → 5.81.2 ·ioredis5.10.1 → 5.11.1@nestjs/common·@nestjs/core·@nestjs/testing11.1.27 → 11.1.28@commitlint/cli19.8.1 → 21.2.1 ·@commitlint/config-conventional19.8.1 → 21.2.0 (lockstep pair)eslint+@eslint/js9.39.4 → 9.39.5 ·eslint-config-prettier9.1.2 → 10.1.8 ·typescript-eslint8.62.0 → 8.65.0 ·prettier3.8.4 → 3.9.6testcontainers12.0.3 → 12.0.4 ·ts-jest29.4.11 → 29.4.12 ·@types/node24.13.2 → 24.13.3Supersedes and closes #17, #19, #22, #23, #32, #33, #34, #37, #39.
Verification
Full gate, locally: typecheck · test:types · lint · 260 tests at 100% statements/branches/functions/lines · build · size (12 032 / 18 432 B brotli server, 406 / 2 500 shared) · check:exports (four quadrants green on both subpaths,
node10included) · dogfood smoke · 8 E2E tests against a real Redis.