Skip to content

build:inspect archive on Windows does not respect nested .gitignore entries #3733

@timukasr

Description

@timukasr

Build/Submit details page URL

No response

Summary

On Windows, eas build:inspect --stage archive does not respect .gitignore files in subdirectories of a monorepo. Root .gitignore entries are respected, but nested package .gitignore entries are not.

This looks like a Windows path separator bug in the local archive copy logic.

In packages/eas-cli/src/vcs/local.ts, nested .gitignore prefixes are stored with /, for example:

packages/app/

but path.relative(...) returns Windows paths with \, for example:

packages\app\android

Then Ignore.ignores() checks:

relativePath.startsWith(prefix)

which fails for nested prefixes on Windows. Root ignore rules still work because their prefix is ''.

There also appears to be a related directory-rule edge case: rules like .expo/ and dist/ should ignore the directory itself during fs.cp filtering, but the path passed to ignore.ignores(...) may not have a trailing slash.

Managed or bare?

managed

Environment

> npx expo-env-info

  expo-env-info 2.0.12 environment info:
    System:
      OS: Windows 10 10.0.19045
    Binaries:
      Node: 24.15.0 - ~\AppData\Local\mise\installs\node\24.15.0\node.EXE
      npm: 11.12.1 - ~\AppData\Local\mise\installs\node\24.15.0\npm.CMD
    SDKs:
      Android SDK:
        API Levels: 28, 29, 31, 33, 34, 35, 36
        Build Tools: 30.0.3, 33.0.1, 34.0.0, 35.0.0, 35.0.1, 36.0.0
        System Images: android-26 | Google APIs Intel x86_64 Atom, android-26 | Google Play Intel x86 Atom, android-28 | Google Play Intel x86_64 Atom, android-34 | Google Play Intel x86_64 Atom, android-35 | Google Play Intel x86_64 Atom, android-36 | Pre-Release 16 KB Page Size Google Play Intel x86_64 Atom, android-37.0 | Pre-Release 16 KB Page Size Google Play Intel x86_64 Atom
    npmPackages:
      expo: ~54.0.33 => 54.0.34
      expo-router: ~6.0.23 => 6.0.23
      react: 19.1.0 => 19.1.0
      react-dom: 19.1.0 => 19.1.0
      react-native: 0.81.5 => 0.81.5
      react-native-web: ~0.21.0 => 0.21.2
    Expo Workflow: managed
> npx expo-doctor
17/17 checks passed. No issues detected!
> eas --version
eas-cli/18.12.3 win32-x64 node-v24.15.0

Error output

No response

Reproducible demo or steps to reproduce from a blank project

npx create-expo-app@latest eas-ignore-repro
cd eas-ignore-repro
git init

mkdir nested
echo "ignored.txt" > nested\.gitignore
echo "should not be archived" > nested\ignored.txt

eas build:inspect --platform android --stage archive --output ~/archive

Notice that file nested/ignored.txt is in archive although it should not be.

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