Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 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
f2d3bf8
Uncomment android
testableapple Jul 12, 2026
c305748
Refactor android
testableapple Jul 12, 2026
712aa8e
Clean up CI
testableapple Jul 13, 2026
bbb921b
Merge branch 'master' into ci/e2e-testing-infra
testableapple Jul 13, 2026
593bb0b
Cache android too
testableapple Jul 13, 2026
7b3cc18
Fix allure
testableapple Jul 13, 2026
98543a6
Update caches
testableapple Jul 13, 2026
db2666e
Merge branch 'master' into ci/e2e-testing-infra
testableapple Jul 13, 2026
25fe8b6
Bump firebase
testableapple Jul 13, 2026
2bb2140
Test ios
testableapple Jul 13, 2026
c2027dd
Fix
testableapple Jul 13, 2026
8f53632
iOS verbose log
testableapple Jul 13, 2026
3933981
Fix
testableapple Jul 13, 2026
ab4a6af
Update patrol build phase
testableapple Jul 13, 2026
f7adaa4
fix
testableapple Jul 13, 2026
cb92173
Revert "Update patrol build phase"
testableapple Jul 13, 2026
ba55956
Test ios
testableapple Jul 13, 2026
e97d34f
Fix ios
testableapple Jul 13, 2026
1a8631a
Get rid of Patrol
testableapple Jul 13, 2026
91780cd
Beautify logs
testableapple Jul 13, 2026
75785bc
Fi android
testableapple Jul 13, 2026
3be63d9
Update logs
testableapple Jul 13, 2026
2c36a35
Improve logs
testableapple Jul 13, 2026
8944789
Verbose
testableapple Jul 13, 2026
a0c75b6
Test ios time
testableapple Jul 13, 2026
d9f784f
Update
testableapple Jul 13, 2026
c89b015
Test ios
testableapple Jul 13, 2026
fc3a882
Fix
testableapple Jul 13, 2026
fadaae8
Test speed
testableapple Jul 13, 2026
466df61
Fix
testableapple Jul 13, 2026
412bec7
Test fix
testableapple Jul 13, 2026
63f248a
Fix ios speed
testableapple Jul 13, 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
16 changes: 16 additions & 0 deletions .github/actions/cache-cocoapods/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: 'Cache CocoaPods'
description: 'Cache CocoaPods dependencies for sample_app iOS builds'
inputs:
key-suffix:
description: 'Cache key suffix (e.g. runner.os or iOS version from matrix)'
required: true
runs:
using: "composite"
steps:
- uses: actions/cache@v6
with:
path: |
sample_app/ios/Pods
~/Library/Caches/CocoaPods
key: pods-${{ inputs.key-suffix }}-${{ hashFiles('pubspec.lock', 'sample_app/ios/Podfile') }}
restore-keys: pods-${{ inputs.key-suffix }}-
13 changes: 13 additions & 0 deletions .github/actions/cache-gradle/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: 'Cache Gradle'
description: 'Cache Gradle dependencies for sample_app Android builds'
runs:
using: "composite"
steps:
- uses: actions/cache@v6
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
sample_app/android/.gradle
key: gradle-${{ runner.os }}-${{ hashFiles('sample_app/android/gradle/wrapper/gradle-wrapper.properties', 'sample_app/android/app/build.gradle', 'sample_app/android/build.gradle', 'sample_app/android/settings.gradle', '**/pubspec.lock') }}
restore-keys: gradle-${{ runner.os }}-
11 changes: 11 additions & 0 deletions .github/actions/enable-kvm/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
name: 'Enable KVM'
description: 'Configure KVM permissions for Android emulator on Linux runners'
runs:
using: "composite"
steps:
- name: Enable KVM
shell: bash
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
4 changes: 2 additions & 2 deletions .github/actions/pana/action.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Pana Workflow

description: 'Run pana package analysis and verify the score meets the minimum threshold'
inputs:
min_score:
required: false
Expand Down Expand Up @@ -28,7 +28,7 @@ runs:
yq eval '.dependencies.stream_chat = {"path": "../stream_chat"}' -i packages/stream_chat_flutter_core/pubspec.yaml
yq eval '.dependencies.stream_chat_flutter_core = {"path": "../stream_chat_flutter_core"}' -i packages/stream_chat_flutter/pubspec.yaml
yq eval '.dependencies.stream_chat = {"path": "../stream_chat"}' -i packages/stream_chat_persistence/pubspec.yaml

