Skip to content

chore: add expo-doctor to CI and align deps to Expo SDK 57 (SDK-744) - #183

Merged
brax10ward merged 4 commits into
masterfrom
braxton/sdk-744-expo-doctor-ci
Aug 25, 2026
Merged

chore: add expo-doctor to CI and align deps to Expo SDK 57 (SDK-744)#183
brax10ward merged 4 commits into
masterfrom
braxton/sdk-744-expo-doctor-ci

Conversation

@brax10ward

@brax10ward brax10ward commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Linear Link

SDK-744

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Refactor (non-breaking change which cleans up code)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update
  • This change impacts security

Why

Dependabot PR #179 failed CI because grouped bumps included react-native 0.87 which no released Expo SDK supports. Add guardrails so bad dep combos fail at lint (~1 min) instead of at platform build (~13 min), and hold RN / React / Expo-managed packages to Expo SDK 57's compat matrix.

Changes

  • CI: expo-doctor step in the lint job (gates both platform builds).
  • Dependabot: ignore RN / React / @react-native/* / @babel/core / async-storage minor+major bumps; carve out an expo-sdk group for coordinated SDK upgrades; add a 7-day cooldown.
  • Deps: align both workspaces to Expo SDK 57 (react 19.2.3, react-native 0.86.2, @babel/core ^7.29.0); upgrade TypeScript 5 → 6 (added @types/node and explicit types: in tsconfig — the old "TS 6 deprecates baseUrl" note was stale); bump transitive js-yaml to ^4.3.1 via resolutions (GHSA-5p4m-2wfm-xmqj).
  • Workspace: nmHoistingLimits: workspacesnone so RN / React hoist to a single copy on disk (fixes expo-doctor's duplicate-dep check).
  • Example: dropped deprecated splash field from app.json (SDK 57 wants the expo-splash-screen plugin).

Verification

yarn tsc silent · yarn lint unchanged (0 errors) · yarn test 25/25 · npx expo-doctor 21/21 pass.

Checklist:

  • New and existing tests pass locally with my changes
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • I have tested on a physical iOS device and Android device
  • I have added tests that prove my fix is effective or that my feature works
  • I have followed the Code Review and Code Review Security guidelines
  • I have checked my code against flaws from the OWASP Top 10

Dependabot PR #179 failed both platform builds because the grouped npm
bump included react-native 0.86 → 0.87, which no released Expo SDK
supports yet. Add guardrails so the same class of failure doesn't
recur.

- Add an expo-doctor step to the lint job so bad dep combos fail in
  ~1 min instead of at platform build.
- Ignore react, @types/react, react-native, @react-native/*, @babel/core
  minor+major bumps in the root dependabot block; add
  @react-native-async-storage/async-storage and @babel/core to the
  /example ignores. These are Expo-compat-matrix packages and must
  move only with an Expo SDK bump.
- Carve out an expo-sdk group in the /example block so future Expo
  majors/minors land in their own PR instead of the routine bundle.
- Align root package.json and example/package.json to the SDK 57 pins
  (react 19.2.3, react-native 0.86.2, babel-preset 0.86.2,
  @babel/core ^7.29.0) so yarn resolves to a single hoisted copy.
- Set nmHoistingLimits: none so react/react-native hoist to root and
  expo-doctor no longer sees per-workspace duplicates.
- Remove deprecated splash field from example/app.json (SDK 57
  requires expo-splash-screen plugin config instead).
- Add expo.install.exclude for typescript (we hold at 5.x) and
  expo.doctor.reactNativeDirectoryCheck.exclude for our own library.
- Add AGENTS.MD to .gitignore alongside CLAUDE.md.
Comment thread yarn.lock Outdated
Comment thread .github/dependabot.yml
@semgrep-code-atomicfi

Copy link
Copy Markdown

Semgrep found 1 dependabot-missing-cooldown finding:

This Dependabot configuration does not set a cooldown period. Newly published packages can be malicious or unstable. Add a cooldown block with default-days: 7 to each package-ecosystem entry under updates to wait 7 days before proposing updates to newly published package versions. Reference: https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#cooldown

⚪️ This finding does not block your pull request.
Ignore this finding from dependabot-missing-cooldown

The prior ignore rule said "typescript 6 deprecates baseUrl and other
config we use" — verified against this repo's tsconfig files, that's
not accurate. Neither root nor example uses baseUrl.

The real TS 6 change was tighter @types auto-inclusion under
moduleResolution: bundler; jest globals and Node builtins are no
longer auto-picked-up. Fixed by installing @types/node and setting
an explicit types field in root tsconfig.

Drop the typescript ignore from both dependabot blocks and remove
typescript from expo.install.exclude so expo-doctor validates it
against Expo SDK 57's ~6.0.3 pin.
Semgrep flagged that no cooldown was set. A 7-day window lets malicious
or unstable newly published versions be caught upstream before we
propose an update to them.
GHSA-5p4m-2wfm-xmqj (quadratic complexity on !!omap resolution) covers
js-yaml 4.x below 4.3.1. Semgrep flagged the transitive 4.3.0 pulled
in by @eslint/eslintrc, @expo/xcpretty, and cosmiconfig; pin all three
to ^4.3.1 via yarn resolutions. @istanbuljs/load-nyc-config stays on
3.14.1 which isn't in the advisory range.
@brax10ward
brax10ward marked this pull request as ready for review August 25, 2026 20:18
@brax10ward
brax10ward requested a review from a team as a code owner August 25, 2026 20:18
@brax10ward
brax10ward merged commit 45a82b7 into master Aug 25, 2026
4 of 5 checks passed
@brax10ward
brax10ward deleted the braxton/sdk-744-expo-doctor-ci branch August 25, 2026 20:34
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