fix(#7570): bundle DB drivers, add regression CI#7572
fix(#7570): bundle DB drivers, add regression CI#7572JohnMcLear merged 4 commits intoether:developfrom
Conversation
Spec for the upstream ueberDB fix (move 10 drivers back from optional peer deps to dependencies) plus downstream etherpad-lite safety net (explicit driver list + build-test-db-drivers CI job covering all 10 via presence check and MySQL+Postgres smoke tests). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Covers upstream ueberDB PR (move drivers from optional peer deps back to dependencies, publish 5.0.46) and downstream etherpad-lite PR (bump ueberdb2, defensive driver list, build-test-db-drivers CI job with presence + MySQL + Postgres stages gating publish). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Bump ueberdb2 to ^5.0.47 (upstream ueberDB PR ether#939 re-bundles drivers as real dependencies instead of optional peer deps, fixing the class of Docker-prod "Cannot find module" failures). - Declare all 10 ueberdb2 DB drivers as direct src dependencies as a defensive safety net against a future upstream drift. - Add build-test-db-drivers CI job that blocks the publish job: * all-10-drivers presence check in the built prod image * end-to-end MySQL smoke (reproduces the ether#7570 repro) * end-to-end Postgres smoke Any stage failure blocks Docker Hub / GHCR publish. Supersedes ether#7571. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
/review |
Code Review by QodoNew Review StartedThis review has been superseded by a new analysisⓘ The new review experience is currently in Beta. Learn more |
Review Summary by QodoFix #7570: bundle DB drivers, add regression CI
WalkthroughsDescription• Bump ueberdb2 to ^5.0.47 to restore DB driver bundling in production Docker images • Declare all 10 ueberdb2 DB drivers as direct src/package.json dependencies as defensive safety net • Add build-test-db-drivers CI job with presence check and MySQL/Postgres smoke tests gating publish • Includes comprehensive design spec and implementation plan for issue #7570 fix Diagramflowchart LR
A["ueberdb2@5.0.45<br/>drivers in optional peerDeps"] -->|upstream fix| B["ueberdb2@5.0.47<br/>drivers in dependencies"]
B -->|bump version| C["src/package.json<br/>explicit driver list"]
C -->|verify in CI| D["build-test-db-drivers job<br/>presence + MySQL + Postgres"]
D -->|gates| E["publish to Docker Hub/GHCR"]
File Changes1. docs/superpowers/plans/2026-04-20-issue-7570-ueberdb2-drivers.md
|
Code Review by QodoNew Review StartedThis review has been superseded by a new analysisⓘ The new review experience is currently in Beta. Learn more |
The presence test ran node from the default cwd (/opt/etherpad-lite), but the drivers are installed under /opt/etherpad-lite/src/node_modules by the monorepo workspace. Adding `-w /opt/etherpad-lite/src` makes Node resolve modules from src/node_modules where pnpm places them. Matches how the production container itself runs: `pnpm run prod` is invoked from src/ (cross-env + node --require tsx/cjs node/server.ts).
|
/review |
Code Review by Qodo
1. ueberdb2 version split
|
Summary
Fixes #7570 (
Cannot find module 'mysql2'at Docker prod startup for every non-default DB backend).Upstream root cause:
ueberdb2@5.0.45moved the 10 DB drivers fromdependenciestopeerDependencies+peerDependenciesMeta.optional. Production pnpm installs skip optional peer deps, so the drivers are absent from the Docker image andrequire('mysql2')(etc.) crashes at first use.Two-part fix:
ueberdb2@5.0.47) — moved the 10 drivers back from optional peerDependencies to realdependencies.ueberdb2to^5.0.47.src/package.jsondependencies — defensive safety net so a future upstream drift cannot silently break Etherpad prod again.build-test-db-driversCI job that blockspublish:require()each of the 10 drivers (@elastic/elasticsearch,cassandra-driver,mongodb,mssql,mysql2,nano,pg,redis,rethinkdb,surrealdb). Fast, deterministic regression catch for the exact UeberDB2 mysql2 dependency #7570 class.mysql:8service container, launch Etherpad withDB_TYPE=mysql, require/to serve. Live reproduction of the issue reporter's scenario.postgres:16.Supersedes #7571 (thanks @copilot — the direction was right; this variant strips unrelated bumps and expands regression coverage).
Test plan
ueberdb2@5.0.47published to npmpnpm installin a fresh clone resolves cleanly,src/workspace picks upueberdb2@5.0.47, all 10 drivers resolve viarequire()build-testpassesbuild-test-db-drivers— presence stage 10/10 okbuild-test-db-drivers— MySQL stage serves/build-test-db-drivers— Postgres stage serves/🤖 Generated with Claude Code