- name: Install Flutter
uses: subosito/flutter-action@v2
with:
Expand Down
10 changes: 10 additions & 0 deletions .github/actions/setup-flutter/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: 'Setup Flutter'
description: 'Install Flutter with dependency caching'
runs:
using: "composite"
steps:
- uses: subosito/flutter-action@v2
with:
flutter-version: "3.x"
channel: stable
cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }}
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 }}"
9 changes: 9 additions & 0 deletions .github/actions/setup-java/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
name: 'Setup Java'
description: 'Install Java'
runs:
using: "composite"
steps:
- uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "17"
10 changes: 10 additions & 0 deletions .github/actions/setup-ruby/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: 'Setup Ruby'
description: 'Install Ruby and Cache Gems'
runs:
using: "composite"
steps:
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"
bundler-cache: true
working-directory: sample_app
34 changes: 7 additions & 27 deletions .github/workflows/distribute_external.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ on:
- ios
- both

env:
FLUTTER_VERSION: '3.x'

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
Expand All @@ -37,19 +35,19 @@ jobs:
run: |
# Is this a release?
is_release="${{ github.event_name == 'release' }}"

# If it's a release event, build both platforms
if [[ "$is_release" == "true" ]]; then
echo "Building all platforms due to release"
echo "run_ios=true" >> $GITHUB_OUTPUT
echo "run_android=true" >> $GITHUB_OUTPUT
exit 0
fi

# For manual workflow dispatch, store platform in a variable
platform="${{ github.event.inputs.platform }}"
echo "Selected platform: $platform"

# Set outputs only if they should be true
[[ "$platform" == "ios" || "$platform" == "both" ]] && echo "run_ios=true" >> $GITHUB_OUTPUT || true
[[ "$platform" == "android" || "$platform" == "both" ]] && echo "run_android=true" >> $GITHUB_OUTPUT || true
Expand All @@ -69,18 +67,9 @@ jobs:
with:
fetch-depth: 0

- name: "Install Flutter"
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: ./.github/actions/setup-flutter

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
working-directory: sample_app/android
- uses: ./.github/actions/setup-ruby

- name: Distribute to S3
working-directory: sample_app/android
Expand Down Expand Up @@ -110,21 +99,12 @@ jobs:
with:
xcode-version: '26.3'

- name: "Install Flutter"
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: ./.github/actions/setup-flutter

- name: "Disable Swift Package Manager"
run: flutter config --no-enable-swift-package-manager

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
working-directory: sample_app/ios
- uses: ./.github/actions/setup-ruby

- name: Distribute to TestFlight
working-directory: sample_app/ios
Expand Down
47 changes: 9 additions & 38 deletions .github/workflows/distribute_internal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ on:
- ios
- both

env:
FLUTTER_VERSION: '3.x'

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
Expand All @@ -40,19 +38,19 @@ jobs:
run: |
# Is this a branch push?
is_branch_push="${{ github.event_name == 'push' }}"

# If it's a branch push, build both platforms
if [[ "$is_branch_push" == "true" ]]; then
echo "Building all platforms due to branch push"
echo "run_ios=true" >> $GITHUB_OUTPUT
echo "run_android=true" >> $GITHUB_OUTPUT
exit 0
fi

# For manual workflow dispatch, store platform in a variable
platform="${{ github.event.inputs.platform }}"
echo "Selected platform: $platform"

# Set outputs only if they should be true
[[ "$platform" == "ios" || "$platform" == "both" ]] && echo "run_ios=true" >> $GITHUB_OUTPUT || true
[[ "$platform" == "android" || "$platform" == "both" ]] && echo "run_android=true" >> $GITHUB_OUTPUT || true
Expand All @@ -73,24 +71,15 @@ jobs:
with:
fetch-depth: 0

- name: "Install Flutter"
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: ./.github/actions/setup-flutter

- name: "Install Tools"
run: flutter pub global activate melos

- name: "Bootstrap Workspace"
run: melos bootstrap

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
working-directory: sample_app/android
- uses: ./.github/actions/setup-ruby

- name: Setup Firebase Service Account'
working-directory: sample_app/android
Expand Down Expand Up @@ -120,12 +109,7 @@ jobs:
with:
xcode-version: '26.3'

- name: "Install Flutter"
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: ./.github/actions/setup-flutter

- name: "Disable Swift Package Manager"
run: flutter config --no-enable-swift-package-manager
Expand All @@ -136,11 +120,7 @@ jobs:
- name: "Bootstrap Workspace"
run: melos bootstrap

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
working-directory: sample_app/ios
- uses: ./.github/actions/setup-ruby

- name: Setup Firebase Service Account
working-directory: sample_app/ios
Expand Down Expand Up @@ -173,12 +153,7 @@ jobs:
with:
xcode-version: '26.3'

- name: "Install Flutter"
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: ./.github/actions/setup-flutter

- name: "Disable Swift Package Manager"
run: flutter config --no-enable-swift-package-manager
Expand All @@ -189,11 +164,7 @@ jobs:
- name: "Bootstrap Workspace"
run: melos bootstrap

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
working-directory: sample_app/ios
- uses: ./.github/actions/setup-ruby

- name: Distribute to TestFlight Internal
working-directory: sample_app/ios
Expand Down
Loading
Loading