ashleigh-hopkins/app-build

Fully self-hosted GitHub Action for Expo/React Native build, submit, and OTA updates. Zero Expo server dependency.

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Stale
License
None
namedescriptionrequireddefault
platformTarget platform: ios | androidyes
profileBuild profile from app-build.json (e.g. development, preview, production)noproduction
configPath to app-build.json config fileno./app-build.json
submitSubmit to App Store / Google Play after buildnofalse
otaExport an OTA update instead of a full native buildnofalse
working-directoryWorking directory for the app (e.g., 'app/' for monorepos). Defaults to repository root.no
version-bumpAuto-increment build number (iOS buildNumber / Android versionCode)nofalse
version-strategyVersion bump strategy: app-json | git-tag | git-commit-count | timestampnoapp-json
version-git-tag-patternGit tag glob pattern for git-tag strategy (e.g. 'v*')nov*
cacheCache node_modules, CocoaPods, Gradle, and Ruby gemsnotrue
fingerprintEnable @expo/fingerprint to detect native changes. When enabled, skips native build and routes to OTA pipeline if only JS changed.nofalse
skip-prebuildSkip 'expo prebuild' step. Use when native directories (ios/android) are pre-committed.nofalse
prebuild-cleanRun 'expo prebuild --clean' to regenerate native directories from scratch.nofalse
node-versionNode.js version to useno22
fastlane-versionFastlane version to install (use 'latest' for most recent)nolatest
xcode-versionXcode version to use (e.g., '16.2', '26'). Runs xcode-select on the runner. Only applies to iOS builds on macOS.no
java-versionJava/JDK version for Android builds (e.g., '17', '21'). Validates the runner's JDK matches. Only applies to Android.no17
android-architecturesComma-separated list of Android ABIs to build (e.g., 'arm64-v8a', 'arm64-v8a,armeabi-v7a', 'all'). Defaults to arm64-v8a.noarm64-v8a
environmentEnvironment variables to set for the build (JSON object, e.g., '{"APP_ENV": "production", "API_URL": "https://api.example.com"}')no
ios-schemeXcode scheme to build (overrides config file). For projects with multiple schemes (e.g., 'MyApp-Production').no
ios-build-configurationXcode build configuration (overrides config file). Supports custom configurations like 'Release-Production'.no
ios-certificate-p12Base64-encoded iOS distribution certificate (.p12)no
ios-certificate-passwordPassword for the iOS distribution certificateno
ios-provisioning-profileBase64-encoded iOS provisioning profile (.mobileprovision)no
ios-extension-profilesJSON map of bundle ID to base64-encoded provisioning profile for app extensionsno
match-passwordFastlane match encryption passphraseno
match-git-private-keyBase64-encoded SSH private key for the match git repositoryno
asc-api-key-idApp Store Connect API Key IDno
asc-api-issuer-idApp Store Connect API Issuer IDno
asc-api-key-p8Base64-encoded App Store Connect API key (.p8)no
android-keystoreBase64-encoded Android upload keystore (.jks/.keystore)no
android-keystore-passwordPassword for the Android keystoreno
android-key-aliasKey alias within the Android keystoreno
android-key-passwordPassword for the Android keyno
google-play-service-accountBase64-encoded Google Play service account JSON keyno
namedescription
artifact-pathPath to the build artifact (.ipa, .aab, or .apk)
build-numberBuild number used (iOS buildNumber or Android versionCode)
build-modeWhether a native build or OTA update was performed: 'native' | 'ota' | 'full'
fingerprint-hashNative fingerprint hash (only set when fingerprint is enabled)
submission-statusStore submission result: submitted | skipped | failed
ota-update-idOTA update UUID (only set when ota is true)
ota-manifest-urlOTA manifest URL (only set when ota is true)