Build/Submit details page URL
No response
Summary
eas-cli 24.8.0, eas build --local, Android, ubuntu-latest GitHub Actions runner.
@expo/build-tools/dist/common/setup.js puts a hardcoded 30s timeout on the expo doctor phase:
const MAX_EXPO_DOCTOR_TIMEOUT_MS = 30 * 1000;
// ...
timeout = setTimeout(async () => {
timedOut = true;
const ppid = nullthrows(promise.child.pid);
const pids = await getParentAndDescendantProcessPidsAsync(ppid);
pids.forEach((pid) => {
process.kill(pid);
});
ctx.reportError?.(`"expo doctor" timed out`, undefined, {
extras: { buildId: ctx.env.EAS_BUILD_ID },
});
}, MAX_EXPO_DOCTOR_TIMEOUT_MS);
process.kill(pid) isn't wrapped in a try/catch. If a tracked process has already exited by the time this fires, it throws ESRCH and kills the whole build:
node:internal/process/per_thread:225
throw new ErrnoException(err, 'kill');
^
Error: kill ESRCH
at process.kill (node:internal/process/per_thread:225:13)
at .../node_modules/@expo/build-tools/dist/common/setup.js:168:25
at Array.forEach (<anonymous>)
at Timeout._onTimeout (.../node_modules/@expo/build-tools/dist/common/setup.js:167:18)
Managed or bare?
Managed
Environment
19/21 checks passed. 2 checks failed. Possible issues detected:
✖ Check that no duplicate dependencies are installed
Found duplicates for expo:
├─ expo@57.0.13 (at: node_modules/expo)
│ └─ linked to: ../../node_modules/.pnpm/expo@57.0.13_.../node_modules/expo
└─ expo@57.0.13 (at: ../../node_modules/.pnpm/@expo+dom-webview@57.0.1_.../node_modules/expo)
└─ linked to a different installation
✖ Check that packages match versions required by installed Expo SDK
Major version mismatches: @sentry/react-native expected ~7.11.0, found 8.28.0
Patch version mismatches: 22 packages out of date (expo, expo-router, expo-updates, etc. — all trailing the current SDK 57 patch line)
Error output
No response
Reproducible demo or steps to reproduce from a blank project
No minimal repro from a blank project — this is a timing race tied to expo doctor's own check duration approaching the 30s timeout, not something a fresh project triggers (a blank project's expo doctor finishes in a few seconds). It shows up on real-sized projects being built on a loaded/slower CI runner (ubuntu-latest GitHub Actions, standard 2-core), where the checks take long enough to land near the 30s mark. Same project, same eas build --local invocation, no changes between runs: sometimes the timeout fires cleanly and skips, sometimes it races a process's own exit and crashes with ESRCH. Happy to share full CI logs from an affected run if useful, but can't offer a from-scratch reproduction since the timing depends on machine load and check count, not project code.
Build/Submit details page URL
No response
Summary
eas-cli 24.8.0,
eas build --local, Android,ubuntu-latestGitHub Actions runner.@expo/build-tools/dist/common/setup.jsputs a hardcoded 30s timeout on theexpo doctorphase:process.kill(pid)isn't wrapped in a try/catch. If a tracked process has already exited by the time this fires, it throwsESRCHand kills the whole build:Managed or bare?
Managed
Environment
Error output
No response
Reproducible demo or steps to reproduce from a blank project
No minimal repro from a blank project — this is a timing race tied to expo doctor's own check duration approaching the 30s timeout, not something a fresh project triggers (a blank project's expo doctor finishes in a few seconds). It shows up on real-sized projects being built on a loaded/slower CI runner (ubuntu-latest GitHub Actions, standard 2-core), where the checks take long enough to land near the 30s mark. Same project, same eas build --local invocation, no changes between runs: sometimes the timeout fires cleanly and skips, sometimes it races a process's own exit and crashes with ESRCH. Happy to share full CI logs from an affected run if useful, but can't offer a from-scratch reproduction since the timing depends on machine load and check count, not project code.