Skip to content

Conversation

@sjchmiela
Copy link
Contributor

@sjchmiela sjchmiela commented Jan 8, 2026

Consolidate eas-build packages into eas-cli monorepo

This PR completes the migration of packages from the eas-build repository into eas-cli, consolidating all EAS Build tooling into a single monorepo.

Background

Previously, the EAS Build libraries lived in a separate expo/eas-build repository. This made development and releases more complex, requiring coordination between two repos. By consolidating into eas-cli, we can:

  • Develop and test changes across CLI and build tools in a single PR
  • Simplify the release process
  • Reduce dependency version drift between packages

Migrated Packages

The following packages have been moved from eas-build:

Package npm Name License
build-tools @expo/build-tools BUSL-1.1
eas-build-job @expo/eas-build-job MIT
steps @expo/steps BUSL-1.1
logger @expo/logger BUSL-1.1
downloader @expo/downloader BUSL-1.1
turtle-spawn @expo/turtle-spawn BUSL-1.1
template-file @expo/template-file BUSL-1.1
local-build-plugin eas-cli-local-build-plugin BUSL-1.1
create-eas-build-function create-eas-build-function MIT

Changes

Package Configuration:

  • Updated repository and bugs URLs in all migrated package.json files to point to expo/eas-cli
  • Updated README repository links
  • Aligned dependency versions across eas-cli, eas-json, and worker to use workspace packages (1.0.260)

Documentation:

  • Expanded CLAUDE.md with comprehensive documentation covering all packages, architectural patterns, and development workflows
  • Added AGENTS.md for AI agent guidance

Licensing:

  • Added LICENSE-BUSL for BUSL-1.1 licensed packages
  • Added LICENSE-eas-build-job for MIT licensed packages

Build Infrastructure:

  • Added .gitignore entries for build artifacts: dist, dist_*, tsconfig.tsbuildinfo, vim swap files
  • Added bin/eas-cli-local-build-plugin symlink for local build testing

Dependency Cleanup:

  • Removed stale npm registry entries from yarn.lock - workspace packages now resolve locally

Testing

  • yarn install completes successfully
  • yarn build builds all packages
  • yarn test passes
  • eas build --local works with the new package structure
  • Worker builds and runs correctly against workspace packages

Follow-up

After this PR is merged:

  • Archive or deprecate the expo/eas-build repository
  • Update any CI/CD pipelines that referenced the old repo
  • Update internal documentation pointing to eas-build

@sjchmiela sjchmiela added the no changelog PR that doesn't require a changelog entry label Jan 8, 2026
@sjchmiela sjchmiela force-pushed the stanley/add-eas-build branch 2 times, most recently from c615871 to 12e1ee6 Compare January 8, 2026 11:55
@sjchmiela sjchmiela force-pushed the stanley/add-eas-build branch from 12e1ee6 to 174dcc2 Compare January 8, 2026 12:01
@sjchmiela sjchmiela changed the base branch from main to stanley/update-worker January 8, 2026 12:02
@github-actions
Copy link

github-actions bot commented Jan 8, 2026

⏩ The changelog entry check has been skipped since the "no changelog" label is present.

Base automatically changed from stanley/update-worker to main January 8, 2026 15:10
Without rootDir, TypeScript places compiled output in dist/src/ instead
of dist/ when the project has references. This breaks module resolution
since package.json points to dist/index.js.

Affected packages:
- @expo/build-tools
- eas-cli-local-build-plugin
- @expo/worker
Node.js 20+ has stricter TypeScript types where Buffer no longer directly
satisfies ArrayBufferView in all contexts. Wrapping Buffer instances with
new Uint8Array() resolves type errors for:

- fs.writeFile() calls with binary data
- crypto.createHash().update() calls
- fs.read() buffer parameters

This is a type-level fix only; runtime behavior is unchanged since Buffer
extends Uint8Array.
Replace stream.pipeline with tar's built-in file option for archive
extraction. This simplifies the code and avoids TypeScript type
mismatches between Node.js stream types and tar's expected input types.

The file option handles opening and reading the archive internally,
making the code cleaner and more maintainable.
…path

The expression `output_format + '-' ?? ''` always evaluates to a non-null
string (concatenation result), making the ?? operator ineffective.

Changed to a ternary expression that properly checks if output_format
is defined before adding the dash suffix.
The ctx parameter is now properly typed and used, so the ts-expect-error
directive is no longer needed.
Enables corepack to automatically use the correct yarn version.
Change pattern from 'tsconfig.tsbuildinfo' to '*.tsbuildinfo' to ignore
all TypeScript incremental compilation cache files regardless of
tsconfig filename (e.g., tsconfig.build.tsbuildinfo).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no changelog PR that doesn't require a changelog entry

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants