e69c3ae5ce
## What The twenty-infra **"Deploy Website"** workflow has failed every run since 06-26 — at OpenNext's R2 incremental-cache step, **not** the build: ``` Failed to provision remote R2 bucket "twenty-website-cache-dev" for binding "NEXT_INC_CACHE_R2_BUCKET": Failed to check whether bucket exists: … Premature close ``` ## Root cause `@opennextjs/cloudflare`'s `ensureR2Bucket()` calls the Cloudflare SDK's `r2.buckets.get()`. On **Node 24** (which the deploy pins) undici truncates the **gzip-compressed** Cloudflare API response → `Premature close`. The SDK's own retries don't help (it's systematic, not flaky), and pre-creating the bucket doesn't help (it always `.get()`s first). This is **pre-existing and unrelated to the multi-locale change** (#22257): the *Build Worker* step succeeds, and the identical error appears on 06-26 runs (two days before that merged). ## Fix opennext **1.20.0** fixes this precisely — it passes `defaultHeaders: { "Accept-Encoding": "identity" }` to the Cloudflare SDK client, so the API returns **uncompressed** responses (no decompression → no premature close). **Node 24 is kept**, and no twenty-infra change is needed — the deploy runs `twenty`'s own `npx opennextjs-cloudflare`, so bumping the dep here is enough. `^1.0.0 → ^1.20.0`. **1.20.0, not the latest 1.20.1**, because the repo's `npmMinimalAgeGate: 3d` still quarantines 1.20.1 (published 06-26); 1.20.0 (06-25) is past the gate and carries the same fix. ## Verification - Resolved to `1.20.0`; confirmed `Accept-Encoding: identity` is in the installed `dist/cli/utils/ensure-r2-bucket.js`. - `nx typecheck twenty-website` green (OpenNext config API unchanged across the bump). - Diff is just `package.json` + `yarn.lock`. ⚠️ Full confirmation needs a **Deploy Website** run (exercises the build + the R2 provision step), which I can't trigger — please re-run it after merge.
57 lines
1.9 KiB
JSON
57 lines
1.9 KiB
JSON
{
|
|
"name": "twenty-website",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "npx next dev --port 3002",
|
|
"build": "npx next build",
|
|
"start": "npx next start --port 3002",
|
|
"preview": "opennextjs-cloudflare build && opennextjs-cloudflare preview",
|
|
"deploy:dev": "opennextjs-cloudflare build && opennextjs-cloudflare deploy --env dev",
|
|
"deploy:prod": "opennextjs-cloudflare build && opennextjs-cloudflare deploy --env prod",
|
|
"cf-typegen": "wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts"
|
|
},
|
|
"dependencies": {
|
|
"@babel/runtime": "^7.27.6",
|
|
"@base-ui/react": "^1.3.0",
|
|
"@calcom/embed-react": "^1.5.3",
|
|
"@linaria/core": "^7.0.0",
|
|
"@linaria/react": "^7.0.1",
|
|
"@lingui/core": "^5.1.2",
|
|
"@lingui/react": "^5.1.2",
|
|
"@lottiefiles/dotlottie-react": "^0.18.10",
|
|
"@tabler/icons-react": "^3.41.1",
|
|
"@wyw-in-js/babel-preset": "^0.8.1",
|
|
"@wyw-in-js/transform": "^0.8.1",
|
|
"next": "^16.2.6",
|
|
"next-with-linaria": "^1.3.0",
|
|
"react": "19.2.3",
|
|
"react-dom": "19.2.3",
|
|
"server-only": "^0.0.1",
|
|
"stripe": "^20.3.1",
|
|
"three": "^0.184.0",
|
|
"twenty-shared": "workspace:*",
|
|
"twenty-ui": "workspace:*",
|
|
"zod": "^4.1.11"
|
|
},
|
|
"devDependencies": {
|
|
"@babel/plugin-transform-export-namespace-from": "^7.24.6",
|
|
"@babel/preset-react": "^7.24.6",
|
|
"@babel/preset-typescript": "^7.24.6",
|
|
"@lingui/cli": "^5.1.2",
|
|
"@lingui/conf": "5.1.2",
|
|
"@lingui/format-po": "5.1.2",
|
|
"@lingui/swc-plugin": "^5.11.0",
|
|
"@opennextjs/cloudflare": "^1.20.0",
|
|
"@testing-library/jest-dom": "^6.6.3",
|
|
"@testing-library/react": "^16.3.0",
|
|
"@testing-library/user-event": "^14.6.1",
|
|
"@types/node": "^20",
|
|
"@types/react": "^19",
|
|
"@types/react-dom": "^19",
|
|
"@types/three": "^0.184.1",
|
|
"babel-plugin-react-compiler": "1.0.0",
|
|
"jest-environment-jsdom": "30.0.0-beta.3",
|
|
"wrangler": "^4.0.0"
|
|
}
|
|
}
|