Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
6bb1ce4
test: add e2e testing infrastructure (iOS + Android)
testableapple Jun 18, 2026
f6943f1
Remove useless comments
testableapple Jul 10, 2026
a5e6342
Move things around a little bit
testableapple Jul 10, 2026
f108d0f
Bump actions versions
testableapple Jul 10, 2026
3783d7c
Fix iOS
testableapple Jul 10, 2026
9949033
Bump cache version
testableapple Jul 10, 2026
ef1e0ca
Trying to speed up ios build
testableapple Jul 10, 2026
a670439
Merge branch 'master' into ci/e2e-testing-infra
testableapple Jul 10, 2026
ab3f3ff
Fix nohup
testableapple Jul 10, 2026
fd68c10
Fix patrol
testableapple Jul 10, 2026
66f5573
FIx fastlane
testableapple Jul 10, 2026
f98950b
Revert "FIx fastlane"
testableapple Jul 10, 2026
1f3f787
Revert "Fix patrol"
testableapple Jul 10, 2026
3185515
Revert "Fix nohup"
testableapple Jul 10, 2026
164faf0
Logs
testableapple Jul 10, 2026
76ecd11
Some iOS updates
testableapple Jul 10, 2026
5f0ad9a
Comment android
testableapple Jul 10, 2026
be0ffc5
Add allure id
testableapple Jul 10, 2026
b28272b
fix(e2e): await mock server response body before closing client
testableapple Jul 10, 2026
2af32e5
Fix
testableapple Jul 10, 2026
09f0fcb
Test
testableapple Jul 10, 2026
1d6f406
Test macos 15
testableapple Jul 11, 2026
284044c
Revert "Test"
testableapple Jul 11, 2026
d49978b
Revert "Fix"
testableapple Jul 11, 2026
0d09fe4
Revert "fix(e2e): await mock server response body before closing client"
testableapple Jul 11, 2026
160efd5
Check if this makes build slower
testableapple Jul 11, 2026
7807ee1
Test without caching build
testableapple Jul 11, 2026
040545b
Revert "Test without caching build"
testableapple Jul 11, 2026
896af67
test(e2e): retry failed tests
testableapple Jul 11, 2026
a7357ef
test(e2e): boot ios simulator via prepare_simulator in run_e2e_test
testableapple Jul 12, 2026
6627532
fix(e2e): await /start response body and give it a 60s budget
testableapple Jul 12, 2026
8ceed4b
Do not wait for ios sim
testableapple Jul 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions .github/actions/setup-ios-runtime/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Setup iOS Runtime
description: Download and install a requested iOS simulator runtime
inputs:
version:
description: iOS runtime version (e.g. 17.5)
required: true
device:
description: Simulator device type (e.g. iPhone 15 Pro)
required: true
runs:
using: composite
steps:
- name: Install ipsw
shell: bash
run: |
IPSW_VERSION=3.1.592
FILE="ipsw_${IPSW_VERSION}_macOS_universal.tar.gz"
if ! command -v ipsw >/dev/null; then
wget -q "https://github.com/blacktop/ipsw/releases/download/v${IPSW_VERSION}/${FILE}"
tar -xzf "$FILE"
chmod +x ipsw
sudo mv ipsw /usr/local/bin/
rm -f "$FILE"
fi

- name: Setup iOS simulator runtime
shell: bash
run: |
sudo rm -rfv ~/Library/Developer/CoreSimulator/* || true
cd sample_app/ios && bundle exec fastlane install_runtime ios:${{ inputs.version }}
sudo rm -rfv sample_app/*.dmg || true
xcrun simctl list runtimes

- name: Create custom iOS simulator
shell: bash
run: |
ios_version_dash=$(echo "${{ inputs.version }}" | tr '.' '-')
xcrun simctl create custom-test-device "${{ inputs.device }}" "com.apple.CoreSimulator.SimRuntime.iOS-${ios_version_dash}"
xcrun simctl list devices "${{ inputs.version }}"
4 changes: 2 additions & 2 deletions .github/workflows/distribute_external.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ jobs:
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
working-directory: sample_app/android
working-directory: sample_app

- name: Distribute to S3
working-directory: sample_app/android
Expand Down Expand Up @@ -124,7 +124,7 @@ jobs:
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
working-directory: sample_app/ios
working-directory: sample_app

- name: Distribute to TestFlight
working-directory: sample_app/ios
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/distribute_internal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ jobs:
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
working-directory: sample_app/android
working-directory: sample_app

- name: Setup Firebase Service Account'
working-directory: sample_app/android
Expand Down Expand Up @@ -140,7 +140,7 @@ jobs:
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
working-directory: sample_app/ios
working-directory: sample_app

- name: Setup Firebase Service Account
working-directory: sample_app/ios
Expand Down Expand Up @@ -193,7 +193,7 @@ jobs:
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
working-directory: sample_app/ios
working-directory: sample_app

- name: Distribute to TestFlight Internal
working-directory: sample_app/ios
Expand Down
136 changes: 136 additions & 0 deletions .github/workflows/e2e_test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
name: e2e

on:
workflow_dispatch:
pull_request:
paths-ignore:
- 'README.md'
- '**/*.png'

