Skip to content

expo doctor timeout crashes the build instead of skipping it #4479

Description

@Sid110307

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs reviewIssue is ready to be reviewed by a maintainer

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions