Skip to content

fix(ci): start cloudflare e2e wrangler directly#1539

Merged
KyleAMathews merged 1 commit into
mainfrom
fix/cloudflare-do-e2e-pnpm11
May 18, 2026
Merged

fix(ci): start cloudflare e2e wrangler directly#1539
KyleAMathews merged 1 commit into
mainfrom
fix/cloudflare-do-e2e-pnpm11

Conversation

@samwillis
Copy link
Copy Markdown
Collaborator

@samwillis samwillis commented May 18, 2026

Summary

  • Start the Cloudflare Durable Object e2e Wrangler process directly through Node instead of pnpm exec.
  • Add a bounded runtime POST timeout that reports captured Wrangler stdout/stderr when the local runtime stops responding.

Test plan

  • pnpm test:e2e -- --reporter=verbose in packages/cloudflare-durable-objects-db-sqlite-persistence
  • CI E2E workflow should confirm whether this fixes the pnpm 11/Linux hang on main

Made with Cursor

Summary by CodeRabbit

  • Tests
    • Enhanced test harness infrastructure with improved error diagnostics and output visibility during development server initialization.

Review Change Stack

Avoid routing the long-running Wrangler dev process through pnpm exec so the Cloudflare Durable Object e2e lane stays stable after the pnpm 11 upgrade.
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 18, 2026

📝 Walkthrough

Walkthrough

This PR refactors the e2e test harness for Cloudflare Durable Objects to start Wrangler via direct node invocation instead of pnpm, expose runtime output for better error diagnostics, and updates all test call sites to use the new postJson signature that accepts the runtime harness.

Changes

Runtime harness and error handling

Layer / File(s) Summary
Harness type extensions and ESM imports
packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts
createRequire is imported to support ESM, and RuntimeProcessHarness type gains a getOutput() method returning captured stdout and stderr.
Runtime startup and postJson refactoring
packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts
ESM-compatible require resolves the Wrangler CLI entrypoint; process spawn invokes process.execPath with the resolved Wrangler path instead of pnpm; startWranglerRuntime implements getOutput() in the returned harness; postJson is refactored to accept the runtime harness and use runtime.getOutput() for error diagnostics when fetch fails. All test call sites (writeTodoFromClient, loadTodosFromClient, loadUnknownCollectionErrorFromClient, and schema-mismatch test scenarios) are updated to call postJson(runtime, ...) instead of postJson(runtime.baseUrl, ...).

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

🐰 A harness refined, a path more direct,
No pnpm, just node, the startup's correct,
Output flows freely through getOutput's door,
Call sites align—all eight, and a few more! 📋✨

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description covers the main changes and test plan but does not follow the required template with sections for 'Changes', 'Checklist', and 'Release Impact'. Restructure the description to match the template: add a 'Changes' section explaining motivation, include the checklist with test confirmation, and specify release impact (CI/dev-only).
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title directly describes the main change: starting the Cloudflare e2e Wrangler process directly instead of through pnpm, which matches the primary objective of the PR.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/cloudflare-do-e2e-pnpm11

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts (1)

239-240: ⚡ Quick win

Wrap JSON parsing with runtime-output-enriched error handling.

If response.json() throws (empty/non-JSON body), diagnostics lose the wrangler stdout/stderr context added in this PR.

Suggested diff
-  const parsed = (await response.json()) as WranglerRuntimeResponse<TPayload>
-  return parsed
+  try {
+    const parsed = (await response.json()) as WranglerRuntimeResponse<TPayload>
+    return parsed
+  } catch (error) {
+    const output = runtime.getOutput()
+    throw createRuntimeError(
+      `Invalid wrangler dev runtime response body: ${String(error)}`,
+      output.stderr,
+      output.stdout,
+    )
+  }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts`
around lines 239 - 240, The JSON parse can throw and lose the enriched wrangler
diagnostics; replace the direct await response.json() used to produce parsed
(typed as WranglerRuntimeResponse<TPayload>) with a safe parse: read the raw
body via await response.text(), then try JSON.parse that string inside a
try/catch and on error throw a new Error that includes the original parse error
message plus the raw response body and the wrangler stdout/stderr variables
introduced in this PR (e.g. wranglerStdout, wranglerStderr) so test failures
retain full runtime output context.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts`:
- Around line 230-234: The error message in the catch block that builds the
runtime error currently says "Timed out waiting for wrangler dev runtime
response" but this catch handles all fetch/failure cases; update the message
passed to createRuntimeError (where runtime.getOutput() and createRuntimeError
are used) to a non-timeout-specific wording such as "Failed to fetch wrangler
dev runtime response" or "Error fetching wrangler dev runtime response", and
include String(error) and output.stderr as before so DNS/connection/reset errors
are not mislabeled.

---