permissions:
contents: read

concurrency:
group: e2e-${{ github.ref }}
cancel-in-progress: true

env:
flutter_version: "3.x"
ios_simulator_version: "26.2"
ios_simulator_device: "iPhone 17"

Comment thread
coderabbitai[bot] marked this conversation as resolved.
jobs:
# android:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v6

# - uses: actions/setup-java@v5
# with:
# distribution: temurin
# java-version: "17"

# - uses: subosito/flutter-action@v2
# with:
# flutter-version: ${{ env.flutter_version }}
# channel: stable
# cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }}

# - uses: ruby/setup-ruby@v1
# with:
# ruby-version: "3.3"
# bundler-cache: true
# working-directory: sample_app

# - name: Bootstrap
# run: |
# flutter pub global activate melos
# melos bootstrap
# dart pub global activate patrol_cli

# - name: Enable KVM
# run: |
# echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
# sudo udevadm control --reload-rules
# sudo udevadm trigger --name-match=kvm

# - name: Run e2e (Android emulator)
# uses: reactivecircus/android-emulator-runner@v2
# with:
# api-level: 34
# arch: x86_64
# profile: pixel_6
# script: cd sample_app/android && bundle exec fastlane run_e2e_test device:emulator-5554

# - name: Upload Allure results
# if: always()
# env:
# ALLURE_TOKEN: ${{ secrets.ALLURE_TOKEN }}
# run: cd sample_app/android && bundle exec fastlane allure_upload

# - uses: actions/upload-artifact@v7
# if: always()
# with:
# name: e2e-android-logs
# path: |
# sample_app/stream-chat-test-mock-server/logs
# sample_app/build/app/reports

ios:
runs-on: macos-15
env:
COMPILER_INDEX_STORE_ENABLE: NO
steps:
- uses: actions/checkout@v6

- uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.flutter_version }}
channel: stable
cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }}

- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"
bundler-cache: true
working-directory: sample_app

- name: Bootstrap
run: |
flutter precache --ios
flutter pub global activate melos
melos bootstrap
dart pub global activate patrol_cli

- name: Cache CocoaPods
uses: actions/cache@v6
with:
path: |
sample_app/ios/Pods
~/Library/Caches/CocoaPods
key: pods-${{ runner.os }}-${{ hashFiles('pubspec.lock', 'sample_app/ios/Podfile') }}
restore-keys: pods-${{ runner.os }}-

- name: Cache Patrol iOS build
uses: actions/cache@v6
with:
path: sample_app/build/ios_integ
key: patrol-ios-integ-${{ runner.os }}-xcode-${{ env.ios_simulator_version }}-${{ hashFiles('**/pubspec.lock', 'sample_app/ios/Podfile', 'sample_app/pubspec.yaml') }}
restore-keys: |
patrol-ios-integ-${{ runner.os }}-xcode-${{ env.ios_simulator_version }}-
patrol-ios-integ-${{ runner.os }}-

- name: Run e2e (iOS simulator)
run: cd sample_app/ios && bundle exec fastlane run_e2e_test platform:ios ios:"${{ env.ios_simulator_version }}" device:"${{ env.ios_simulator_device }}"

- name: Upload Allure results
if: always()
env:
ALLURE_TOKEN: ${{ secrets.ALLURE_TOKEN }}
run: cd sample_app/ios && bundle exec fastlane allure_upload

- uses: actions/upload-artifact@v7
if: always()
with:
name: e2e-ios-logs
path: sample_app/stream-chat-test-mock-server/logs
Loading
Loading