expo / expo/eas-cli

eas build uploads include Claude worktrees

Open
#4,122 0 comments 0 reactions 0 assignees View on GitHub
needs review
Dominant language
TypeScript
Stars
1.4k
Forks
236
Avg merge
3d 8h
Merged PRs (30d)
98

Description

### Build/Submit details page URL

https://expo.dev/accounts/yousician/projects/lessons-app/builds/e4e83edf-ab20-4b59-8847-b1b984e1a4ab

### Summary

When archiving the project for a build, eas-cli's working-directory copy step ignores only things from `.easignore` / `.gitignore` files. It never looks at `.git/info/exclude` or the global `core.excludesFile`, even though git itself does.

In our project, agent tooling keeps git worktrees under `.claude/worktrees/`, excluded via `.git/info/exclude`. Each worktree contains a full checkout with hundreds of MBs of git-lfs binaries, so our "Compressing project files" step produced a huge archive. Nothing in `git status` hints that these files would be uploaded, which makes this very hard to discover when not using a custom `.easignore`.

### Managed or bare?

Bare with CNG

### Environment

expo-env-info 2.1.0 environment info:
System:
OS: macOS 26.5.2
Shell: 5.9 - /bin/zsh
Binaries:
Node: 24.18.0 - /opt/homebrew/bin/node
npm: 11.16.0 - /opt/homebrew/bin/npm
Managers:
CocoaPods: 1.17.0 - /opt/homebrew/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 25.4, iOS 26.4, macOS 26.4, tvOS 26.4, visionOS 26.4, watchOS 26.4
IDEs:
Android Studio: 2025.3 AI-253.30387.90.2532.14935130
Xcode: 26.4.1/17E202 - /usr/bin/xcodebuild
npmPackages:
expo: ~57.0.8 => 57.0.8
expo-router: ~57.0.8 => 57.0.8
expo-updates: ~57.0.10 => 57.0.10
react: 19.2.3 => 19.2.3
react-dom: 19.2.3 => 19.2.3
react-native: 0.86.0 => 0.86.0
react-native-web: ~0.21.2 => 0.21.2
npmGlobalPackages:
eas-cli: 21.4.0
expo-cli: 6.3.12
Expo Workflow: bare

20/20 checks passed. No issues detected!

### Error output

No error — the build succeeds, the archive is just much larger than expected. `EXPO_DEBUG=1` shows `makeShallowCopyAsync` logging `copying` for every file under the excluded directory.

### Reproducible demo or steps to reproduce from a blank project

```bash
npx create-expo-app repro && cd repro
git init && git add . && git commit -m init
# Create a large directory and exclude it the "local-only" git way
mkdir local-only
dd if=/dev/urandom of=local-only/blob bs=1m count=100
echo "local-only/" >> .git/info/exclude
git status # clean — git considers local-only/ ignored
eas init
eas build --platform ios --profile production
```

Contributor guide

Open the contributing guide

Research direction

Start by locating the makeShallowCopyAsync implementation and reproduce the issue with the provided git/info/exclude and eas build commands. Done means files excluded by .git/info/exclude or the global core.excludesFile are not copied into the build archive, while the existing archive behavior remains intact.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
build-system, cli
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.