Nitpick comments:
In
`@packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts`:
- Around line 239-240: The JSON parse can throw and lose the enriched wrangler
diagnostics; replace the direct await response.json() used to produce parsed
(typed as WranglerRuntimeResponse<TPayload>) with a safe parse: read the raw
body via await response.text(), then try JSON.parse that string inside a
try/catch and on error throw a new Error that includes the original parse error
message plus the raw response body and the wrangler stdout/stderr variables
introduced in this PR (e.g. wranglerStdout, wranglerStderr) so test failures
retain full runtime output context.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 7fb1f666-05c1-4de6-aa72-c814c2703d72

📥 Commits

Reviewing files that changed from the base of the PR and between 6d9e4c6 and b9eb37c.

📒 Files selected for processing (1)
  • packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts

Comment on lines +230 to +234
} catch (error) {
const output = runtime.getOutput()
throw createRuntimeError(
`Timed out waiting for wrangler dev runtime response: ${String(error)}`,
output.stderr,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use non-timeout-specific wording in the fetch failure path.

At Line 233, this catch handles all fetch errors, not only timeouts. The current text can mislead debugging for DNS/connection/reset failures.

Suggested diff
-      `Timed out waiting for wrangler dev runtime response: ${String(error)}`,
+      `Failed waiting for wrangler dev runtime response: ${String(error)}`,
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
} catch (error) {
const output = runtime.getOutput()
throw createRuntimeError(
`Timed out waiting for wrangler dev runtime response: ${String(error)}`,
output.stderr,
} catch (error) {
const output = runtime.getOutput()
throw createRuntimeError(
`Failed waiting for wrangler dev runtime response: ${String(error)}`,
output.stderr,
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts`
around lines 230 - 234, The error message in the catch block that builds the
runtime error currently says "Timed out waiting for wrangler dev runtime
response" but this catch handles all fetch/failure cases; update the message
passed to createRuntimeError (where runtime.getOutput() and createRuntimeError
are used) to a non-timeout-specific wording such as "Failed to fetch wrangler
dev runtime response" or "Error fetching wrangler dev runtime response", and
include String(error) and output.stderr as before so DNS/connection/reset errors
are not mislabeled.

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented May 18, 2026

More templates

@tanstack/angular-db

npm i https://pkg.pr.new/@tanstack/angular-db@1539

@tanstack/browser-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/browser-db-sqlite-persistence@1539

@tanstack/capacitor-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/capacitor-db-sqlite-persistence@1539

@tanstack/cloudflare-durable-objects-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/cloudflare-durable-objects-db-sqlite-persistence@1539

@tanstack/db

npm i https://pkg.pr.new/@tanstack/db@1539

@tanstack/db-ivm

npm i https://pkg.pr.new/@tanstack/db-ivm@1539

@tanstack/db-sqlite-persistence-core

npm i https://pkg.pr.new/@tanstack/db-sqlite-persistence-core@1539

@tanstack/electric-db-collection

npm i https://pkg.pr.new/@tanstack/electric-db-collection@1539

@tanstack/electron-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/electron-db-sqlite-persistence@1539

@tanstack/expo-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/expo-db-sqlite-persistence@1539

@tanstack/node-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/node-db-sqlite-persistence@1539

@tanstack/offline-transactions

npm i https://pkg.pr.new/@tanstack/offline-transactions@1539

@tanstack/powersync-db-collection

npm i https://pkg.pr.new/@tanstack/powersync-db-collection@1539

@tanstack/query-db-collection

npm i https://pkg.pr.new/@tanstack/query-db-collection@1539

@tanstack/react-db

npm i https://pkg.pr.new/@tanstack/react-db@1539

@tanstack/react-native-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/react-native-db-sqlite-persistence@1539

@tanstack/rxdb-db-collection

npm i https://pkg.pr.new/@tanstack/rxdb-db-collection@1539

@tanstack/solid-db

npm i https://pkg.pr.new/@tanstack/solid-db@1539

@tanstack/svelte-db

npm i https://pkg.pr.new/@tanstack/svelte-db@1539

@tanstack/tauri-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/tauri-db-sqlite-persistence@1539

@tanstack/trailbase-db-collection

npm i https://pkg.pr.new/@tanstack/trailbase-db-collection@1539

@tanstack/vue-db

npm i https://pkg.pr.new/@tanstack/vue-db@1539

commit: b9eb37c

@github-actions
Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 114 kB

ℹ️ View Unchanged
Filename Size
packages/db/dist/esm/collection/change-events.js 1.39 kB
packages/db/dist/esm/collection/changes.js 1.38 kB
packages/db/dist/esm/collection/cleanup-queue.js 810 B
packages/db/dist/esm/collection/events.js 434 B
packages/db/dist/esm/collection/index.js 3.61 kB
packages/db/dist/esm/collection/indexes.js 1.99 kB
packages/db/dist/esm/collection/lifecycle.js 1.69 kB
packages/db/dist/esm/collection/mutations.js 2.47 kB
packages/db/dist/esm/collection/state.js 5.26 kB
packages/db/dist/esm/collection/subscription.js 3.74 kB
packages/db/dist/esm/collection/sync.js 2.88 kB
packages/db/dist/esm/collection/transaction-metadata.js 144 B
packages/db/dist/esm/deferred.js 207 B
packages/db/dist/esm/errors.js 4.92 kB
packages/db/dist/esm/event-emitter.js 748 B
packages/db/dist/esm/index.js 3 kB
packages/db/dist/esm/indexes/auto-index.js 830 B
packages/db/dist/esm/indexes/base-index.js 729 B
packages/db/dist/esm/indexes/basic-index.js 2.05 kB
packages/db/dist/esm/indexes/btree-index.js 2.17 kB
packages/db/dist/esm/indexes/index-registry.js 820 B
packages/db/dist/esm/indexes/reverse-index.js 538 B
packages/db/dist/esm/local-only.js 890 B
packages/db/dist/esm/local-storage.js 2.1 kB
packages/db/dist/esm/optimistic-action.js 359 B
packages/db/dist/esm/paced-mutations.js 496 B
packages/db/dist/esm/proxy.js 3.75 kB
packages/db/dist/esm/query/builder/functions.js 919 B
packages/db/dist/esm/query/builder/index.js 5.25 kB
packages/db/dist/esm/query/builder/ref-proxy.js 1.2 kB
packages/db/dist/esm/query/compiler/evaluators.js 1.62 kB
packages/db/dist/esm/query/compiler/expressions.js 430 B
packages/db/dist/esm/query/compiler/group-by.js 2.69 kB
packages/db/dist/esm/query/compiler/index.js 4.13 kB
packages/db/dist/esm/query/compiler/joins.js 2.34 kB
packages/db/dist/esm/query/compiler/order-by.js 1.72 kB
packages/db/dist/esm/query/compiler/select.js 1.11 kB
packages/db/dist/esm/query/effect.js 4.78 kB
packages/db/dist/esm/query/expression-helpers.js 1.43 kB
packages/db/dist/esm/query/ir.js 829 B
packages/db/dist/esm/query/live-query-collection.js 360 B
packages/db/dist/esm/query/live/collection-config-builder.js 7.88 kB
packages/db/dist/esm/query/live/collection-registry.js 264 B
packages/db/dist/esm/query/live/collection-subscriber.js 1.95 kB
packages/db/dist/esm/query/live/internal.js 145 B
packages/db/dist/esm/query/live/utils.js 1.64 kB
packages/db/dist/esm/query/optimizer.js 2.62 kB
packages/db/dist/esm/query/predicate-utils.js 2.97 kB
packages/db/dist/esm/query/query-once.js 359 B
packages/db/dist/esm/query/subset-dedupe.js 960 B
packages/db/dist/esm/scheduler.js 1.3 kB
packages/db/dist/esm/SortedMap.js 1.3 kB
packages/db/dist/esm/strategies/debounceStrategy.js 247 B
packages/db/dist/esm/strategies/queueStrategy.js 428 B
packages/db/dist/esm/strategies/throttleStrategy.js 246 B
packages/db/dist/esm/transactions.js 2.9 kB
packages/db/dist/esm/utils.js 927 B
packages/db/dist/esm/utils/array-utils.js 273 B
packages/db/dist/esm/utils/browser-polyfills.js 304 B
packages/db/dist/esm/utils/btree.js 5.61 kB
packages/db/dist/esm/utils/comparison.js 1.05 kB
packages/db/dist/esm/utils/cursor.js 457 B
packages/db/dist/esm/utils/index-optimization.js 1.54 kB
packages/db/dist/esm/utils/type-guards.js 157 B
packages/db/dist/esm/virtual-props.js 360 B

compressed-size-action::db-package-size

@github-actions
Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 4.24 kB

ℹ️ View Unchanged
Filename Size
packages/react-db/dist/esm/index.js 249 B
packages/react-db/dist/esm/useLiveInfiniteQuery.js 1.32 kB
packages/react-db/dist/esm/useLiveQuery.js 1.34 kB
packages/react-db/dist/esm/useLiveQueryEffect.js 355 B
packages/react-db/dist/esm/useLiveSuspenseQuery.js 567 B
packages/react-db/dist/esm/usePacedMutations.js 401 B

compressed-size-action::react-db-package-size

@KyleAMathews KyleAMathews merged commit d5f7a1e into main May 18, 2026
12 checks passed
@KyleAMathews KyleAMathews deleted the fix/cloudflare-do-e2e-pnpm11 branch May 18, 2026 17:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants