re worker size: 8GiB of memory works consistently. The rollup process when building our next.js frontend is taking up a lot of memory and none of the recommendations to limit it I found online are doing anything.
re docker build:
I’ve seen this done by using a build argument and COPY --from pointing to the separately built frontend image, like:
Thanks for the commands, I was hoping for a way to automatically resolve that dependency and build it, but this should work as well!
Re depot worker: You’re right, it seems like our memory footprint grew again. I get the following error on both the legacy and depot builders, but not locally (running fly deploy --build-arg GIT_REVISION=$(git rev-parse --short HEAD) --vm-memory 8192 --local-only --build-only, which probably doesn’t actually limit the local memory usage). Manually changing the legacy builder size to 16GiB works.
0.680 > tsc && vite build
0.680
10.36 vite v5.4.9 building for production...
10.45 transforming...
31.61 ✓ 3272 modules transformed.
34.09 rendering chunks...
50.09
50.09 <--- Last few GCs --->
50.09
50.09 [31:0x77c2000] 39617 ms: Scavenge 2037.6 (2082.7) -> 2037.1 (2083.7) MB, pooled: 0 MB, 6.66 / 0.00 ms (average mu = 0.156, current mu = 0.097) allocation failure;
50.09 [31:0x77c2000] 40607 ms: Mark-Compact 2039.1 (2084.1) -> 2037.3 (2085.4) MB, pooled: 0 MB, 979.67 / 0.00 ms (average mu = 0.110, current mu = 0.037) allocation failure; scavenge might not succeed
50.09
50.09
50.09 <--- JS stacktrace --->
50.09
50.09 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
50.09 ----- Native stack trace -----
50.09
50.09 1: 0xe19de0 node::OOMErrorHandler(char const*, v8::OOMDetails const&) [node]
50.10 2: 0x1240310 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, v8::OOMDetails const&) [node]
50.10 3: 0x12405e7 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, v8::OOMDetails const&) [node]
50.10 4: 0x146e125 [node]
50.10 5: 0x146e153 [node]
50.10 6: 0x148720a [node]
50.10 7: 0x148a3d8 [node]
50.10 8: 0x1cc5711 [node]
50.27 Aborted
50.27 ELIFECYCLE Command failed with exit code 134.
------
Error: failed to fetch an image or build from source: error building: failed to solve: process "/bin/sh -c pnpm build" did not complete successfully: exit code: 134
Waiting for depot builder...
Error: failed to fetch an image or build from source: error building: timed out connecting to machine: failed to list workers: Unavailable: connection error: desc = "transport: authentication handshake failed: EOF"
5 months later this is still broken, and for multiple users as it seems. Why would you make this half-baked thing a default? So frustrated with my fly experience.
Waiting for depot builder...
Waiting for depot builder...
🌎DEBUG <-- 200 https://api.fly.io/graphql (378.56ms)
DEBUG {
"data": {
"ensureDepotRemoteBuilder": {
"buildId": "vzr5fpn3cn",
"buildToken": "REDACTED"
}
}
}
DEBUG result image:<nil> error:error building: timed out connecting to machine: failed to list workers: Unavailable: connection error: desc = "transport: authentication handshake failed: EOF"
DEBUG --> POST https://api.fly.io/graphql
DEBUG {
"query": "\nmutation FinishBuild ($input: FinishBuildInput!) {\n\tfinishBuild(input: $input) {\n\t\tid\n\t\tstatus\n\t\twallclockTimeMs\n\t}\n}\n",
"variables": {
"input": {
"appName": "kapybro",
"buildId": "2497206",
"builderMeta": {
"builderType": "depot.dev",
"buildkitEnabled": false,
"dockerVersion": "",
"platform": "",
"remoteAppName": "",
"remoteMachineId": ""
},
"clientMutationId": "",
"finalImage": {
"id": "",
"sizeBytes": 0,
"tag": ""
},
"logs": "error building: timed out connecting to machine: failed to list workers: Unavailable: connection error: desc = \"transport: authentication handshake failed: EOF\"",
"machineId": "",
"status": "failed",
"strategiesAttempted": [
{
"error": "error building: timed out connecting to machine: failed to list workers: Unavailable: connection error: desc = \"transport: authentication handshake failed: EOF\"",
"note": "",
"result": "failed",
"strategy": "depot.dev"
}
],
"timings": {
"buildAndPushMs": 301273,
"buildMs": 301273,
"builderInitMs": 924,
"contextBuildMs": -1,
"imageBuildMs": 301273,
"pushMs": -1
}
}
},
"operationName": "FinishBuild"
}
DEBUG {0x14000981710}
DEBUG <-- 200 https://api.fly.io/graphql (520.14ms)
DEBUG {
"data": {
"finishBuild": {
"id": "2497206",
"status": "failed",
"wallclockTimeMs": 301706
}
}
}
DEBUG Task manager done
DEBUG done monitoring tokens
DEBUG started querying for host issues
DEBUG --> POST https://api.fly.io/graphql
DEBUG {
"query": "query($appName: String!) { apphostissues:app(name: $appName) { hostIssues { nodes { internalId message createdAt updatedAt } } } }",
"variables": {
"appName": "kapybro"
}
}
DEBUG {}
DEBUG started querying for statuspage incidents
DEBUG <-- 200 https://api.fly.io/graphql (401.21ms)
DEBUG {
"data": {
"apphostissues": {
"hostIssues": {
"nodes": []
}
}
}
}
DEBUG querying for host issues resulted to []
DEBUG querying for statuspage incidents resulted to &{[]}
Error: failed to fetch an image or build from source: error building: timed out connecting to machine: failed to list workers: Unavailable: connection error: desc = "transport: authentication handshake failed: EOF"
Error: failed to fetch an image or build from source: error building: timed out connecting to machine: failed to list workers: Unavailable: connection error: desc = "transport: authentication handshake failed: EOF"
Having never gotten it in the past.
Any workarounds?
This build error almost gave me a heart attack. For those having the problem, try uisng the cli, fly deploy --depot=false . This is a big error on fly part in my opinion. They should say something or notify.
It’s been at least 12 hours now that the depot builder is not working for me.
==> Verifying app config
Validating fly/fly.toml
✓ Configuration is valid
--> Verified app config
==> Building image
Waiting for depot builder...
[Me terminating using CTRL+C after 10 mintues]
WARN failed to finish build in graphql: Post "https://api.fly.io/graphql": context canceled
Deploying from the command using --depot=false works, but is definitely NOT a reasonable solution (for example, our Github actions use depot by default, meaning all the deployments fail).
Anyone from fly.io can comment on this issue please?
The fact that the company pushes that as the de-facto standard:
But, some weeks after the Depot migration is complete and verified, we’ll offer a free allowance of 300 build minutes per month. After 300 minutes, we’ll bill you $0.05 per build minute.
Around that time, we’ll likely stop supporting the standard Fly remote builder.
It’s slower than Depot, but if you configure your GHA caching, you might be able to improve the build time. I haven’t tried it myself so you’ll have to tinker around w/ it.
got told my depot builder was located in a low-capacity region (Singapore I think?), so they moved it to hkg.
some time passed waiting for depot folks to fix something, not sure if anything needed a fix considering the first point
Eventually, after moving the builder, it started to work. I asked them to take a look at this thread for issues other folks experiencing, but got ignored, I guess.
So my guess is to try to move your builder to a different region, if that doesn’t help - contact the support.