Skip to content

chore: is this also needed #436

chore: is this also needed

chore: is this also needed #436

Workflow file for this run

name: E2E
on:
pull_request:
branches: [main]
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
e2e-android:
name: Android
runs-on: self-hosted
steps:
- uses: actions/checkout@v2
# In case this is run on a runner without nix
# - uses: DeterminateSystems/nix-installer-action@main
- uses: DeterminateSystems/magic-nix-cache-action@v2
# Caching
- uses: actions/cache@v2
with:
path: |
node_modules
ios/Pods
key: ${{ runner.os }}-deps-${{ hashFiles('**/yarn.lock', '**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-deps-
# Installations
- name: Install Node Modules and Pods
run: nix develop -c yarn install
env:
LANG: en_US.UTF-8
# Metro
- name: Start Metro
run: |
nix develop -c sh -c 'yarn start' &
echo "METRO_PID=$!" >> $GITHUB_ENV
# Builds
- run: nix develop -c yarn e2e:build android.emu.debug
# Start Tilt
- name: Tilt CI
uses: nick-fields/retry@v3
with:
timeout_minutes: 10
max_attempts: 10
retry_wait_seconds: 45
command: nix develop -c sh -c 'cd dev && tilt ci'
- name: Tilt Server
run: |
lsof -ti:10350 | xargs kill -9 || true
nix develop -c sh -c 'cd dev && tilt up' &
echo "TILT_SERVER_PID=$!" >> $GITHUB_ENV
# Tests on Android Emulator
- name: Start Android Emulator
run: |
nix develop -c sh -c 'emulator -avd Pixel_API_34 -gpu swiftshader -wipe-data -no-boot-anim' &
nix develop -c adb wait-for-device
nix develop -c sh -c 'adb shell screenrecord --bit-rate 4000000 --time-limit 99999999 /sdcard/screenRecord.mp4' &
echo "EMU_RECORD=$!" >> $GITHUB_ENV
- name: Run Detox Tests on Android Emulator
uses: nick-fields/retry@v3
with:
timeout_minutes: 15
retry_wait_seconds: 1
max_attempts: 3
command: |
rm -rf android-recordings || true
nix develop -c tilt trigger dev-setup
nix develop -c tilt wait --timeout 5m --for=condition=Ready uiresources dev-setup
nix develop -c yarn e2e:test android.emu.debug -d --take-screenshots all --record-videos all --record-logs all --artifacts-location android-recordings
- name: Kill Android Emulator
if: always()
continue-on-error: true
run: |
kill -SIGINT $EMU_RECORD
nix develop -c adb pull /sdcard/screenRecord.mp4 ./screenRecordUnopt.mp4
ffmpeg -i screenRecordUnopt.mp4 screenRecord.mp4
nix develop -c adb emu kill
- uses: actions/upload-artifact@v4
if: always()
with:
name: android-recordings
path: android-recordings
# Upload recordings to GCS bucket
- uses: "google-github-actions/auth@v2"
if: always()
with:
credentials_json: "${{ secrets.BUILD_ARTIFACTS_BUCKET_KEY }}"
- uses: "google-github-actions/upload-cloud-storage@v2"
if: always()
with:
path: screenRecord.mp4
gzip: false
predefinedAcl: publicRead
headers: |-
content-type: video/mp4
destination: galoy-mobile-recordings/android-recordings/${{ github.run_id }}
- name: Append Direct Links to GitHub Actions Summary
if: always()
run: |
echo "## Android Recording" > $GITHUB_STEP_SUMMARY
COMPLETE_RECORDING_URL="https://storage.googleapis.com/galoy-mobile-recordings/android-recordings/${{ github.run_id }}/screenRecord.mp4"
echo "Full Recording: [Click here](<$COMPLETE_RECORDING_URL>)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "Test Suite:" >> $GITHUB_STEP_SUMMARY
find android-recordings -type f -name "*.mp4" | while read file; do
RELATIVE_PATH="${file#android-recordings/}"
FILE_URL="${BASE_URL}/${RELATIVE_PATH}"
TEST_NAME=$(echo "$RELATIVE_PATH" | sed -E 's|.*/(.*)/test\.mp4|\1|')
echo "- $TEST_NAME" >> $GITHUB_STEP_SUMMARY
done
# Cleanup
- name: Terminate Metro
if: always()
continue-on-error: true
run: kill $METRO_PID
- name: Cleanup
if: always()
continue-on-error: true
run: |
kill $METRO_PID || true
kill $TILT_SERVER_PID || true
nix develop -c sh -c 'cd dev && tilt down' || true
docker rm -f $(docker ps -aq) || true
lsof -ti:10350,8080,8081 | xargs kill -9 || true
e2e-ios:
name: iOS
runs-on: self-hosted
steps:
- uses: actions/checkout@v2
# In case this is run on a runner without nix
# - uses: DeterminateSystems/nix-installer-action@main
- uses: DeterminateSystems/magic-nix-cache-action@v2
# Caching
- uses: actions/cache@v2
with:
path: |
node_modules
ios/Pods
key: ${{ runner.os }}-deps-${{ hashFiles('**/yarn.lock', '**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-deps-
# Installations
- name: Install Node Modules and Pods
run: nix develop -c yarn install
env:
LANG: en_US.UTF-8
# Metro
- name: Start Metro
run: |
nix develop -c sh -c 'yarn start' &
echo "METRO_PID=$!" >> $GITHUB_ENV
# Builds
- run: nix develop -c yarn e2e:build ios.sim.debug
# Start Tilt
- name: Tilt CI
uses: nick-fields/retry@v3
with:
timeout_minutes: 10
max_attempts: 10
retry_wait_seconds: 45
command: nix develop -c sh -c 'cd dev && tilt ci'
- name: Tilt Server
run: |
lsof -ti:10350 | xargs kill -9 || true
nix develop -c sh -c 'cd dev && tilt up' &
echo "TILT_SERVER_PID=$!" >> $GITHUB_ENV
- name: Record Simulator in Background
run: |
DEVICE_ID=$(xcrun simctl list devices | grep "iPhone SE (3rd generation)" | cut -d' ' -f9 | tr -d '()')
open -a Simulator --args -CurrentDeviceUDID $DEVICE_ID
while ! xcrun simctl list devices | grep "(Booted)"; do
sleep 1
echo "Waiting for Simulator device to come online..."
done
xcrun simctl io booted recordVideo screenRecord.mov &
echo "SIM_RECORD=$!" >> $GITHUB_ENV
# Tests on iOS Simulator
- name: Run Detox Tests on iOS Simulator
uses: nick-fields/retry@v3
with:
timeout_minutes: 15
retry_wait_seconds: 1
max_attempts: 3
command: |
rm -rf ios-recordings || true
nix develop -c tilt trigger dev-setup
nix develop -c tilt wait --timeout 5m --for=condition=Ready uiresources dev-setup
nix develop -c yarn e2e:test ios.sim.debug -d -R 5 --take-screenshots all --record-videos all --record-logs all --artifacts-location ios-recordings
- name: Stop Recording
if: always()
continue-on-error: true
run: |
kill -SIGINT $SIM_RECORD
ffmpeg -i screenRecord.mov screenRecord.mp4
- run: killall Simulator
if: always()
continue-on-error: true
- uses: actions/upload-artifact@v4
if: always()
with:
name: ios-recordings
path: ios-recordings
# Upload recording to GCS bucket
- uses: "google-github-actions/auth@v2"
if: always()
with:
credentials_json: "${{ secrets.BUILD_ARTIFACTS_BUCKET_KEY }}"
- uses: "google-github-actions/upload-cloud-storage@v2"
if: always()
with:
path: screenRecord.mp4
gzip: false
predefinedAcl: publicRead
headers: |-
content-type: video/mp4
destination: galoy-mobile-recordings/ios-recordings/${{ github.run_id }}
- name: Append Direct Links to GitHub Actions Summary
if: always()
run: |
echo "## iOS Recording" > $GITHUB_STEP_SUMMARY
COMPLETE_RECORDING_URL="https://storage.googleapis.com/galoy-mobile-recordings/ios-recordings/${{ github.run_id }}/screenRecord.mp4"
echo "Full Recording: [Click here](<$COMPLETE_RECORDING_URL>)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "Test Suite:" >> $GITHUB_STEP_SUMMARY
find ios-recordings -type f -name "*.mp4" | while read file; do
RELATIVE_PATH="${file#ios-recordings/}"
FILE_URL="${BASE_URL}/${RELATIVE_PATH}"
TEST_NAME=$(echo "$RELATIVE_PATH" | sed -E 's|.*/(.*)/test\.mp4|\1|')
echo "- $TEST_NAME" >> $GITHUB_STEP_SUMMARY
done
# Cleanup
- name: Cleanup
if: always()
continue-on-error: true
run: |
kill $METRO_PID || true
kill $TILT_SERVER_PID || true
nix develop -c sh -c 'cd dev && tilt down' || true
docker rm -f $(docker ps -aq) || true
lsof -ti:10350,8080,8081 | xargs kill -9 || true