Section 13

Reference

Environment variables

VariableHoldsNeeded for
LEAS_IOS_DIST_CERT_BASE64base64 of dist.p12iOS build
LEAS_IOS_DIST_CERT_PASSWORDthat file's passwordiOS build
LEAS_IOS_PROVISIONING_PROFILE_BASE64base64 of the profileiOS build
LEAS_ASC_API_KEY_BASE64base64 of the .p8iOS submit
LEAS_ASC_KEY_IDkey ID, e.g. ABCD1234EFiOS submit
LEAS_ASC_ISSUER_IDteam issuer UUIDiOS submit
LEAS_ANDROID_KEYSTORE_BASE64base64 of the keystoreAndroid build
LEAS_ANDROID_KEYSTORE_PASSWORDstore passwordAndroid build
LEAS_ANDROID_KEY_ALIASusually uploadAndroid build
LEAS_ANDROID_KEY_PASSWORDkey passwordAndroid build
LEAS_PLAY_SERVICE_ACCOUNT_BASE64base64 of the service account JSONAndroid submit

Every credential resolves from either a file path in leas.json or its environment variable. That is what lets identical code run on your laptop and on a CI worker.

What each file does

PathResponsibility
src/cli.jsCommand parsing and orchestration.
src/config.jsReads leas.json, resolves profile inheritance.
src/credentials.jsTurns files or env vars into usable keychains and keys.
src/build-ios.jsArchive and export via xcodebuild.
src/build-android.jsGradle build, then re-sign with the upload key.
src/submit-ios.jsValidate, upload, and poll App Store Connect.
src/submit-android.jsThe Play Developer API edit lifecycle.
src/cloud.jsDispatch to the fleet, stream logs, fetch artifacts.
.github/workflows/The fleet definition — the machines themselves.

Two implementation details worth knowing

iOS signing never touches your login keychain. leas creates a throwaway keychain, imports the certificate, marks it accessible to codesign, builds, and deletes the keychain afterwards — even if the build fails.

Android is re-signed rather than reconfigured. The Expo template signs release builds with the debug keystore. Rather than patching your build.gradle, leas builds normally and then re-signs the artifact with your real upload key. Idempotent, and it leaves your Gradle files exactly as Expo generated them.