When you run eas build
, we need to get your source code from your development machine to one of our macOS or Linux build workers. In order to do this, EAS CLI will collect and compress project files into a single archive, and then upload that archive to private cloud storage that is accessible only to the build worker. By default, EAS CLI will produce the archive by copying all files starting from the root of the git repository with the exception of .git
, node_modules
, and all files matched by rules from .gitignore
(or .easignore
if it exists).
.easignore
supports the same path patterns as.gitignore
files, but it can only be located in the root of your git repository and, if it is present, none of the existing.gitignore
files will be respected by EAS CLI.
You likely do not want to upload your node_modules
directory, or maybe you have a .env
file that is ignored by source control. EAS CLI always respects .gitignore
files, but depending on your configuration there might be certain edge cases where EAS behavior is not 100% compliant with git.
You can run eas build:inspect --platform [ios|android] --stage archive --output ~/target/output/path --profile production
and inspect the output directory (in this case ~/target/output/path
) to see which files are included.
By default, or if you set the EAS_NO_VCS
environment variable, EAS CLI will use its own packaging algorithm that approximates git clone --depth 1 ...
and allows you to build with a dirty git working tree. The following limitations apply when using this approach:
- If you have multiple
.gitignore
files, they are applied in isolation starting from the root, so if you have an ignore rule liketest/example
in the parent directory and!example/example1
in thetest
directory then the entireexample
directory will still be ignored. - The
node_modules
directory is ignored by default. - Even if you are using
git-crypt
, all the files are uploaded as they are in your project directory. This means all sensitive files could be uploaded to EAS Build in a non-encrypted state. - The
.git
directory is not uploaded to EAS Build. So if you are using any tools that depend on the state of the Git repository, this might result in unexpected behavior (e.g. sentry reads the commit hash when uploading the source maps). - The content of the submodules will be included as they are in your working directory.
If you set { "cli": { "requireCommit": true } }
at the root level of your eas.json
, EAS CLI will use the git clone --depth 1 ...
command to create a shallow clone of your repository. With this approach, the project uploaded to EAS Build will be exactly the same as in Git - including information like the branch, commit hash, and so on.
Note:
.easignore
is not supported if you setrequireCommit: true
in youreas.json
You can test this on your development machine against your local project directory by running the following command:
# Replace paths below with paths that make sense for your machine / operating system
git clone --local --no-hardlinks --depth 1 file:///path/to/your/git/repo- ~/path/to/clone/to
Alternatively, a fresh git clone
from your remote would also be sufficient.
Environment variables are easy enough to handle, you can set those values using Secrets; but, in some cases, your build may depend on files that you consider sensitive and do not want to commit to source control.
In these cases, you can encode the contents of the file with base64
, save that string as secrets, and then create the file in an EAS Build hook. See "How to use Git submodules" for an example. Alternatively, you can opt out of using Git and use .easignore
instead.
The default workflow does not require that you commit your changes, but git
itself is still used to read some metadata about the repository. You can set the EAS_NO_VCS=1
environment variable to skip using Git for all EAS CLI commands and optionally EAS_PROJECT_ROOT
to define the root of your project if it is different than location of your eas.json
file.
If you want to use .easignore
instead of .gitignore
with EAS_NO_VCS=1
, then you need to place it in the directory pointed to by the EAS_PROJECT_ROOT
environment variable (if it's set), or in the same directory as your eas.json
otherwise.