Skip to content

Feature Request: Workflow Generation for EAS-Independent Builds via Fastlane/GradleΒ #6

@uroge

Description

@uroge

Thanks for creating expo-react-native-cicd! It's a great project. I appreciate the effort you've put into making Expo builds more accessible and flexible.

I'm raising this issue as a feature request to explore the possibility of generating workflows that bypass EAS builds entirely. While the current implementation streamlines EAS builds, I'm interested in a solution that operates independently of the EAS infrastructure.

Motivation:

My primary motivation is to achieve complete independence from EAS, even at the cost of increased complexity in setup.

Some reasons I'm interested in this are:

  • Cost: Even though expo-react-native-cicd significantly reduces EAS costs, it would be ideal to eliminate them entirely.
  • Full Control: Bypassing EAS grants complete control over the build process and environment. Without the need for expo account etc.

Proposed Solution:

I'm suggesting the addition of a workflow generation option that leverages prebuilding the app and then uses tools like Fastlane and Gradle to replicate the functionality of EAS Build in a managed workflow. This would involve the following steps:

  • Prebuilding: Use expo prebuild to generate the native iOS and Android projects.
  • Dependency Management: Utilize tools like CocoaPods (for iOS) and Gradle (for Android) to manage dependencies within the generated native projects.
  • Building (Android): Use Gradle commands to build the Android APK and AAB files.
  • Building (iOS): Use Fastlane to manage code signing, provisioning profiles, and build the iOS IPA file.
  • Distribution: Maintain existing distribution options (Google Drive, GitHub Releases, etc.) for the generated binaries.

Benefits:

  • Zero EAS Costs: Completely eliminates dependency on EAS Build.
  • Complete Control: Provides ultimate control over the build environment and process.
  • Platform Independence: Reduces reliance on the EAS platform.

Considerations:

  • Increased Complexity: This approach would inherently be more complex to set up and maintain than the current EAS-based workflow.
  • Maintenance Burden: Requires ongoing maintenance to keep up with changes in Expo, Fastlane, Gradle, and Xcode.
  • Potential Performance Differences: Build times might vary compared to EAS Build.

Example workflow structure:

- name: Setup
  run: |
    npm install
    npx expo install --fix

- name: Prebuild
  run: npx expo prebuild --clean

- name: Build Android
  run: |
    cd android
    ./gradlew assembleRelease
    ./gradlew bundleRelease

- name: Build iOS
  run: |
    cd ios
    bundle install # make sure bundler is available
    bundle exec fastlane build_app # run fastlane using bundler
    # OR xcodebuild -workspace YourApp.xcworkspace -scheme YourApp archive

- name: Upload builds
  run: |
    # Your existing upload logic here, e.g., using GitHub CLI, etc.
    echo "Implement upload steps here"

I understand that this is a significant feature request with considerable implementation challenges. However, I believe that it would provide a valuable option for users who require complete independence from EAS.

Thanks again for your work on this!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions