-
-
Notifications
You must be signed in to change notification settings - Fork 4
E2e env actions #85
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
E2e env actions #85
Changes from 53 commits
a75fa8b
ab67bec
22a7b88
610d928
6ebb0f3
f6e583d
e4322a4
4a81330
bc2f52f
27eed96
c9e4d1e
f5c4f53
860c7d4
4898cab
8b76ea8
f1008f7
9884d8a
682cafb
6a1ff90
38bd065
2f5e2a6
a3ea5d4
8f3fdcb
c7d9987
90d1bd2
bfd20d8
6d49bac
b2e0ef3
c35dbc6
9e75e06
dda3178
03cd24b
4b4e46f
02ff9a9
5695370
f399c35
4d87552
929ddaa
d9de05d
18421e8
93cf96a
db78229
37051d0
dade476
8529256
3b49d84
a4ca242
b1867a9
860e85f
032380e
eea10a6
1366275
1a08796
367c013
d7a349b
4459e30
4ee8ff1
9e04cea
aa884d6
a4d8ac3
a3cd1cb
b748908
8553525
cf5b15f
5827d99
ac3212f
f850b3e
a3886bc
af1ea7a
9c67713
87877ab
48f952e
7228375
d942920
c9620dc
6fe7aea
f8b417a
11952a4
cd57fed
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,378 @@ | ||
| name: 'Setup E2E Test Environment' | ||
| description: 'Sets up the environment for running E2E tests' | ||
| inputs: | ||
| platform: | ||
| description: 'Platform (ios or android)' | ||
| required: true | ||
| node-version: | ||
| description: 'Node.js version' | ||
| required: false | ||
| default: '20.18.0' | ||
| yarn-version: | ||
| description: Yarn version to use with Corepack | ||
| required: false | ||
| default: '1.22.22' | ||
| setup-simulator: | ||
| description: 'Whether to setup simulator/emulator' | ||
| required: false | ||
| default: 'false' | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bug: Simulator Setup Incomplete, YAML Parsing IssuesThe Locations (1) |
||
| # See https://github.com/actions/runner-images/blob/main/images/macos/macos-14-Readme.md#installed-simulators | ||
| ios-device: | ||
| description: Name of iOS device to boot (e.g., "iPhone 15") | ||
| required: false | ||
| default: 'iPhone 15' | ||
| bundler-version: | ||
| description: 'Bundler version to use (only for iOS)' | ||
| required: false | ||
| default: '2.5.8' | ||
| cache-prefix: | ||
| description: 'Cache key prefix' | ||
| required: false | ||
| default: 'e2e' | ||
| ruby-version: | ||
| description: Ruby version to use (only for iOS) | ||
| required: false | ||
| default: '3.1' | ||
| xcode-version: | ||
| description: Xcode version to select (e.g., 16.2) | ||
| required: false | ||
| default: '16.2' | ||
| jdk-version: | ||
| description: JDK version to use (only for Android) | ||
| required: false | ||
| default: '17' | ||
| jdk-distribution: | ||
| description: JDK distribution to use (only for Android) | ||
| required: false | ||
| default: 'temurin' | ||
| ndk-version: | ||
| description: NDK version to use (only for Android) | ||
| required: false | ||
| default: '26.1.10909125' | ||
| foundry-version: | ||
| description: Foundry version to install | ||
| required: false | ||
| default: 'v1.2.3' | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bug: Unused Inputs Override Version SettingsThe Locations (1) |
||
| android-avd-name: | ||
| description: 'Name of AVD to create and boot (for Android)' | ||
| required: false | ||
| default: 'test_e2e_avd' | ||
| android-device: | ||
| description: 'AVD device profile (e.g. "pixel")' | ||
| required: false | ||
| default: 'pixel' | ||
| android-api-level: | ||
| description: 'Android API level to use (e.g. "34")' | ||
| required: false | ||
| default: '34' | ||
| android-abi: | ||
| description: 'System architecture ABI for the Android system image (e.g. x86_64, arm64-v8a, armeabi-v7a)' | ||
| required: false | ||
| default: 'x86_64' | ||
|
|
||
| runs: | ||
| using: 'composite' | ||
| steps: | ||
| ## Common Setup ## | ||
| - run: echo "Setup E2E Environment started" | ||
| shell: bash | ||
|
|
||
| ## Yarn Setup & Cache Management | ||
|
|
||
| - name: Corepack | ||
| id: corepack | ||
| run: corepack enable && corepack prepare yarn@${{ inputs.yarn-version }} --activate | ||
| shell: bash | ||
|
|
||
| - name: Restore Yarn cache | ||
| uses: actions/cache@v4 | ||
| with: | ||
| path: | | ||
| node_modules | ||
| key: ${{ inputs.cache-prefix }}-yarn-${{ inputs.platform }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} | ||
| restore-keys: | | ||
| ${{ inputs.cache-prefix }}-yarn-${{ inputs.platform }}-${{ runner.os }}- | ||
|
|
||
| - name: Install JavaScript dependencies | ||
| id: yarn-install | ||
| run: yarn install --frozen-lockfile | ||
| shell: bash | ||
| env: | ||
| NODE_OPTIONS: --max-old-space-size=4096 # Increase memory limit for Node.js due to large dependencies | ||
|
|
||
| - name: Install Detox CLI | ||
| id: install-detox-cli | ||
| run: yarn global add detox-cli | ||
| shell: bash | ||
|
|
||
| - name: Install Foundry | ||
| shell: bash | ||
| run: | | ||
| echo "Installing Foundry via foundryup..." | ||
|
|
||
| export FOUNDRY_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/.foundry" | ||
| export FOUNDRY_BIN="$FOUNDRY_DIR/bin" | ||
|
|
||
| mkdir -p "$FOUNDRY_BIN" | ||
|
|
||
| curl -sL https://raw.githubusercontent.com/foundry-rs/foundry/master/foundryup/foundryup -o "$FOUNDRY_BIN/foundryup" | ||
| chmod +x "$FOUNDRY_BIN/foundryup" | ||
|
|
||
| echo "$FOUNDRY_BIN" >> "$GITHUB_PATH" | ||
|
|
||
| "$FOUNDRY_BIN/foundryup" | ||
|
|
||
| ## IOS Setup ## | ||
|
|
||
| ## Ruby Setup & Cache Management | ||
| - name: Setup Ruby | ||
| if: ${{ inputs.platform == 'ios' }} | ||
| uses: ruby/setup-ruby@a4effe49ee8ee5b8b5091268c473a4628afb5651 | ||
| with: | ||
| ruby-version: ${{ inputs.ruby-version }} | ||
|
|
||
| # Install Bundler first | ||
| - name: Install bundler | ||
| if: ${{ inputs.platform == 'ios' }} | ||
| run: gem install bundler -v ${{ inputs.bundler-version }} | ||
| shell: bash | ||
|
|
||
| # Restore cached Ruby gems | ||
| - name: Restore Bundler cache | ||
| if: ${{ inputs.platform == 'ios' }} | ||
| uses: actions/cache@v4 | ||
| with: | ||
| path: ios/vendor/bundle | ||
| key: ${{ inputs.cache-prefix }}-bundler-${{ inputs.platform }}-${{ runner.os }}-${{ hashFiles('ios/Gemfile.lock') }} | ||
| restore-keys: | | ||
| ${{ inputs.cache-prefix }}-bundler-${{ inputs.platform }}-${{ runner.os }}- | ||
|
|
||
| # Configure bundler to use a specific path for gem installation | ||
| - name: Configure bundler install path | ||
| if: ${{ inputs.platform == 'ios' }} | ||
| run: bundle config set path 'vendor/bundle' | ||
| working-directory: ios | ||
| shell: bash | ||
|
|
||
| # Install Ruby gems into ios/vendor/bundle ( cache management & awareness ) | ||
| - name: Install Ruby gems via bundler | ||
| if: ${{ inputs.platform == 'ios' }} | ||
| run: bundle install | ||
| working-directory: ios | ||
| shell: bash | ||
|
|
||
| # Select Xcode version | ||
| - name: Select Xcode version | ||
| if: ${{ inputs.platform == 'ios' }} | ||
| run: sudo xcode-select -s /Applications/Xcode_${{ inputs.xcode-version }}.app | ||
| shell: bash | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bug: Redundant Xcode Version Selection in CIThe There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bug: iOS Xcode Selection Fails on GitHub RunnersThe |
||
|
|
||
| # Restore CocoaPods cache | ||
| - name: Restore CocoaPods cache | ||
| if: ${{ inputs.platform == 'ios' && inputs.setup-simulator == 'true' }} | ||
| uses: actions/cache@v4 | ||
| with: | ||
| path: ios/Pods | ||
| key: ${{ inputs.cache-prefix }}-pods-${{ inputs.platform }}-${{ runner.os }}-${{ hashFiles('ios/Podfile.lock') }} | ||
| restore-keys: | | ||
| ${{ inputs.cache-prefix }}-pods-${{ inputs.platform }}-${{ runner.os }}- | ||
|
|
||
| # Install CocoaPods w/ cached bundler environment | ||
| - name: Install CocoaPods via bundler | ||
| if: ${{ inputs.platform == 'ios' && inputs.setup-simulator == 'true' }} | ||
| run: bundle exec pod install | ||
| working-directory: ios | ||
| shell: bash | ||
|
|
||
| - name: Install applesimutils | ||
| if: ${{ inputs.platform == 'ios' }} | ||
| run: brew tap wix/brew && brew install applesimutils | ||
| shell: bash | ||
|
|
||
| - name: Boot iOS Simulator (if not already booted) | ||
| if: ${{ inputs.platform == 'ios' && inputs.setup-simulator == 'true' }} | ||
| run: | | ||
| echo "Looking for simulator named: ${{ inputs.ios-device }}" | ||
|
|
||
| SIMULATOR_LINE=$(xcrun simctl list devices | grep -m1 "${{ inputs.ios-device }}") | ||
| if [ -z "$SIMULATOR_LINE" ]; then | ||
| echo "No simulator found with name '${{ inputs.ios-device }}'" | ||
| exit 1 | ||
| fi | ||
|
|
||
| SIMULATOR_ID=$(echo "$SIMULATOR_LINE" | awk -F '[()]' '{print $2}') | ||
| SIMULATOR_STATE=$(echo "$SIMULATOR_LINE" | awk -F '[()]' '{print $(NF-1)}') | ||
|
|
||
| echo "Simulator ID: $SIMULATOR_ID" | ||
| echo "Simulator State: $SIMULATOR_STATE" | ||
|
|
||
| if [ "$SIMULATOR_STATE" = "Booted" ]; then | ||
| echo "Simulator is already booted. Skipping boot step." | ||
| else | ||
| echo "Booting simulator..." | ||
| xcrun simctl boot "$SIMULATOR_ID" | ||
| fi | ||
| shell: bash | ||
|
|
||
| ## Android Setup ## | ||
|
|
||
| ## JDK Setup | ||
| - name: Setup Java | ||
| if: ${{ inputs.platform == 'android' }} | ||
| uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 | ||
| with: | ||
| java-version: ${{ inputs.jdk-version }} | ||
| distribution: ${{ inputs.jdk-distribution }} | ||
|
|
||
| ## Android SDK Setup | ||
|
|
||
| # - name: Install required emulator dependencies | ||
| # if: ${{ inputs.platform == 'android' }} | ||
| # run: | | ||
| # sudo apt-get update | ||
| # sudo apt-get install -y libpulse0 libglu1-mesa | ||
| # shell: bash | ||
|
|
||
| - name: Install Android SDK packages | ||
| if: ${{ inputs.platform == 'android' }} | ||
| run: | | ||
| echo "Accepting SDK licenses..." | ||
| printf 'y\n%.0s' {1..10} | "${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager" --licenses | ||
|
|
||
| echo "Installing Android SDK components..." | ||
| "${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager" --install \ | ||
| "platform-tools" \ | ||
| "platforms;android-${{ inputs.android-api-level }}" \ | ||
| "build-tools;34.0.0" \ | ||
| "emulator" \ | ||
| "system-images;android-34;google_apis;${{ inputs.android-abi }}" \ | ||
|
|
||
| echo "Updating SDK packages..." | ||
| "${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager" --update | ||
| shell: bash | ||
|
|
||
| ## NDK Setup | ||
|
|
||
| - name: Debug Android SDK Paths | ||
| if: ${{ inputs.platform == 'android' }} | ||
| run: | | ||
| echo "ANDROID_HOME: $ANDROID_HOME" | ||
| echo "ANDROID_SDK_ROOT: $ANDROID_SDK_ROOT" | ||
| shell: bash | ||
|
|
||
| - name: Accept Android SDK licenses | ||
| if: ${{ inputs.platform == 'android' }} | ||
| run: | | ||
| echo "Accepting Android SDK licenses..." | ||
| bash -c 'yes | "${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager" --licenses' || true | ||
| shell: bash | ||
|
|
||
| - name: Install Android SDK Packages | ||
| if: ${{ inputs.platform == 'android' }} | ||
| run: | | ||
| "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" --install \ | ||
| "platform-tools" \ | ||
| "platforms;android-${{ inputs.android-api-level }}" \ | ||
| "build-tools;34.0.0" \ | ||
| "emulator" \ | ||
| "system-images;android-${{ inputs.android-api-level }};google_apis;${{ inputs.android-abi }}" | ||
| shell: bash | ||
|
|
||
| - name: Install Android NDK | ||
| if: ${{ inputs.platform == 'android' }} | ||
| run: | | ||
| "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" "ndk;${{ inputs.ndk-version }}" | ||
| shell: bash | ||
|
|
||
| - name: Add Android tools to PATH | ||
| if: ${{ inputs.platform == 'android' }} | ||
| run: | | ||
| echo "$ANDROID_HOME/platform-tools" >> "$GITHUB_PATH" | ||
| echo "$ANDROID_HOME/emulator" >> "$GITHUB_PATH" | ||
| echo "$ANDROID_HOME/cmdline-tools/latest/bin" >> "$GITHUB_PATH" | ||
| shell: bash | ||
|
|
||
| - name: Add NDK related toolchains to PATH | ||
| if: ${{ inputs.platform == 'android' }} | ||
| run: | | ||
| NDK_TOOLCHAIN="$ANDROID_SDK_ROOT/ndk/${{ inputs.ndk-version }}/toolchains/llvm/prebuilt/linux-x86_64/bin" | ||
cursor[bot] marked this conversation as resolved.
Show resolved
Hide resolved
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bug: NDK Toolchain Path Not Platform-AgnosticThe NDK toolchain path in the Locations (1)There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bug: NDK Toolchain Path Not Platform-AgnosticThe NDK toolchain path in the 'Add NDK related toolchains to PATH' step is hardcoded to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bug: NDK Toolchain Path Incorrect on macOSThe NDK toolchain path is hardcoded to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
| echo "$NDK_TOOLCHAIN" >> "$GITHUB_PATH" | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bug: NDK Toolchain Path Incorrect on Non-Linux RunnersThe NDK toolchain path is hardcoded to |
||
| echo "$ANDROID_SDK_ROOT/ndk/${{ inputs.ndk-version }}" >> "$GITHUB_PATH" | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bug: NDK Path and SDK Environment MismatchThe NDK toolchain path hardcodes There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bug: NDK Path Issues Across PlatformsThe Android NDK toolchain path is hardcoded to |
||
| shell: bash | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
|
|
||
| ## Launch AVD | ||
jake-perkins marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| ## Launch AVD | ||
|
|
||
| - name: Install Android system image | ||
| if: ${{ inputs.platform == 'android' && inputs.setup-simulator == 'true' }} | ||
| run: | | ||
| IMAGE="system-images;android-${{ inputs.android-api-level }};google_apis;${{ inputs.android-abi }}" | ||
| echo "Installing system image: $IMAGE" | ||
| "${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager" --install "$IMAGE" | ||
| shell: bash | ||
|
|
||
| - name: Set ANDROID_AVD_HOME for downstream steps | ||
| if: ${{ inputs.platform == 'android' && inputs.setup-simulator == 'true' }} | ||
| shell: bash | ||
| run: | | ||
| echo "ANDROID_AVD_HOME=$HOME/.android/avd" >> "$GITHUB_ENV" | ||
| mkdir -p "$HOME/.android/avd" | ||
|
|
||
| - name: Create Android Virtual Device (AVD) | ||
| if: ${{ inputs.platform == 'android' && inputs.setup-simulator == 'true' }} | ||
| run: | | ||
| IMAGE="system-images;android-${{ inputs.android-api-level }};google_apis;${{ inputs.android-abi }}" | ||
| echo "Creating AVD with image: $IMAGE" | ||
| echo "no" | "${ANDROID_HOME}/cmdline-tools/latest/bin/avdmanager" create avd \ | ||
cursor[bot] marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| --name "${{ inputs.android-avd-name }}" \ | ||
| --package "$IMAGE" \ | ||
| --device "${{ inputs.android-device }}" | ||
| shell: bash | ||
|
|
||
| - name: List available AVDs | ||
| if: ${{ inputs.platform == 'android' && inputs.setup-simulator == 'true' }} | ||
| shell: bash | ||
| run: | | ||
| echo "โ Available AVDs:" | ||
| "${ANDROID_HOME}/cmdline-tools/latest/bin/avdmanager" list avd || true | ||
|
|
||
| # Launch Android Emulator | ||
| - name: Launch Android Emulator | ||
| if: ${{ inputs.platform == 'android' && inputs.setup-simulator == 'true' }} | ||
| run: | | ||
| nohup "$ANDROID_HOME/emulator/emulator" \ | ||
| -avd "${{ inputs.android-avd-name }}" \ | ||
| -no-audio \ | ||
| -no-boot-anim \ | ||
| -no-window \ | ||
| -verbose > /dev/null 2>&1 & | ||
| shell: bash | ||
|
|
||
| ## Wait for Emulator to Boot | ||
| - name: Wait for Android Emulator to Boot | ||
| if: ${{ inputs.platform == 'android' && inputs.setup-simulator == 'true' }} | ||
| run: | | ||
| echo "Waiting for emulator to be ready..." | ||
| adb wait-for-device | ||
|
|
||
| bootanim="" | ||
| timeout=300 # 5 minutes in seconds | ||
| elapsed=0 | ||
|
|
||
| while [[ "$elapsed" -lt "$timeout" ]]; do | ||
| bootanim=$(adb shell getprop init.svc.bootanim 2>/dev/null || echo "unknown") | ||
| echo "Waiting for emulator... ($bootanim) (${elapsed}s elapsed)" | ||
|
|
||
| if [[ "$bootanim" == *"stopped"* ]]; then | ||
| echo "โ Emulator booted successfully" | ||
| exit 0 | ||
| fi | ||
|
|
||
| sleep 5 | ||
| elapsed=$((elapsed + 5)) | ||
| done | ||
|
|
||
| echo "โ Timeout waiting for emulator to boot" | ||
| exit 1 | ||
| shell: bash | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bug: Unused Simulator Setup Input
The
setup-simulatorinput is defined but unused in the action steps. Despite its description and PR documentation, there is no logic to conditionally boot simulators or emulators based on this input.Locations (1)
.github/actions/setup-e2e-env/action.yml#L14-L18